Bug #84827 decimal_round: Assertion `from->len == to->len' failed.
Submitted: 6 Feb 2017 7:39 Modified: 6 Feb 2017 7:57
Reporter: Roel Van de Paar Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: DML Severity:S6 (Debug Builds)
Version:5.6.35 OS:Any
Assigned to: CPU Architecture:Any

[6 Feb 2017 7:39] Roel Van de Paar
Description:
2017-02-06 18:18:29 18774 [Note] /sda/MS020217-mysql-5.6.35-linux-x86_64-debug/bin/mysqld: ready for connections.
Version: '5.6.35-debug'  socket: '/sda/MS020217-mysql-5.6.35-linux-x86_64-debug/socket.sock'  port: 10659  MySQL Community Server (GPL)
mysqld: /git/MS-5.6.35_dbg/strings/decimal.c:1663: decimal_round: Assertion `from->len == to->len' failed.
07:18:35 UTC - mysqld got signal 6 ;

Core was generated by `/sda/MS020217-mysql-5.6.35-linux-x86_64-debug/bin/mysqld --no-defaults --core -'.
Program terminated with signal 6, Aborted.
#0  0x00007f04edb09741 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:61
61        val = INTERNAL_SYSCALL (tgkill, err, 3, THREAD_GETMEM (THREAD_SELF, pid),
(gdb) bt
#0  0x00007f04edb09741 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:61
#1  0x0000000000a9cf79 in my_write_core (sig=6) at /git/MS-5.6.35_dbg/mysys/stacktrace.c:424
#2  0x000000000072c620 in handle_fatal_signal (sig=6) at /git/MS-5.6.35_dbg/sql/signal_handler.cc:230
#3  <signal handler called>
#4  0x00007f04ec0a51d7 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#5  0x00007f04ec0a68c8 in __GI_abort () at abort.c:90
#6  0x00007f04ec09e146 in __assert_fail_base (fmt=0x7f04ec1ef3a8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x10160ea "from->len == to->len",
    file=file@entry=0x1015e20 "/git/MS-5.6.35_dbg/strings/decimal.c", line=line@entry=1663, function=function@entry=0x10163a1 <__PRETTY_FUNCTION__.10413> "decimal_round")
    at assert.c:92
#7  0x00007f04ec09e1f2 in __GI___assert_fail (assertion=0x10160ea "from->len == to->len", file=0x1015e20 "/git/MS-5.6.35_dbg/strings/decimal.c", line=1663,
    function=0x10163a1 <__PRETTY_FUNCTION__.10413> "decimal_round") at assert.c:101
#8  0x0000000000e286b6 in decimal_round (from=0x7f04b8c20150, to=0x7f04ee0f7030, scale=0, mode=HALF_UP) at /git/MS-5.6.35_dbg/strings/decimal.c:1663
#9  0x000000000066f9a2 in my_decimal2int (mask=28, d=0x7f04b8c20150, unsigned_flag=0 '\000', l=0x7f04ee0f70c0) at /git/MS-5.6.35_dbg/sql/my_decimal.h:378
#10 0x00000000008fb22b in Field::convert_decimal2longlong (this=0x7f04b8c984b8, val=0x7f04b8c20150, unsigned_flag=false, has_overflow=0x7f04ee0f70f3)
    at /git/MS-5.6.35_dbg/sql/field.cc:1652
#11 0x00000000008fb323 in Field_num::store_decimal (this=0x7f04b8c984b8, val=0x7f04b8c20150) at /git/MS-5.6.35_dbg/sql/field.cc:1683
#12 0x00000000006651bd in Item_decimal::save_in_field (this=0x7f04b8c200b8, field=0x7f04b8c984b8, no_conversions=true) at /git/MS-5.6.35_dbg/sql/item.cc:6484
#13 0x0000000000657668 in Item::save_in_field_no_warnings (this=0x7f04b8c200b8, field=0x7f04b8c984b8, no_conversions=true) at /git/MS-5.6.35_dbg/sql/item.cc:1527
#14 0x000000000095e5f2 in save_value_and_handle_conversion (tree=0x7f04ee0f75e8, value=0x7f04b8c200b8, comp_op=Item_func::LT_FUNC, field=0x7f04b8c984b8,
    impossible_cond_cause=0x7f04ee0f75e0, memroot=0x7f04ee0f7b60) at /git/MS-5.6.35_dbg/sql/opt_range.cc:6643
#15 0x000000000095f198 in get_mm_leaf (param=0x7f04ee0f7c60, conf_func=0x7f04b8c1fc60, field=0x7f04b8c984b8, key_part=0x7f04b8c7c030, type=Item_func::LT_FUNC,
    value=0x7f04b8c200b8) at /git/MS-5.6.35_dbg/sql/opt_range.cc:7014
#16 0x000000000095e38a in get_mm_parts (param=0x7f04ee0f7c60, cond_func=0x7f04b8c1fc60, field=0x7f04b8c984b8, type=Item_func::LT_FUNC, value=0x7f04b8c200b8, cmp_type=INT_RESULT)
    at /git/MS-5.6.35_dbg/sql/opt_range.cc:6555
#17 0x000000000095caff in get_func_mm_tree (param=0x7f04ee0f7c60, cond_func=0x7f04b8c1fc60, field=0x7f04b8c984b8, value=0x0, cmp_type=INT_RESULT, inv=true)
    at /git/MS-5.6.35_dbg/sql/opt_range.cc:5986
#18 0x000000000095d277 in get_full_func_mm_tree (param=0x7f04ee0f7c60, cond_func=0x7f04b8c1fc60, field_item=0x7f04b8c1f8b0, value=0x0, inv=true)
    at /git/MS-5.6.35_dbg/sql/opt_range.cc:6219
#19 0x000000000095dd45 in get_mm_tree (param=0x7f04ee0f7c60, cond=0x7f04b8c1fc60) at /git/MS-5.6.35_dbg/sql/opt_range.cc:6424
#20 0x00000000009556eb in SQL_SELECT::test_quick_select (this=0x7f04b8c1ff48, thd=0x7f04c5387000, keys_to_use=..., prev_tables=0, limit=18446744073709551615,
    force_quick_range=false, interesting_order=st_order::ORDER_NOT_RELEVANT) at /git/MS-5.6.35_dbg/sql/opt_range.cc:2830
#21 0x000000000086e3c8 in SQL_SELECT::check_quick (this=0x7f04b8c1ff48, thd=0x7f04c5387000, force_quick_range=false, limit=18446744073709551615)
    at /git/MS-5.6.35_dbg/sql/opt_range.h:938
#22 0x0000000000868101 in mysql_update (thd=0x7f04c5387000, table_list=0x7f04b8c1f158, fields=..., values=..., conds=0x7f04b8c1fc60, order_num=0, order=0x0,
    limit=18446744073709551615, handle_duplicates=DUP_ERROR, ignore=true, found_return=0x7f04ee0fb118, updated_return=0x7f04ee0fb110) at /git/MS-5.6.35_dbg/sql/sql_update.cc:463
#23 0x00000000007dad1f in mysql_execute_command (thd=0x7f04c5387000) at /git/MS-5.6.35_dbg/sql/sql_parse.cc:3361
#24 0x00000000007e2ff8 in mysql_parse (thd=0x7f04c5387000, rawbuf=0x7f04b8c1f010 "UPDATE IGNORE t1 SET b = 1 WHERE b NOT IN (NULL, -", '3' <repeats 22 times>, ")", length=73,
    parser_state=0x7f04ee0fb590) at /git/MS-5.6.35_dbg/sql/sql_parse.cc:6433
#25 0x00000000007d6110 in dispatch_command (command=COM_QUERY, thd=0x7f04c5387000,
    packet=0x7f04c536b001 "UPDATE IGNORE t1 SET b = 1 WHERE b NOT IN (NULL, -", '3' <repeats 22 times>, ")", packet_length=73) at /git/MS-5.6.35_dbg/sql/sql_parse.cc:1372
#26 0x00000000007d50d4 in do_command (thd=0x7f04c5387000) at /git/MS-5.6.35_dbg/sql/sql_parse.cc:1039
#27 0x000000000079ca7c in do_handle_one_connection (thd_arg=0x7f04c5387000) at /git/MS-5.6.35_dbg/sql/sql_connect.cc:982
#28 0x000000000079c7ec in handle_one_connection (arg=0x7f04c5387000) at /git/MS-5.6.35_dbg/sql/sql_connect.cc:899
#29 0x0000000000ae9335 in pfs_spawn_thread (arg=0x7f04ea3f46a0) at /git/MS-5.6.35_dbg/storage/perfschema/pfs.cc:1860
#30 0x00007f04edb04dc5 in start_thread (arg=0x7f04ee0fc700) at pthread_create.c:308
#31 0x00007f04ec16773d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

How to repeat:
DROP DATABASE test;CREATE DATABASE test;USE test;
create TABLE t1 (a int, b int, c int, filler char(100), key(a), key(b), key(c));
UPDATE IGNORE t1 SET b = 1 WHERE b NOT IN (NULL, -3333333333333333333333); ;
[6 Feb 2017 7:41] Roel Van de Paar
Bug 76477 may be related. Perhaps, if same, fix can be backported to 5.6
[6 Feb 2017 7:57] MySQL Verification Team
Hello Roel,

Thank you for the report and test case.
Observed that 5.6.35 debug build is affected.

Thanks,
Umesh
[6 Feb 2017 8:01] MySQL Verification Team
-- 5.7.17 release/debug not affected with the provided test case
[9 Feb 2017 11:07] MySQL Verification Team
Testcase looks like it's based on the one in
Bug 18335446 - DECIMAL_ROUND: ASSERTION FAILED: FROM->LEN == TO->LEN 
which was filed as: Affects debug builds of 5.6, 5.7.
and fixed as: Noted in 5.7.5 changelog.