Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MDEV-14821 Assertion !is_set() || (m_status == DA_OK_BULK && is_bulk_op()) failed in Diagnostics_area::set_ok_status #441

Closed
kevgs opened this issue Jan 2, 2018 · 6 comments
Assignees
Labels

Comments

@kevgs
Copy link

kevgs commented Jan 2, 2018

Reproduce

CREATE OR REPLACE TABLE t1 (a INT, b INT) WITH SYSTEM VERSIONING;
INSERT INTO t1 VALUES (1,10),(2,20),(3,30);

UPDATE t1 SET b = 0;
ALTER TABLE t1 PARTITION BY system_time INTERVAL 1 SECOND ( PARTITION p1 HISTORY, PARTITION p2 HISTORY, PARTITION pn CURRENT );

--sleep 2
DELETE FROM t1 WHERE a = 2;
DELETE FROM t1 WHERE a = 1;
select * from t1 partition (p1);
select * from t1 partition (p2);
select * from t1 partition (pn);
DELETE FROM t1 WHERE a = 5;

Result

#3  __GI___assert_fail (assertion=0x3ab6c0 <.str.8> "!is_set() || (m_status == DA_OK_BULK && is_bulk_op())", file=0x3ab380 <.str.1> "/home/kevg/work/mariadb/sql/sql_error.cc", line=335, function=0x3ab720 <__PRETTY_FUNCTION__._ZN16Diagnostics_area13set_ok_statusEyyPKc> "void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char *)") at assert.c:101
#4  Diagnostics_area::set_ok_status (this=0x62a0000bf698, affected_rows=0, last_insert_id=0, message=0x0) at sql_error.cc:335
#5  my_ok (thd=0x62a0000ba270, affected_rows_arg=0, id=0, message=0x0) at sql_class.h:4732
#6  mysql_delete (thd=0x62a0000ba270, table_list=0x62b000000370, conds=0x62b000000b50, order_list=0x62a0000be9d0, limit=18446744073709551615, options=0, result=0x0) at sql_delete.cc:490
#7  mysql_execute_command (thd=0x62a0000ba270) at sql_parse.cc:4902
#8  mysql_parse (thd=0x62a0000ba270, rawbuf=0x62b000000288 "DELETE FROM t1 WHERE a = 5", length=26, parser_state=0x7fffdeba89e0, is_com_multi=false, is_next_command=false) at sql_parse.cc:7991
#9  dispatch_command (command=COM_QUERY, thd=0x62a0000ba270, packet=0x62900012c271 "DELETE FROM t1 WHERE a = 5", packet_length=26, is_com_multi=false, is_next_command=false) at sql_parse.cc:1824

Expected

No assertion failure.

@kevgs kevgs added the bug label Jan 2, 2018
@kevgs kevgs self-assigned this Jan 2, 2018
@kevgs
Copy link
Author

kevgs commented Jan 2, 2018

Here is the problem.

(gdb) bt
#0  Field_timestampf::cmp (this=0x61d000244108, a_ptr=0x62b000000ea0 '\217' <repeats 200 times>..., b_ptr=0x61d000245670 "\177\377\377\376") at field.h:2650
#1  partition_info_compare_column_values (first_arg=0x61d000245148, second_arg=0x61d000245250) at partition_info.cc:1700
#2  partition_info::compare_column_values (first_arg=0x61d000245148, second_arg=0x61d000245250) at partition_info.cc:1712
#3  partition_info::check_range_constants (this=0x61d000244290, thd=0x62a0000ba270, alloc=false) at partition_info.cc:1561
#4  partition_info::vers_update_range_constants (this=0x61d000244290, thd=0x62a0000ba270) at partition_info.h:565
#5  prune_partitions (thd=0x62a0000ba270, table=0x61f0000540f0, pprune_cond=0x62b000000b50) at opt_range.cc:3460
#6  mysql_delete (thd=0x62a0000ba270, table_list=0x62b000000370, conds=0x62b000000b50, order_list=0x62a0000be9d0, limit=18446744073709551615, options=0, result=0x0) at sql_delete.cc:482
#7  mysql_execute_command (thd=0x62a0000ba270) at sql_parse.cc:4902
#8  mysql_parse (thd=0x62a0000ba270, rawbuf=0x62b000000288 "DELETE FROM t1 WHERE a = 5", length=26, parser_state=0x7fffdeb989e0, is_com_multi=false, is_next_command=false) at sql_parse.cc:7991

