Commit 30db8445 authored by unknown's avatar unknown
Browse files

protection: TRASH in delete

fixed a bug that it discovered


include/my_sys.h:
  move TRASH to my_sys.h from sql_list.h
sql/field.h:
  use TRASH macro
sql/item.h:
  TRASH in delete
sql/item_func.h:
  never delete item's manually!
sql/opt_range.cc:
  TRASH in delete
sql/sql_lex.h:
  TRASH in delete
sql/sql_list.h:
  move TRASH to my_sys.h from sql_list.h
sql/sql_parse.cc:
  don't use properties of deleted objects (even when it's safe)
sql/sql_select.cc:
  TRASH in delete
sql/sql_show.cc:
  TRASH in delete
sql/sql_string.h:
  TRASH in delete
parent 7a1ffc06
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ extern int NEAR my_errno; /* Last error in mysys */
#define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C)
#define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C)
#define my_strdup_with_length(A,B,C) _my_strdup_with_length((A),(B),__FILE__,__LINE__,C)
#define TRASH(A,B) bfill(A, B, 0x8F)
#define QUICK_SAFEMALLOC sf_malloc_quick=1
#define NORMAL_SAFEMALLOC sf_malloc_quick=0
extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick;
@@ -164,6 +165,7 @@ extern char *my_strdup_with_length(const byte *from, uint length,
#define CALLER_INFO_PROTO   /* nothing */
#define CALLER_INFO         /* nothing */
#define ORIG_CALLER_INFO    /* nothing */
#define TRASH(A,B) /* nothing */
#endif

#ifdef HAVE_ALLOCA
+1 −5
Original line number Diff line number Diff line
@@ -37,11 +37,7 @@ class Field
  void operator=(Field &);
public:
  static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
  static void operator delete(void *ptr_arg, size_t size) {
#ifdef SAFEMALLOC
    bfill(ptr_arg, size, 0x8F);
#endif
  }
  static void operator delete(void *ptr_arg, size_t size) { TRASH(ptr_arg, size); }

  char		*ptr;			// Position to field in record
  uchar		*null_ptr;		// Byte where null_bit is
+3 −2
Original line number Diff line number Diff line
@@ -120,8 +120,9 @@ class Item {
  static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
  static void *operator new(size_t size, MEM_ROOT *mem_root)
  { return (void*) alloc_root(mem_root, (uint) size); }
  static void operator delete(void *ptr,size_t size) {}
  static void operator delete(void *ptr,size_t size, MEM_ROOT *mem_root) {}
  static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
  static void operator delete(void *ptr,size_t size, MEM_ROOT *mem_root)
  { TRASH(ptr, size); }

  enum Type {FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM, STRING_ITEM,
	     INT_ITEM, REAL_ITEM, NULL_ITEM, VARBIN_ITEM,
+1 −5
Original line number Diff line number Diff line
@@ -1035,11 +1035,7 @@ class Item_func_match :public Item_real_func
	table->file->ft_handler=0;
      table->fulltext_searched=0;
    }
    if (concat)
    {
      delete concat;
    concat= 0;
    }
    DBUG_VOID_RETURN;
  }
  enum Functype functype() const { return FT_FUNC; }
+1 −1
Original line number Diff line number Diff line
@@ -1360,7 +1360,7 @@ class TABLE_READ_PLAN
  /* Table read plans are allocated on MEM_ROOT and are never deleted */
  static void *operator new(size_t size, MEM_ROOT *mem_root)
  { return (void*) alloc_root(mem_root, (uint) size); }
  static void operator delete(void *ptr,size_t size) {}
  static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
};

class TRP_ROR_INTERSECT;
Loading