Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-23334

SIGSEGV or assertion failures in rec_get_status upon ALTER TABLE

Details

    Description

      Test cases differ only in the datatype of the column a – BIGINT vs INT.

      Test case 1

      --source include/have_innodb.inc
      --source include/have_sequence.inc
       
      CREATE TABLE t1 (
        id INT,
        a INT,
        b CHAR(60),
        PRIMARY KEY (id)
      ) ENGINE=InnoDB;
       
      INSERT INTO t1 SELECT seq, seq%21500, seq%4300 FROM seq_1_to_43000;
      --error ER_DUP_ENTRY
      ALTER TABLE t1 ADD UNIQUE (a, b);
       
      # Cleanup
      DROP TABLE t1;
      

      Test case 2

      --source include/have_innodb.inc
      --source include/have_sequence.inc
       
      CREATE TABLE t1 (
        id INT,
        a BIGINT,
        b CHAR(60),
        PRIMARY KEY (id)
      ) ENGINE=InnoDB;
       
      INSERT INTO t1 SELECT seq, seq%21500, seq%4300 FROM seq_1_to_43000;
      --error ER_DUP_ENTRY
      ALTER TABLE t1 ADD UNIQUE (a, b);
       
      # Cleanup
      DROP TABLE t1;
      

      10.3 1656ea28 with test case 1

      #3  <signal handler called>
      #4  0x0000558b9bf0ef5b in rec_get_status (rec=0x7fcce04f9002 "\200") at /data/src/10.3/storage/innobase/include/rem0rec.h:338
      #5  0x0000558b9bffa279 in rec_offs_validate (rec=0x7fcce04f9002 "\200", index=0x7fcc94035d20, offsets=0x7fcc940d7450) at /data/src/10.3/storage/innobase/rem/rem0rec.cc:518
      #6  0x0000558b9bf0f638 in rec_get_nth_cfield (rec=0x7fcce04f9002 "\200", index=0x7fcc94035d20, offsets=0x7fcc940d7450, n=2, len=0x7fcce9486d48) at /data/src/10.3/storage/innobase/include/rem0rec.h:832
      #7  0x0000558b9bef28db in innobase_rec_to_mysql (table=0x7fcc94091290, rec=0x7fcce04f9002 "\200", index=0x7fcc94035d20, offsets=0x7fcc940d7450) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:2286
      #8  0x0000558b9bff2d9d in cmp_rec_rec_simple (rec1=0x7fcce04f9002 "\200", rec2=0x7fcce05f9048 "\200", offsets1=0x7fcc940d7450, offsets2=0x7fcc94093a10, index=0x7fcc94035d20, table=0x7fcc94091290) at /data/src/10.3/storage/innobase/rem/rem0cmp.cc:1074
      #9  0x0000558b9c04123a in row_merge_blocks (dup=0x7fcce94873f0, file=0x7fcc94157fe0, block=0x7fcce04f9000 "\002", foffs0=0x7fcce94870f0, foffs1=0x7fcce94870f8, of=0x7fcce9487110, stage=0x7fcc9412da60, crypt_block=0x0, space=5) at /data/src/10.3/storage/innobase/row/row0merge.cc:3012
      #10 0x0000558b9c042229 in row_merge (trx=0x7fcce9f7f0f0, dup=0x7fcce94873f0, file=0x7fcc94157fe0, block=0x7fcce04f9000 "\002", tmpfd=0x7fcce94873c0, num_run=0x7fcce94871b0, run_offset=0x7fcc940712d0, stage=0x7fcc9412da60, crypt_block=0x0, space=5) at /data/src/10.3/storage/innobase/row/row0merge.cc:3211
      #11 0x0000558b9c04294f in row_merge_sort (trx=0x7fcce9f7f0f0, dup=0x7fcce94873f0, file=0x7fcc94157fe0, block=0x7fcce04f9000 "\002", tmpfd=0x7fcce94873c0, update_progress=true, pct_progress=50, pct_cost=20, crypt_block=0x0, space=5, stage=0x7fcc9412da60) at /data/src/10.3/storage/innobase/row/row0merge.cc:3377
      #12 0x0000558b9c0475da in row_merge_build_indexes (trx=0x7fcce9f7f0f0, old_table=0x7fcc9400b140, new_table=0x7fcc9400b140, online=true, indexes=0x7fcc94093168, key_numbers=0x7fcc94093170, n_indexes=1, table=0x7fcc94091290, defaults=0x0, col_map=0x0, add_autoinc=18446744073709551615, sequence=..., skip_pk_sort=false, stage=0x7fcc9412da60, add_v=0x0, eval_table=0x7fcc94091290, allow_not_null=false) at /data/src/10.3/storage/innobase/row/row0merge.cc:4851
      #13 0x0000558b9bf054ac in ha_innobase::inplace_alter_table (this=0x7fcc9400a608, altered_table=0x7fcc94091290, ha_alter_info=0x7fcce94881c0) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:7151
      #14 0x0000558b9ba5aa69 in handler::ha_inplace_alter_table (this=0x7fcc9400a608, altered_table=0x7fcc94091290, ha_alter_info=0x7fcce94881c0) at /data/src/10.3/sql/handler.h:4207
      #15 0x0000558b9ba4f108 in mysql_inplace_alter_table (thd=0x7fcc94000af0, table_list=0x7fcc94012908, table=0x7fcc940a2470, altered_table=0x7fcc94091290, ha_alter_info=0x7fcce94881c0, inplace_supported=HA_ALTER_INPLACE_NOCOPY_NO_LOCK, target_mdl_request=0x7fcce9488340, alter_ctx=0x7fcce94888f0) at /data/src/10.3/sql/sql_table.cc:7654
      #16 0x0000558b9ba55b6e in mysql_alter_table (thd=0x7fcc94000af0, new_db=0x7fcc940051d8, new_name=0x7fcc940055a0, create_info=0x7fcce94894e0, table_list=0x7fcc94012908, alter_info=0x7fcce9489420, order_num=0, order=0x0, ignore=false) at /data/src/10.3/sql/sql_table.cc:9946
      #17 0x0000558b9bae4694 in Sql_cmd_alter_table::execute (this=0x7fcc94013060, thd=0x7fcc94000af0) at /data/src/10.3/sql/sql_alter.cc:512
      #18 0x0000558b9b9747ac in mysql_execute_command (thd=0x7fcc94000af0) at /data/src/10.3/sql/sql_parse.cc:6022
      #19 0x0000558b9b979f61 in mysql_parse (thd=0x7fcc94000af0, rawbuf=0x7fcc94012818 "ALTER TABLE t1 ADD UNIQUE (a, b)", length=32, parser_state=0x7fcce948a5e0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7810
      #20 0x0000558b9b9667a8 in dispatch_command (command=COM_QUERY, thd=0x7fcc94000af0, packet=0x7fcc941656d1 "", packet_length=32, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1848
      #21 0x0000558b9b9650c0 in do_command (thd=0x7fcc94000af0) at /data/src/10.3/sql/sql_parse.cc:1393
      #22 0x0000558b9bade693 in do_handle_one_connection (connect=0x558b9ebe94b0) at /data/src/10.3/sql/sql_connect.cc:1403
      #23 0x0000558b9bade3f5 in handle_one_connection (arg=0x558b9ebe94b0) at /data/src/10.3/sql/sql_connect.cc:1308
      #24 0x0000558b9c4962f2 in pfs_spawn_thread (arg=0x558b9ec04560) at /data/src/10.3/storage/perfschema/pfs.cc:1869
      #25 0x00007fccf20714a4 in start_thread (arg=0x7fcce948b700) at pthread_create.c:456
      #26 0x00007fccf01a5d0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
      

      10.3 1656ea28 with test case 2

      mysqld: /data/src/10.3/storage/innobase/include/rem0rec.h:339: rec_comp_status_t rec_get_status(const rec_t*): Assertion `bits <= REC_STATUS_COLUMNS_ADDED' failed.
      200730  1:55:14 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007fb314688f12 in __GI___assert_fail (assertion=0x555e6103e208 "bits <= REC_STATUS_COLUMNS_ADDED", file=0x555e6103e230 "/data/src/10.3/storage/innobase/include/rem0rec.h", line=339, function=0x555e61044ee0 <rec_get_status(unsigned char const*)::__PRETTY_FUNCTION__> "rec_comp_status_t rec_get_status(const rec_t*)") at assert.c:101
      #8  0x0000555e60789fd2 in rec_get_status (rec=0x7fb30436f89e "\200") at /data/src/10.3/storage/innobase/include/rem0rec.h:339
      #9  0x0000555e60875279 in rec_offs_validate (rec=0x7fb30436f89e "\200", index=0x7fb2bc035d20, offsets=0x7fb2bc0d7450) at /data/src/10.3/storage/innobase/rem/rem0rec.cc:518
      #10 0x0000555e6078a638 in rec_get_nth_cfield (rec=0x7fb30436f89e "\200", index=0x7fb2bc035d20, offsets=0x7fb2bc0d7450, n=2, len=0x7fb30da26d48) at /data/src/10.3/storage/innobase/include/rem0rec.h:832
      #11 0x0000555e6076d8db in innobase_rec_to_mysql (table=0x7fb2bc091290, rec=0x7fb30436f89e "\200", index=0x7fb2bc035d20, offsets=0x7fb2bc0d7450) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:2286
      #12 0x0000555e6086dd9d in cmp_rec_rec_simple (rec1=0x7fb30436f89e "\200", rec2=0x7fb3043f4002 "\200", offsets1=0x7fb2bc0d7450, offsets2=0x7fb2bc0939a0, index=0x7fb2bc035d20, table=0x7fb2bc091290) at /data/src/10.3/storage/innobase/rem/rem0cmp.cc:1074
      #13 0x0000555e608bc23a in row_merge_blocks (dup=0x7fb30da273f0, file=0x7fb2bc157fe0, block=0x7fb3042f4000 "\002", foffs0=0x7fb30da270f0, foffs1=0x7fb30da270f8, of=0x7fb30da27110, stage=0x7fb2bc0112d0, crypt_block=0x0, space=5) at /data/src/10.3/storage/innobase/row/row0merge.cc:3012
      #14 0x0000555e608bd229 in row_merge (trx=0x7fb30e51f0f0, dup=0x7fb30da273f0, file=0x7fb2bc157fe0, block=0x7fb3042f4000 "\002", tmpfd=0x7fb30da273c0, num_run=0x7fb30da271b0, run_offset=0x7fb2bc17b420, stage=0x7fb2bc0112d0, crypt_block=0x0, space=5) at /data/src/10.3/storage/innobase/row/row0merge.cc:3211
      #15 0x0000555e608bd94f in row_merge_sort (trx=0x7fb30e51f0f0, dup=0x7fb30da273f0, file=0x7fb2bc157fe0, block=0x7fb3042f4000 "\002", tmpfd=0x7fb30da273c0, update_progress=true, pct_progress=50, pct_cost=20, crypt_block=0x0, space=5, stage=0x7fb2bc0112d0) at /data/src/10.3/storage/innobase/row/row0merge.cc:3377
      #16 0x0000555e608c25da in row_merge_build_indexes (trx=0x7fb30e51f0f0, old_table=0x7fb2bc00b140, new_table=0x7fb2bc00b140, online=true, indexes=0x7fb2bc093168, key_numbers=0x7fb2bc093170, n_indexes=1, table=0x7fb2bc091290, defaults=0x0, col_map=0x0, add_autoinc=18446744073709551615, sequence=..., skip_pk_sort=false, stage=0x7fb2bc0112d0, add_v=0x0, eval_table=0x7fb2bc091290, allow_not_null=false) at /data/src/10.3/storage/innobase/row/row0merge.cc:4851
      #17 0x0000555e607804ac in ha_innobase::inplace_alter_table (this=0x7fb2bc00a608, altered_table=0x7fb2bc091290, ha_alter_info=0x7fb30da281c0) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:7151
      #18 0x0000555e602d5a69 in handler::ha_inplace_alter_table (this=0x7fb2bc00a608, altered_table=0x7fb2bc091290, ha_alter_info=0x7fb30da281c0) at /data/src/10.3/sql/handler.h:4207
      #19 0x0000555e602ca108 in mysql_inplace_alter_table (thd=0x7fb2bc000af0, table_list=0x7fb2bc012908, table=0x7fb2bc0a2470, altered_table=0x7fb2bc091290, ha_alter_info=0x7fb30da281c0, inplace_supported=HA_ALTER_INPLACE_NOCOPY_NO_LOCK, target_mdl_request=0x7fb30da28340, alter_ctx=0x7fb30da288f0) at /data/src/10.3/sql/sql_table.cc:7654
      #20 0x0000555e602d0b6e in mysql_alter_table (thd=0x7fb2bc000af0, new_db=0x7fb2bc0051d8, new_name=0x7fb2bc0055a0, create_info=0x7fb30da294e0, table_list=0x7fb2bc012908, alter_info=0x7fb30da29420, order_num=0, order=0x0, ignore=false) at /data/src/10.3/sql/sql_table.cc:9946
      #21 0x0000555e6035f694 in Sql_cmd_alter_table::execute (this=0x7fb2bc013060, thd=0x7fb2bc000af0) at /data/src/10.3/sql/sql_alter.cc:512
      #22 0x0000555e601ef7ac in mysql_execute_command (thd=0x7fb2bc000af0) at /data/src/10.3/sql/sql_parse.cc:6022
      #23 0x0000555e601f4f61 in mysql_parse (thd=0x7fb2bc000af0, rawbuf=0x7fb2bc012818 "ALTER TABLE t1 ADD UNIQUE (a, b)", length=32, parser_state=0x7fb30da2a5e0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7810
      #24 0x0000555e601e17a8 in dispatch_command (command=COM_QUERY, thd=0x7fb2bc000af0, packet=0x7fb2bc1656d1 "", packet_length=32, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1848
      #25 0x0000555e601e00c0 in do_command (thd=0x7fb2bc000af0) at /data/src/10.3/sql/sql_parse.cc:1393
      #26 0x0000555e60359693 in do_handle_one_connection (connect=0x555e62afd4b0) at /data/src/10.3/sql/sql_connect.cc:1403
      #27 0x0000555e603593f5 in handle_one_connection (arg=0x555e62afd4b0) at /data/src/10.3/sql/sql_connect.cc:1308
      #28 0x0000555e60d112f2 in pfs_spawn_thread (arg=0x555e62b18560) at /data/src/10.3/storage/perfschema/pfs.cc:1869
      #29 0x00007fb3166114a4 in start_thread (arg=0x7fb30da2b700) at pthread_create.c:456
      #30 0x00007fb314745d0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
      

      10.4 423de1e5 with test case 2

      mysqld: /data/src/10.4/storage/innobase/include/rem0rec.h:310: rec_comp_status_t rec_get_status(const rec_t*): Assertion `bits <= REC_STATUS_INSTANT' failed.
      200730  1:56:16 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007f15b4d08f12 in __GI___assert_fail (assertion=0x55820c12971c "bits <= REC_STATUS_INSTANT", file=0x55820c129738 "/data/src/10.4/storage/innobase/include/rem0rec.h", line=310, function=0x55820c131e60 <rec_get_status(unsigned char const*)::__PRETTY_FUNCTION__> "rec_comp_status_t rec_get_status(const rec_t*)") at assert.c:101
      #8  0x000055820b80b7af in rec_get_status (rec=0x7f15a81e589e "\200") at /data/src/10.4/storage/innobase/include/rem0rec.h:310
      #9  0x000055820b90077c in rec_offs_validate (rec=0x7f15a81e589e "\200", index=0x7f155c0725a0, offsets=0x7f155c1f1ba0) at /data/src/10.4/storage/innobase/rem/rem0rec.cc:533
      #10 0x000055820b80bfd5 in rec_get_nth_cfield (rec=0x7f15a81e589e "\200", index=0x7f155c0725a0, offsets=0x7f155c1f1ba0, n=2, len=0x7f15aa06b878) at /data/src/10.4/storage/innobase/include/rem0rec.h:890
      #11 0x000055820b7ecb63 in innobase_rec_to_mysql (table=0x7f15aa06cdf0, rec=0x7f15a81e589e "\200", index=0x7f155c0725a0, offsets=0x7f155c1f1ba0) at /data/src/10.4/storage/innobase/handler/handler0alter.cc:3318
      #12 0x000055820b8fac9e in cmp_rec_rec_simple (rec1=0x7f15a81e589e "\200", rec2=0x7f15a826a002 "\200", offsets1=0x7f155c1f1ba0, offsets2=0x7f155c0703a0, index=0x7f155c0725a0, table=0x7f15aa06cdf0) at /data/src/10.4/storage/innobase/rem/rem0cmp.cc:1074
      #13 0x000055820b94a631 in row_merge_blocks (dup=0x7f15aa06bf20, file=0x7f155c0bbf30, block=0x7f15a816a000 "\002", foffs0=0x7f15aa06bc20, foffs1=0x7f15aa06bc28, of=0x7f15aa06bc40, stage=0x7f155c0adf90, crypt_block=0x0, space=5) at /data/src/10.4/storage/innobase/row/row0merge.cc:3011
      #14 0x000055820b94b620 in row_merge (trx=0x7f15aaa73140, dup=0x7f15aa06bf20, file=0x7f155c0bbf30, block=0x7f15a816a000 "\002", tmpfd=0x7f15aa06bef0, num_run=0x7f15aa06bce0, run_offset=0x7f155c0bbdb0, stage=0x7f155c0adf90, crypt_block=0x0, space=5) at /data/src/10.4/storage/innobase/row/row0merge.cc:3212
      #15 0x000055820b94bd45 in row_merge_sort (trx=0x7f15aaa73140, dup=0x7f15aa06bf20, file=0x7f155c0bbf30, block=0x7f15a816a000 "\002", tmpfd=0x7f15aa06bef0, update_progress=true, pct_progress=50, pct_cost=20, crypt_block=0x0, space=5, stage=0x7f155c0adf90) at /data/src/10.4/storage/innobase/row/row0merge.cc:3378
      #16 0x000055820b95062c in row_merge_build_indexes (trx=0x7f15aaa73140, old_table=0x7f155c1a07f0, new_table=0x7f155c1a07f0, online=true, indexes=0x7f155c06f968, key_numbers=0x7f155c06f970, n_indexes=1, table=0x7f15aa06cdf0, defaults=0x0, col_map=0x0, add_autoinc=18446744073709551615, sequence=..., skip_pk_sort=false, stage=0x7f155c0adf90, add_v=0x0, eval_table=0x7f15aa06cdf0, allow_not_null=false) at /data/src/10.4/storage/innobase/row/row0merge.cc:4851
      #17 0x000055820b7ff908 in ha_innobase::inplace_alter_table (this=0x7f155c19fd88, altered_table=0x7f15aa06cdf0, ha_alter_info=0x7f15aa06cd50) at /data/src/10.4/storage/innobase/handler/handler0alter.cc:8487
      #18 0x000055820b30382d in handler::ha_inplace_alter_table (this=0x7f155c19fd88, altered_table=0x7f15aa06cdf0, ha_alter_info=0x7f15aa06cd50) at /data/src/10.4/sql/handler.h:4369
      #19 0x000055820b2f78ee in mysql_inplace_alter_table (thd=0x7f155c000af0, table_list=0x7f155c013288, table=0x7f155c19ef20, altered_table=0x7f15aa06cdf0, ha_alter_info=0x7f15aa06cd50, target_mdl_request=0x7f15aa06dbc0, alter_ctx=0x7f15aa06e700) at /data/src/10.4/sql/sql_table.cc:7746
      #20 0x000055820b2fe806 in mysql_alter_table (thd=0x7f155c000af0, new_db=0x7f155c0052b0, new_name=0x7f155c0056b8, create_info=0x7f15aa06f2f0, table_list=0x7f155c013288, alter_info=0x7f15aa06f230, order_num=0, order=0x0, ignore=false) at /data/src/10.4/sql/sql_table.cc:10156
      #21 0x000055820b396b31 in Sql_cmd_alter_table::execute (this=0x7f155c013a48, thd=0x7f155c000af0) at /data/src/10.4/sql/sql_alter.cc:520
      #22 0x000055820b214122 in mysql_execute_command (thd=0x7f155c000af0) at /data/src/10.4/sql/sql_parse.cc:6098
      #23 0x000055820b219613 in mysql_parse (thd=0x7f155c000af0, rawbuf=0x7f155c013198 "ALTER TABLE t1 ADD UNIQUE (a, b)", length=32, parser_state=0x7f15aa070570, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:7896
      #24 0x000055820b205b48 in dispatch_command (command=COM_QUERY, thd=0x7f155c000af0, packet=0x7f155c0083a1 "", packet_length=32, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:1835
      #25 0x000055820b2042ea in do_command (thd=0x7f155c000af0) at /data/src/10.4/sql/sql_parse.cc:1353
      #26 0x000055820b38d544 in do_handle_one_connection (connect=0x55820eeebb70) at /data/src/10.4/sql/sql_connect.cc:1412
      #27 0x000055820b38d293 in handle_one_connection (arg=0x55820eeebb70) at /data/src/10.4/sql/sql_connect.cc:1316
      #28 0x000055820bd8e50d in pfs_spawn_thread (arg=0x55820ee0e530) at /data/src/10.4/storage/perfschema/pfs.cc:1869
      #29 0x00007f15b6c914a4 in start_thread (arg=0x7f15aa071700) at pthread_create.c:456
      #30 0x00007f15b4dc5d0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
      

      Not reproducible on 10.2.
      Non-debug builds don't crash, at least on my machine.

      Attachments

        Issue Links

          Activity

            I can reproduce this under ./mtr --rr, but without -O2 the trace is almost unusably long to debug. And in the end, the failure is obvious from the end state.
            The problem seems to be the rec_offs_validate() call in rec_get_nth_cfield() that was added in MDEV-11369. When the function is being called from row_merge_sort(), it will operate on records that lack the 5-byte fixed header. For the record of the first test case, only the 2-byte variable-length header is present, and the memory before those 2 bytes is unaddressable (even when not using AddressSanitizer).
            We already calculated the correct offsets, and we do not really need to access the record header:

            inline
            const byte*
            rec_get_nth_cfield(
            	const rec_t*		rec,
            	const dict_index_t*	index,
            	const rec_offs*		offsets,
            	ulint			n,
            	ulint*			len)
            {
            	ut_ad(rec_offs_validate(rec, index, offsets));
            	if (!rec_offs_nth_default(offsets, n)) {
            		return rec_get_nth_field(rec, offsets, n, len);
            	}
            	return index->instant_field_value(n, len);
            }
            

            The assertion should be moved to those calls where it is valid, but it is not valid in this function.

            This bogus debug assertion should not affect release builds.

            marko Marko Mäkelä added a comment - I can reproduce this under ./mtr --rr , but without -O2 the trace is almost unusably long to debug. And in the end, the failure is obvious from the end state. The problem seems to be the rec_offs_validate() call in rec_get_nth_cfield() that was added in MDEV-11369 . When the function is being called from row_merge_sort() , it will operate on records that lack the 5-byte fixed header. For the record of the first test case, only the 2-byte variable-length header is present, and the memory before those 2 bytes is unaddressable (even when not using AddressSanitizer). We already calculated the correct offsets , and we do not really need to access the record header: inline const byte* rec_get_nth_cfield( const rec_t* rec, const dict_index_t* index, const rec_offs* offsets, ulint n, ulint* len) { ut_ad(rec_offs_validate(rec, index, offsets)); if (!rec_offs_nth_default(offsets, n)) { return rec_get_nth_field(rec, offsets, n, len); } return index->instant_field_value(n, len); } The assertion should be moved to those calls where it is valid, but it is not valid in this function. This bogus debug assertion should not affect release builds.

            It turns out that the debug assertion is redundant: on every code path leading to rec_get_nth_cfield() we either invoked rec_get_offsets() ourselves or asserted rec_offs_validate(), or the assertion is invalid because rec may be lacking the fixed-size header (5 or 6 bytes).

            marko Marko Mäkelä added a comment - It turns out that the debug assertion is redundant: on every code path leading to rec_get_nth_cfield() we either invoked rec_get_offsets() ourselves or asserted rec_offs_validate() , or the assertion is invalid because rec may be lacking the fixed-size header (5 or 6 bytes).

            People

              marko Marko Mäkelä
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.