summaryrefslogtreecommitdiff
path: root/innobase/rem
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/rem')
-rw-r--r--innobase/rem/rem0cmp.c10
-rw-r--r--innobase/rem/rem0rec.c11
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);