ibuf0ibuf.c Insert buffer calculated SQL NULL size wrong, causing overflow and assertion failure in some cases
log0log.c Retrieve a dummy value from a function to prevent gcc crashing on HP-UX
This commit is contained in:
parent
3bc1ee238c
commit
1805de7011
@ -1,3 +1,4 @@
|
|||||||
mwagner@evoq.mwagner.org
|
mwagner@evoq.mwagner.org
|
||||||
tim@threads.polyesthetic.msg
|
tim@threads.polyesthetic.msg
|
||||||
tim@work.mysql.com
|
tim@work.mysql.com
|
||||||
|
heikki@donna.mysql.fi
|
||||||
|
@ -1002,21 +1002,37 @@ ibuf_rec_get_volume(
|
|||||||
/*================*/
|
/*================*/
|
||||||
/* out: size of index record in bytes + an upper
|
/* out: size of index record in bytes + an upper
|
||||||
limit of the space taken in the page directory */
|
limit of the space taken in the page directory */
|
||||||
rec_t* rec) /* in: ibuf record */
|
rec_t* ibuf_rec)/* in: ibuf record */
|
||||||
{
|
{
|
||||||
|
dtype_t dtype;
|
||||||
|
ulint data_size = 0;
|
||||||
ulint n_fields;
|
ulint n_fields;
|
||||||
byte* field;
|
byte* types;
|
||||||
|
byte* data;
|
||||||
ulint len;
|
ulint len;
|
||||||
ulint data_size;
|
ulint i;
|
||||||
|
|
||||||
ut_ad(ibuf_inside());
|
ut_ad(ibuf_inside());
|
||||||
ut_ad(rec_get_n_fields(rec) > 2);
|
ut_ad(rec_get_n_fields(rec) > 2);
|
||||||
|
|
||||||
n_fields = rec_get_n_fields(rec) - 2;
|
n_fields = rec_get_n_fields(ibuf_rec) - 2;
|
||||||
|
|
||||||
field = rec_get_nth_field(rec, 2, &len);
|
types = rec_get_nth_field(ibuf_rec, 1, &len);
|
||||||
|
|
||||||
data_size = rec_get_data_size(rec) - (field - rec);
|
ut_ad(len == n_fields * DATA_ORDER_NULL_TYPE_BUF_SIZE);
|
||||||
|
|
||||||
|
for (i = 0; i < n_fields; i++) {
|
||||||
|
data = rec_get_nth_field(ibuf_rec, i + 2, &len);
|
||||||
|
|
||||||
|
dtype_read_for_order_and_null_size(&dtype,
|
||||||
|
types + i * DATA_ORDER_NULL_TYPE_BUF_SIZE);
|
||||||
|
|
||||||
|
if (len == UNIV_SQL_NULL) {
|
||||||
|
data_size += dtype_get_sql_null_size(&dtype);
|
||||||
|
} else {
|
||||||
|
data_size += len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return(data_size + rec_get_converted_extra_size(data_size, n_fields)
|
return(data_size + rec_get_converted_extra_size(data_size, n_fields)
|
||||||
+ page_dir_calc_reserved_space(1));
|
+ page_dir_calc_reserved_space(1));
|
||||||
|
@ -327,7 +327,8 @@ log_pad_current_log_block(void)
|
|||||||
ulint i;
|
ulint i;
|
||||||
dulint lsn;
|
dulint lsn;
|
||||||
|
|
||||||
log_reserve_and_open(OS_FILE_LOG_BLOCK_SIZE);
|
/* We retrieve lsn only because otherwise gcc crashed on HP-UX */
|
||||||
|
lsn = log_reserve_and_open(OS_FILE_LOG_BLOCK_SIZE);
|
||||||
|
|
||||||
pad_length = OS_FILE_LOG_BLOCK_SIZE
|
pad_length = OS_FILE_LOG_BLOCK_SIZE
|
||||||
- (log_sys->buf_free % OS_FILE_LOG_BLOCK_SIZE)
|
- (log_sys->buf_free % OS_FILE_LOG_BLOCK_SIZE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user