(gdb) p/x *a_ptr@7
$1 = {0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f}
(gdb) p/x *b_ptr@7
$2 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

{0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f} looks like a bogus value.

@kevgs
Copy link
Author

kevgs commented Jan 2, 2018

Debug print every such comparison:

b field.h:2650
commands
p/x *a_ptr@7
p/x *b_ptr@7
end
$1 = {0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0}
$2 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

$3 = {0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0}
$4 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

$5 = {0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0}
$6 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

$7 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}
$8 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}

$9 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}
$10 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}

$11 = {0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0}
$12 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

$13 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}
$14 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}

$15 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}
$16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}

$17 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}
$18 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}

$19 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}
$20 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}

$21 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}
$22 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}

$23 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}
$24 = {0x5a, 0x4b, 0xe7, 0x62, 0x8, 0x70, 0xca}

$25 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}
$26 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}

$27 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}
$28 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}

$29 = {0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0}
$30 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

$31 = {0x5a, 0x4b, 0xe7, 0x66, 0xb, 0xab, 0x5}
$32 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}

$33 = {0x5a, 0x4b, 0xe7, 0x66, 0xb, 0xab, 0x5}
$34 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}

$35 = {0x5a, 0x4b, 0xe7, 0x66, 0x0, 0x0, 0x0}
$36 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

$37 = {0x5a, 0x4b, 0xe7, 0x71, 0x6, 0x53, 0xf1}
$38 = {0x5a, 0x4b, 0xe7, 0x66, 0xb, 0xab, 0x5}

$39 = {0x5a, 0x4b, 0xe7, 0x71, 0x6, 0x53, 0xf1}
$40 = {0x5a, 0x4b, 0xe7, 0x66, 0xb, 0xab, 0x5}

$41 = {0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f}
$42 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

Those are datetimes:

