diff options
Diffstat (limited to 'innobase/rem')
-rw-r--r-- | innobase/rem/rem0cmp.c | 10 | ||||
-rw-r--r-- | innobase/rem/rem0rec.c | 11 |
2 files changed, 21 insertions, 0 deletions
diff --git a/innobase/rem/rem0cmp.c b/innobase/rem/rem0cmp.c index 47b7021bf27..9a5a0eb6e8e 100644 --- a/innobase/rem/rem0cmp.c +++ b/innobase/rem/rem0cmp.c @@ -113,6 +113,16 @@ cmp_types_are_equal( return(FALSE); } + if (type1->mtype == DATA_INT + && (type1->prtype & DATA_UNSIGNED) + != (type2->prtype & DATA_UNSIGNED)) { + /* The storage format of an unsigned integer is different + from a signed integer: in a signed integer we OR + 0x8000... to the value of positive integers. */ + + return(FALSE); + } + if (type1->mtype == DATA_MYSQL || type1->mtype == DATA_VARMYSQL) { diff --git a/innobase/rem/rem0rec.c b/innobase/rem/rem0rec.c index f3b949ca06f..a151389798d 100644 --- a/innobase/rem/rem0rec.c +++ b/innobase/rem/rem0rec.c @@ -105,6 +105,17 @@ rec_get_nth_field( ut_ad(rec && len); ut_ad(n < rec_get_n_fields(rec)); + if (n > 1024) { + fprintf(stderr, "Error: trying to access field %lu in rec\n", + n); + ut_a(0); + } + + if (rec == NULL) { + fprintf(stderr, "Error: rec is NULL pointer\n"); + ut_a(0); + } + if (rec_get_1byte_offs_flag(rec)) { os = rec_1_get_field_start_offs(rec, n); |