diff options
Diffstat (limited to 'innobase/include/rem0rec.ic')
-rw-r--r-- | innobase/include/rem0rec.ic | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/innobase/include/rem0rec.ic b/innobase/include/rem0rec.ic index 1e9ecb47e2e..6b96e3056fa 100644 --- a/innobase/include/rem0rec.ic +++ b/innobase/include/rem0rec.ic @@ -947,7 +947,8 @@ rec_get_converted_size( } /**************************************************************** -Folds a prefix of a physical record to a ulint. */ +Folds a prefix of a physical record to a ulint. Folds only existing fields, +that is, checks that we do not run out of the record. */ UNIV_INLINE ulint rec_fold( @@ -963,6 +964,7 @@ rec_fold( byte* data; ulint len; ulint fold; + ulint n_fields_rec; ut_ad(rec_validate(rec)); ut_ad(n_fields <= rec_get_n_fields(rec)); @@ -971,6 +973,16 @@ rec_fold( /* Only the page supremum and infimum records have 1 field: */ ut_ad(rec_get_n_fields(rec) > 1); + n_fields_rec = rec_get_n_fields(rec); + + if (n_fields > n_fields_rec) { + n_fields = n_fields_rec; + } + + if (n_fields == n_fields_rec) { + n_bytes = 0; + } + fold = ut_fold_dulint(tree_id); for (i = 0; i < n_fields; i++) { |