class Field_timestampf :public Field_timestamp_with_dec {
...
  int cmp(const uchar *a_ptr,const uchar *b_ptr)
  {
    return memcmp(a_ptr, b_ptr, pack_length());
  }

@kevgs
Copy link
Author

kevgs commented Jan 3, 2018

{0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f} is a freed value:
include/my_valgrind.h:

#define TRASH_FREE(A,B) TRASH_FILL(A,(size_t) (B),0x8F)
#define TRASH(A,B) TRASH_FREE(A,B)

@kevgs
Copy link
Author

kevgs commented Jan 3, 2018

Do not set fixed = 0 here

#0  partition_info::vers_update_col_vals (this=0x7fff9c17ade0, thd=0x7fff9c000d50, el0=0x7fff9c17b018, el1=0x7fff9c17b140) at partition_info.cc:1196
#1  partition_info::vers_update_stats (this=0x7fff9c17ade0, thd=0x7fff9c000d50, el=0x7fff9c17b140) at partition_info.h:536
#2  partition_info::vers_update_stats (this=0x7fff9c17ade0, thd=0x7fff9c000d50, part_id=1) at partition_info.h:545
#3  ha_partition::update_row (this=0x7fff9c17f518, old_data=0x7fff9c006c00 "\341\001", new_data=0x7fff9c006be8 "\341\001") at ha_partition.cc:4399
#4  handler::ha_update_row (this=0x7fff9c17f518, old_data=0x7fff9c006c00 "\341\001", new_data=0x7fff9c006be8 "\341\001") at handler.cc:6238
#5  TABLE::delete_row (this=0x7fff9c17e8e0) at sql_delete.cc:257
#6  mysql_delete (thd=0x7fff9c000d50, table_list=0x7fff9c015030, conds=0x7fff9c015810, order_list=0x7fff9c0054b0, limit=18446744073709551615, options=0, result=0x0) at sql_delete.cc:752
#7  mysql_execute_command (thd=0x7fff9c000d50) at sql_parse.cc:4902
#8  mysql_parse (thd=0x7fff9c000d50, rawbuf=0x7fff9c014f48 "DELETE FROM t1 WHERE a = 1", length=26, parser_state=0x7fffec560410, is_com_multi=false, is_next_command=false) at sql_parse.cc:7991
#9  dispatch_command (command=COM_QUERY, thd=0x7fff9c000d50, packet=0x7fff9c00b3a1 "DELETE FROM t1 WHERE a = 1", packet_length=26, is_com_multi=false, is_next_command=false) at sql_parse.cc:1824

@kevgs
Copy link
Author

kevgs commented Jan 4, 2018

Watchpoint on use-after-free piece of memory:

awatch *(const uchar *) 0x7fff9c015b60
commands
bt
end

Breakpoints on various fixed usage code:

bbt partition_info.cc:1019
bbt partition_info.cc:1199
bbt partition_info.cc:1212
bbt partition_info.cc:2848
bbt partition_info.cc:2876
bbt partition_info.cc:2936
bbt partition_info.cc:2984

Breakpoint on timestamp compare code:

b field.h:2650
commands
p/x *a_ptr@7
p/x *b_ptr@7
end

A lot of stuff in printed in gdb. Here is the quotes:

Thread 28 "mysqld" hit Hardware access (read/write) watchpoint 1: *(const uchar *) 0x7fff9c015b60

Value = 143 '\217'
__memset_avx2_erms () at memset-vec-unaligned-erms.S:141
141     in memset-vec-unaligned-erms.S
#0  __memset_avx2_erms () at memset-vec-unaligned-erms.S:141
#1  free_root (root=0x7fff9c006138, MyFlags=1) at my_alloc.c:422
#2  dispatch_command (command=COM_QUIT, thd=0x7fff9c000d50, packet=0x7fff9c00b3a1 "", packet_length=0, is_com_multi=false, is_next_command=false) at sql_parse.cc:2414
#3  do_command (thd=0x7fff9c000d50) at sql_parse.cc:1369
#4  do_handle_one_connection (connect=0x2abc250) at sql_connect.cc:1420
#5  handle_one_connection (arg=0x2abc250) at sql_connect.cc:1326
#6  pfs_spawn_thread (arg=0x2bae230) at pfs.cc:1863
#7  start_thread (arg=0x7fffec561700) at pthread_create.c:465
#8  clone () at clone.S:95

(gdb) 
Continuing.
[Switching to Thread 0x7fffec517700 (LWP 29628)]

Thread 29 "mysqld" hit Breakpoint 9, partition_info::fix_column_value_functions (this=0x7fff88022be8, thd=0x7fff88000df0, val=0x7fff880231e0, part_id=0) at partition_info.cc:2984
2984        col_val->fixed= 2;
#0  partition_info::fix_column_value_functions (this=0x7fff88022be8, thd=0x7fff88000df0, val=0x7fff880231e0, part_id=0) at partition_info.cc:2984
#1  partition_info::check_range_constants (this=0x7fff88022be8, thd=0x7fff88000df0, alloc=true) at partition_info.cc:1555
#2  fix_partition_func (thd=0x7fff88000df0, table=0x7fffec50e878, is_create_table_ind=true) at sql_partition.cc:1696
#3  open_table_from_share (thd=0x7fff88000df0, share=0x7fffec50e210, alias=0x348236 "", db_stat=0, prgflag=1, ha_open_flags=0, outparam=0x7fffec50e878, is_create_table=true) at table.cc:3361
#4  create_table_impl (thd=0x7fff88000df0, orig_db=0x7fff88014400 "test", orig_table_name=0x7fff88013d98 "t1", db=0x7fff88014400 "test", table_name=0x7fffec511da0 "#sql-7399_9", path=0x7fffec51260c "./test/#sql-7399_9", options=..., create_info=0x7fffec513098, alter_info=0x7fffec512ff0, create_table_mode=-2, is_trans=0x0, key_info=0x7fffec5115a8, key_count=0x7fffec5115a4, frm=0x7fffec511590) at sql_table.cc:5029
#5  mysql_alter_table (thd=0x7fff88000df0, new_db=0x7fff88014400 "test", new_name=0x0, create_info=0x7fffec513098, table_list=0x7fff88013dd0, alter_info=0x7fffec512ff0, order_num=0, order=0x0, ignore=false) at sql_table.cc:9524
#6  Sql_cmd_alter_table::execute (this=0x7fff88014a30, thd=0x7fff88000df0) at sql_alter.cc:325
#7  mysql_execute_command (thd=0x7fff88000df0) at sql_parse.cc:6261
#8  mysql_parse (thd=0x7fff88000df0, rawbuf=0x7fff88013c28 "ALTER TABLE t1 PARTITION BY system_time INTERVAL 1 SECOND ( PARTITION p1 HISTORY, PARTITION p2 HISTORY, PARTITION pn CURRENT )", length=126, parser_state=0x7fffec516410, is_com_multi=false, is_next_command=false) at sql_parse.cc:7991

Thread 29 "mysqld" hit Breakpoint 8, partition_info::fix_column_value_functions (this=0x7fff880235e0, thd=0x7fff88000df0, val=0x7fff88027e38, part_id=1) at partition_info.cc:2936
2936        DBUG_RETURN(FALSE);
#0  partition_info::fix_column_value_functions (this=0x7fff880235e0, thd=0x7fff88000df0, val=0x7fff88027e38, part_id=1) at partition_info.cc:2936
#1  partition_info::check_range_constants (this=0x7fff880235e0, thd=0x7fff88000df0, alloc=false) at partition_info.cc:1555
#2  partition_info::vers_update_range_constants (this=0x7fff880235e0, thd=0x7fff88000df0) at partition_info.h:565
#3  prune_partitions (thd=0x7fff88000df0, table=0x7fff88020ff0, pprune_cond=0x7fff880144f0) at opt_range.cc:3460
#4  mysql_delete (thd=0x7fff88000df0, table_list=0x7fff88013d10, conds=0x7fff880144f0, order_list=0x7fff88005550, limit=18446744073709551615, options=0, result=0x0) at sql_delete.cc:482
#5  mysql_execute_command (thd=0x7fff88000df0) at sql_parse.cc:4902
#6  mysql_parse (thd=0x7fff88000df0, rawbuf=0x7fff88013c28 "DELETE FROM t1 WHERE a = 5", length=26, parser_state=0x7fffec516410, is_com_multi=false, is_next_command=false) at sql_parse.cc:7991
#7  dispatch_command (command=COM_QUERY, thd=0x7fff88000df0, packet=0x7fff8800b441 "DELETE FROM t1 WHERE a = 5", packet_length=26, is_com_multi=false, is_next_command=false) at sql_parse.cc:1824
#8  do_command (thd=0x7fff88000df0) at sql_parse.cc:1369
#9  do_handle_one_connection (connect=0x2b66460) at sql_connect.cc:1420
#10 handle_one_connection (arg=0x2b66460) at sql_connect.cc:1326
#11 pfs_spawn_thread (arg=0x2bae870) at pfs.cc:1863
#12 start_thread (arg=0x7fffec517700) at pthread_create.c:465
#13 clone () at clone.S:95

(gdb) 
Continuing.

Thread 29 "mysqld" hit Breakpoint 2, Field_timestampf::cmp (this=0x7fff88023458, a_ptr=0x7fff88014840 '\217' <repeats 200 times>..., b_ptr=0x7fff880280b0 "\177\377\377\376") at field.h:2650
2650        return memcmp(a_ptr, b_ptr, pack_length());
$41 = {0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f}
$42 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

So, a problem piece of memory was freed long before the read-after-free query. This memory is a part of TABLE::record[0] which is pointed by Field::ptr.
Actually I can see 3 different problems here:

  1. Bogus timestamp values like max timestamp minus 1 second or minus 2 seconds:
$1 = {0x7f, 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0}
$2 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}
  1. Zero initialized values:
$9 = {0x7f, 0xff, 0xff, 0xff, 0xf, 0x42, 0x3f}
$10 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
  1. We were lucky before this particular case but here we read freed memory:
$41 = {0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f}
$42 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}

This resulted in

bool partition_info::check_range_constants(THD *thd, bool alloc)
{
// ...
range_not_increasing_error:
  my_error(ER_RANGE_NOT_INCREASING_ERROR, MYF(0));
  goto end;
}

which is a source of original observable assertion failure.

@kevgs
Copy link
Author

kevgs commented Jan 4, 2018

Assigning a pointer to a memory allocated in thd->mem_root. Now it has a sane timestamp $52 = {0x5a, 0x4e, 0x33, 0x6c, 0x0, 0x0, 0x0}:

bool partition_info::fix_column_value_functions(THD *thd,
// ...
        if (!(val_ptr= (uchar*) thd->memdup(field->ptr, len)))
        {
          mem_alloc_error(len);
          result= TRUE;
          goto end;
        }
        col_val->column_value= val_ptr;
Thread 28 "mysqld" hit Breakpoint 2, partition_info::fix_column_value_functions (this=0x7fff9c17ade0, thd=0x7fff9c000d50, val=0x7fff9c17b3c0, part_id=0) at partition_info.cc:2981
2981            col_val->column_value= val_ptr;
#0  partition_info::fix_column_value_functions (this=0x7fff9c17ade0, thd=0x7fff9c000d50, val=0x7fff9c17b3c0, part_id=0) at partition_info.cc:2981
#1  partition_info::check_range_constants (this=0x7fff9c17ade0, thd=0x7fff9c000d50, alloc=false) at partition_info.cc:1555
#2  partition_info::vers_update_range_constants (this=0x7fff9c17ade0, thd=0x7fff9c000d50) at partition_info.h:565
#3  prune_partitions (thd=0x7fff9c000d50, table=0x7fff9c17e8e0, pprune_cond=0x7fff9c015810) at opt_range.cc:3460
#4  mysql_delete (thd=0x7fff9c000d50, table_list=0x7fff9c015030, conds=0x7fff9c015810, order_list=0x7fff9c0054b0, limit=18446744073709551615, options=0, result=0x0) at sql_delete.cc:482
#5  mysql_execute_command (thd=0x7fff9c000d50) at sql_parse.cc:4902
#6  mysql_parse (thd=0x7fff9c000d50, rawbuf=0x7fff9c014f48 "DELETE FROM t1 WHERE a = 1", length=26, parser_state=0x7fffec560410, is_com_multi=false, is_next_command=false) at sql_parse.cc:7991
#7  dispatch_command (command=COM_QUERY, thd=0x7fff9c000d50, packet=0x7fff9c00b3a1 "DELETE FROM t1 WHERE a = 1", packet_length=26, is_com_multi=false, is_next_command=false) at sql_parse.cc:1824
#8  do_command (thd=0x7fff9c000d50) at sql_parse.cc:1369
#9  do_handle_one_connection (connect=0x2abc250) at sql_connect.cc:1420
#10 handle_one_connection (arg=0x2abc250) at sql_connect.cc:1326
#11 pfs_spawn_thread (arg=0x2bae230) at pfs.cc:1863
#12 start_thread (arg=0x7fffec561700) at pthread_create.c:465
#13 clone () at clone.S:95

$51 = (uchar *) 0x7fff9c015b60 "ZN3l"
$52 = {0x5a, 0x4e, 0x33, 0x6c, 0x0, 0x0, 0x0}

Freeing thd->mem_root at the end of query:

Old value = 90 'Z'
New value = 143 '\217'
__memset_avx2_erms () at memset-vec-unaligned-erms.S:141
141     memset-vec-unaligned-erms.S: No such file or directory.
#0  __memset_avx2_erms () at memset-vec-unaligned-erms.S:141
#1  free_root (root=0x7fff9c006138, MyFlags=1) at my_alloc.c:422
#2  dispatch_command (command=COM_QUERY, thd=0x7fff9c000d50, packet=0x7fff9c00b3a1 "", packet_length=26, is_com_multi=false, is_next_command=false) at sql_parse.cc:2414
#3  do_command (thd=0x7fff9c000d50) at sql_parse.cc:1369
#4  do_handle_one_connection (connect=0x2abc250) at sql_connect.cc:1420
#5  handle_one_connection (arg=0x2abc250) at sql_connect.cc:1326
#6  pfs_spawn_thread (arg=0x2bae230) at pfs.cc:1863
#7  start_thread (arg=0x7fffec561700) at pthread_create.c:465
#8  clone () at clone.S:95

Then reading it in the next query:

Thread 28 "mysqld" hit Breakpoint 1, Field_timestampf::cmp (this=0x7fff9c17ac58, a_ptr=0x7fff9c015b60 '\217' <repeats 200 times>..., b_ptr=0x7fff9c17be20 "\177\377\377\376") at field.h:2650
2650        return memcmp(a_ptr, b_ptr, pack_length());
$59 = {0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f}
$60 = {0x7f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0}
(gdb) p a_ptr
$61 = (const uchar *) 0x7fff9c015b60 '\217' <repeats 200 times>...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants