diff options
author | unknown <marko@hundin.mysql.fi> | 2004-04-01 16:51:34 +0300 |
---|---|---|
committer | unknown <marko@hundin.mysql.fi> | 2004-04-01 16:51:34 +0300 |
commit | 025ddfea288890236d4da04b46b3fff926707de3 (patch) | |
tree | fab5076a83cb8b112b16f76355f3a96a708c48ba /innobase/ibuf | |
parent | 95367941561263fac5ee399dd8eb4a408690bc0d (diff) | |
download | mariadb-git-025ddfea288890236d4da04b46b3fff926707de3.tar.gz |
InnoDB cleanup: fixing buffer overflows and quoting of quotes
innobase/dict/dict0crea.c:
Remove unneeded prototypes for static functions
Remove unused parameters from some functions
Replace some assertions with compile-time checks
dict_create_add_foreigns_to_dictionary():
allocate space dynamically for the SQL, and quote quotes
innobase/dict/dict0dict.c:
Remove unnecessary prototypes for static functions
dict_tables_have_same_db(): Remove length limitation
dict_remove_db_name(): Use strchr()
dict_get_db_name_len(): Use strchr()
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
Remove unnecessary strlen() calls
Allocate space dynamically for generated strings
dict_scan_id(): allow quotes within quoted strings
innobase/dict/dict0load.c:
Remove unnecessary strlen() calls
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/dict/dict0mem.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/eval/eval0eval.c:
Make TO_CHAR() work with any machine word width
innobase/fil/fil0fil.c:
Replace mem_alloc()+strlen()+strcpy() with mem_strdup()
innobase/ibuf/ibuf0ibuf.c:
Make some global variables static
Add #ifdef UNIV_IBUF_DEBUG around debug statements
innobase/include/data0data.h:
Add #ifdef UNIV_DEBUG around dtuple_validate()
innobase/include/data0data.ic:
Replace = with == in ut_ad(tuple->magic_n == DATA_TUPLE_MAGIC_N)
innobase/include/dict0dict.h:
Add const qualifiers
innobase/include/lock0lock.h:
Add UL suffixes to unsigned long masks
innobase/include/log0log.h:
Remove unused parameter "type" of log_group_write_buf()
innobase/include/mem0mem.h:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/mem0mem.ic:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/row0uins.h:
Remove unused parameter "thr" of row_undo_ins()
innobase/include/row0undo.h:
Remvoe unused parameter "thr" of row_undo_search_clust_to_pcur()
innobase/include/ut0byte.h:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/include/ut0mem.h:
Add ut_strlenq(), ut_strcpyq() and ut_memcpyq()
innobase/include/ut0mem.ic:
Add ut_strlenq()
innobase/include/ut0ut.h:
Declare ut_sprintf() as a printf-style function
innobase/lock/lock0lock.c:
lock_clust_rec_modify_check_and_lock(): Remove unused variable "trx"
innobase/log/log0log.c:
Remove unused parameters
innobase/log/log0recv.c:
Remove parameter "type" from log_group_write_buf()
innobase/mem/mem0mem.c:
Simplify the initialization of block->init_block
innobase/mtr/mtr0log.c:
Add a debug assertion to mlog_parse_initial_log_record()
innobase/page/page0cur.c:
Add debug assertion to page_cur_insert_rec_write_log()
Remove hard-coded buffer size in page_cur_parse_insert_rec()
innobase/page/page0page.c:
Remove unneeded variable rec
innobase/pars/pars0opt.c:
Correct a potential buffer overflow
innobase/pars/pars0pars.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/row/row0ins.c:
Replace parameter "thr" with "trx" in row_ins_foreign_report_add_err()
Remove unnecessary strlen() call
Use strchr()
innobase/row/row0mysql.c:
Add row_mysql_is_recovered_tmp_table()
Add row_mysql_is_system_table()
Compare reserved table names with exact match
Use strstr() and strchr() and mem_strdupl()
Compute space needed for generated SQL, and allocate it dynamically
innobase/row/row0purge.c:
Remove unused parameters "thr"
innobase/row/row0row.c:
Simplify row_get_clust_rec()
innobase/row/row0uins.c:
Remove unused parameters "thr"
innobase/row/row0umod.c:
Remove unused variable "index"
row_undo_mod_del_unmark_sec_and_undo_update():
Remove parameter "node" and variable "rec"
Remove unused parameters "thr"
innobase/row/row0undo.c:
Remove unused parameters "thr"
innobase/srv/srv0srv.c:
Replace UT_NOT_USED() with __attribute__((unused))
innobase/srv/srv0start.c:
Remove unnecessary strlen() calls
Remove unused parameter "create_new_db" of open_or_create_log_file()
innobase/trx/trx0roll.c:
Replace mem_alloc()+strlen()+memcpy() with mem_strdup()
innobase/trx/trx0sys.c:
Remove unnecessary strlen() call
innobase/ut/ut0byte.c:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/ut/ut0mem.c:
Add ut_strlenq() and ut_memcpyq()
sql/ha_innodb.cc:
Remove parameter "len" of ut_cmp_in_lower_case()
Diffstat (limited to 'innobase/ibuf')
-rw-r--r-- | innobase/ibuf/ibuf0ibuf.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/innobase/ibuf/ibuf0ibuf.c b/innobase/ibuf/ibuf0ibuf.c index f2c631d88cd..0af47a8ccc2 100644 --- a/innobase/ibuf/ibuf0ibuf.c +++ b/innobase/ibuf/ibuf0ibuf.c @@ -102,9 +102,10 @@ pages, as long as it obeys the access order rules. */ #define IBUF_POOL_SIZE_PER_MAX_SIZE 2 /* The insert buffer control structure */ -ibuf_t* ibuf = NULL; +ibuf_t* ibuf = NULL; -ulint ibuf_rnd = 986058871; +static +ulint ibuf_rnd = 986058871; ulint ibuf_flush_count = 0; @@ -113,9 +114,9 @@ ulint ibuf_flush_count = 0; #define IBUF_COUNT_N_PAGES 10000 /* Buffered entry counts for file pages, used in debugging */ -ulint* ibuf_counts[IBUF_COUNT_N_SPACES]; +static ulint* ibuf_counts[IBUF_COUNT_N_SPACES]; -ibool ibuf_counts_inited = FALSE; +static ibool ibuf_counts_inited = FALSE; /* The start address for an insert buffer bitmap page bitmap */ #define IBUF_BITMAP PAGE_DATA @@ -129,15 +130,18 @@ ibool ibuf_counts_inited = FALSE; /* Number of bits describing a single page */ #define IBUF_BITS_PER_PAGE 4 +#if IBUF_BITS_PER_PAGE % 2 +# error "IBUF_BITS_PER_PAGE must be an even number!" +#endif /* The mutex used to block pessimistic inserts to ibuf trees */ -mutex_t ibuf_pessimistic_insert_mutex; +static mutex_t ibuf_pessimistic_insert_mutex; /* The mutex protecting the insert buffer structs */ -mutex_t ibuf_mutex; +static mutex_t ibuf_mutex; /* The mutex protecting the insert buffer bitmaps */ -mutex_t ibuf_bitmap_mutex; +static mutex_t ibuf_bitmap_mutex; /* The area in pages from which contract looks for page numbers for merge */ #define IBUF_MERGE_AREA 8 @@ -2506,16 +2510,13 @@ ibuf_merge_or_delete_for_page( dtuple_t* entry; dtuple_t* search_tuple; rec_t* ibuf_rec; - ibool closed; buf_block_t* block; page_t* bitmap_page; ibuf_data_t* ibuf_data; - ibool success; ulint n_inserts; +#ifdef UNIV_IBUF_DEBUG ulint volume; - ulint old_bits; - ulint new_bits; - dulint max_trx_id; +#endif ibool corruption_noticed = FALSE; mtr_t mtr; char err_buf[500]; @@ -2605,12 +2606,14 @@ ibuf_merge_or_delete_for_page( } n_inserts = 0; +#ifdef UNIV_IBUF_DEBUG volume = 0; +#endif loop: mtr_start(&mtr); if (page) { - success = buf_page_get_known_nowait(RW_X_LATCH, page, + ibool success = buf_page_get_known_nowait(RW_X_LATCH, page, BUF_KEEP_OLD, IB__FILE__, __LINE__, &mtr); @@ -2667,7 +2670,7 @@ loop: keep the latch to the ibuf_rec page until the insertion is finished! */ - max_trx_id = page_get_max_trx_id( + dulint max_trx_id = page_get_max_trx_id( buf_frame_align(ibuf_rec)); page_update_max_trx_id(page, max_trx_id); @@ -2686,9 +2689,8 @@ loop: n_inserts++; /* Delete the record from ibuf */ - closed = ibuf_delete_rec(space, page_no, &pcur, search_tuple, - &mtr); - if (closed) { + if (ibuf_delete_rec(space, page_no, &pcur, search_tuple, + &mtr)) { /* Deletion was pessimistic and mtr was committed: we start from the beginning again */ @@ -2717,10 +2719,9 @@ reset_bit: ibuf_bitmap_page_set_bits(bitmap_page, page_no, IBUF_BITMAP_BUFFERED, FALSE, &mtr); if (page) { - old_bits = ibuf_bitmap_page_get_bits(bitmap_page, page_no, - IBUF_BITMAP_FREE, &mtr); - new_bits = ibuf_index_page_calc_free(page); - + ulint old_bits = ibuf_bitmap_page_get_bits(bitmap_page, + page_no, IBUF_BITMAP_FREE, &mtr); + ulint new_bits = ibuf_index_page_calc_free(page); #ifdef UNIV_IBUF_DEBUG /* printf("Old bits %lu new bits %lu max size %lu\n", old_bits, new_bits, |