[MDEV-26801] Valgrind/MSAN errors in Column_statistics_collected::finish, main.statistics_json fails Created: 2021-10-11  Updated: 2022-01-19  Resolved: 2021-10-11

Status: Closed
Project: MariaDB Server
Component/s: Optimizer, Tests
Affects Version/s: N/A
Fix Version/s: 10.7.1

Type: Bug Priority: Critical
Reporter: Elena Stepanova Assignee: Sergei Petrunia
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Problem/Incident
is caused by MDEV-21130 Histograms: use JSON as on-disk format Closed
is caused by MDEV-26519 JSON Histograms: improve histogram co... Closed

 Description   

preview-10.7-MDEV-26519-json-histograms e476577ff

main.statistics_json 'innodb'            [ fail ]  Found warnings/errors in server log file!
        Test ended at 2021-10-11 15:57:19
line
==2034357== Thread 18:
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0xB88CA5: Column_statistics_collected::finish(st_mem_root*, unsigned long long, double) (sql_statistics.cc:2517)
==2034357==    by 0xB803CE: collect_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2813)
==2034357==    by 0xC73889: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1042)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357==    by 0x11566B8: pfs_spawn_thread (pfs.cc:2201)
==2034357==    by 0x4E53608: start_thread (pthread_create.c:477)
==2034357==    by 0x52E3292: clone (clone.S:95)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0xB88CF4: Column_statistics_collected::finish(st_mem_root*, unsigned long long, double) (sql_statistics.cc:2526)
==2034357==    by 0xB803CE: collect_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2813)
==2034357==    by 0xC73889: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1042)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357==    by 0x11566B8: pfs_spawn_thread (pfs.cc:2201)
==2034357==    by 0x4E53608: start_thread (pthread_create.c:477)
==2034357==    by 0x52E3292: clone (clone.S:95)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0xB8524A: Column_statistics::set_avg_frequency(double) (sql_statistics.h:561)
==2034357==    by 0xB88EB7: Column_statistics_collected::finish(st_mem_root*, unsigned long long, double) (sql_statistics.cc:2542)
==2034357==    by 0xB803CE: collect_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2813)
==2034357==    by 0xC73889: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1042)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357==    by 0x11566B8: pfs_spawn_thread (pfs.cc:2201)
==2034357==    by 0x4E53608: start_thread (pthread_create.c:477)
==2034357==    by 0x52E3292: clone (clone.S:95)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0xB88EEB: Column_statistics_collected::finish(st_mem_root*, unsigned long long, double) (sql_statistics.cc:2549)
==2034357==    by 0xB803CE: collect_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2813)
==2034357==    by 0xC73889: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1042)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357==    by 0x11566B8: pfs_spawn_thread (pfs.cc:2201)
==2034357==    by 0x4E53608: start_thread (pthread_create.c:477)
==2034357==    by 0x52E3292: clone (clone.S:95)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0xB8513B: Column_statistics::get_avg_frequency() (sql_statistics.h:546)
==2034357==    by 0xB86549: Column_stat::store_stat_fields() (sql_statistics.cc:1071)
==2034357==    by 0xB85A0C: Stat_table::update_stat() (sql_statistics.cc:661)
==2034357==    by 0xB80826: update_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2917)
==2034357==    by 0xC738C8: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1043)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357==    by 0x11566B8: pfs_spawn_thread (pfs.cc:2201)
==2034357==    by 0x4E53608: start_thread (pthread_create.c:477)
==2034357==    by 0x52E3292: clone (clone.S:95)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0x17A911D: my_gcvt (dtoa.c:222)
==2034357==    by 0x17A3FF9: double2decimal (decimal.c:1069)
==2034357==    by 0xC615C4: double2my_decimal(unsigned int, double, my_decimal*) (my_decimal.h:444)
==2034357==    by 0xE0EA34: Field_new_decimal::store(double) (field.cc:3534)
==2034357==    by 0xB86555: Column_stat::store_stat_fields() (sql_statistics.cc:1071)
==2034357==    by 0xB85A0C: Stat_table::update_stat() (sql_statistics.cc:661)
==2034357==    by 0xB80826: update_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2917)
==2034357==    by 0xC738C8: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1043)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357==    by 0x11566B8: pfs_spawn_thread (pfs.cc:2201)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0x17ACB48: dtoa (dtoa.c:2227)
==2034357==    by 0x17A918C: my_gcvt (dtoa.c:225)
==2034357==    by 0x17A3FF9: double2decimal (decimal.c:1069)
==2034357==    by 0xC615C4: double2my_decimal(unsigned int, double, my_decimal*) (my_decimal.h:444)
==2034357==    by 0xE0EA34: Field_new_decimal::store(double) (field.cc:3534)
==2034357==    by 0xB86555: Column_stat::store_stat_fields() (sql_statistics.cc:1071)
==2034357==    by 0xB85A0C: Stat_table::update_stat() (sql_statistics.cc:661)
==2034357==    by 0xB80826: update_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2917)
==2034357==    by 0xC738C8: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1043)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0x17ACB87: dtoa (dtoa.c:2237)
==2034357==    by 0x17A918C: my_gcvt (dtoa.c:225)
==2034357==    by 0x17A3FF9: double2decimal (decimal.c:1069)
==2034357==    by 0xC615C4: double2my_decimal(unsigned int, double, my_decimal*) (my_decimal.h:444)
==2034357==    by 0xE0EA34: Field_new_decimal::store(double) (field.cc:3534)
==2034357==    by 0xB86555: Column_stat::store_stat_fields() (sql_statistics.cc:1071)
==2034357==    by 0xB85A0C: Stat_table::update_stat() (sql_statistics.cc:661)
==2034357==    by 0xB80826: update_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2917)
==2034357==    by 0xC738C8: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1043)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0x17ACBA8: dtoa (dtoa.c:2237)
==2034357==    by 0x17A918C: my_gcvt (dtoa.c:225)
==2034357==    by 0x17A3FF9: double2decimal (decimal.c:1069)
==2034357==    by 0xC615C4: double2my_decimal(unsigned int, double, my_decimal*) (my_decimal.h:444)
==2034357==    by 0xE0EA34: Field_new_decimal::store(double) (field.cc:3534)
==2034357==    by 0xB86555: Column_stat::store_stat_fields() (sql_statistics.cc:1071)
==2034357==    by 0xB85A0C: Stat_table::update_stat() (sql_statistics.cc:661)
==2034357==    by 0xB80826: update_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2917)
==2034357==    by 0xC738C8: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1043)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)
==2034357== Conditional jump or move depends on uninitialised value(s)
==2034357==    at 0x17ACBB2: dtoa (dtoa.c:2237)
==2034357==    by 0x17A918C: my_gcvt (dtoa.c:225)
==2034357==    by 0x17A3FF9: double2decimal (decimal.c:1069)
==2034357==    by 0xC615C4: double2my_decimal(unsigned int, double, my_decimal*) (my_decimal.h:444)
==2034357==    by 0xE0EA34: Field_new_decimal::store(double) (field.cc:3534)
==2034357==    by 0xB86555: Column_stat::store_stat_fields() (sql_statistics.cc:1071)
==2034357==    by 0xB85A0C: Stat_table::update_stat() (sql_statistics.cc:661)
==2034357==    by 0xB80826: update_statistics_for_table(THD*, TABLE*) (sql_statistics.cc:2917)
==2034357==    by 0xC738C8: mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) (sql_admin.cc:1043)
==2034357==    by 0xC7537D: Sql_cmd_analyze_table::execute(THD*) (sql_admin.cc:1517)
==2034357==    by 0xA90A4B: mysql_execute_command(THD*, bool) (sql_parse.cc:5989)
==2034357==    by 0xA96C55: mysql_parse(THD*, char*, unsigned int, Parser_state*) (sql_parse.cc:8029)
==2034357==    by 0xA830A1: dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) (sql_parse.cc:1894)
==2034357==    by 0xA81A3D: do_command(THD*, bool) (sql_parse.cc:1402)
==2034357==    by 0xC5982E: do_handle_one_connection(CONNECT*, bool) (sql_connect.cc:1418)
==2034357==    by 0xC594BE: handle_one_connection (sql_connect.cc:1312)

==232467==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x55a16f72c0d8 in Column_statistics_collected::finish(st_mem_root*, unsigned long long, double) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_statistics.cc:2517:9
    #1 0x55a16f70e9fb in collect_statistics_for_table(THD*, TABLE*) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_statistics.cc:2813:37
    #2 0x55a16fa47f8f in mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, st_mysql_const_lex_string const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), bool) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_admin.cc:1042:15
    #3 0x55a16fa4b657 in Sql_cmd_analyze_table::execute(THD*) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_admin.cc:1517:8
    #4 0x55a16f3bfa7a in mysql_execute_command(THD*, bool) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_parse.cc:5989:26
    #5 0x55a16f3a8105 in mysql_parse(THD*, char*, unsigned int, Parser_state*) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_parse.cc:8029:18
    #6 0x55a16f39c215 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_parse.cc:1894:7
    #7 0x55a16f3aa55a in do_command(THD*, bool) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_parse.cc:1402:17
    #8 0x55a16f9f521f in do_handle_one_connection(CONNECT*, bool) /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_connect.cc:1418:11
    #9 0x55a16f9f47b5 in handle_one_connection /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_connect.cc:1312:5
    #10 0x55a170cb53c1 in pfs_spawn_thread /home/jenkins/workspace/sandbox-elenst/MSAN/src/storage/perfschema/pfs.cc:2201:3
    #11 0x7f5d3c7fd608 in start_thread /build/glibc-eX1tMB/glibc-2.31/nptl/pthread_create.c:477:8
    #12 0x7f5d3c3c4292 in clone /build/glibc-eX1tMB/glibc-2.31/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:95
 
  Memory was marked as uninitialized
    #0 0x55a16eda894e in __msan_allocated_memory (/home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/mariadbd+0x70b94e)
    #1 0x55a17202bea6 in my_malloc /home/jenkins/workspace/sandbox-elenst/MSAN/src/mysys/my_malloc.c:113:7
 
SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/jenkins/workspace/sandbox-elenst/MSAN/src/sql/sql_statistics.cc:2517:9 in Column_statistics_collected::finish(st_mem_root*, unsigned long long, double)



 Comments   
Comment by Sergei Petrunia [ 2021-10-11 ]

This is something recently-added...

Comment by Sergei Petrunia [ 2021-10-11 ]

OK most (or all?) of the errors are triggered by this commit:

commit e476577ffd2758cd972189384fe40c12cf3217f3 (HEAD -> preview-10.7-MDEV-26519-json-histograms)
Author: Sergei Petrunia <psergey@askmonty.org>
Date:   Sun Oct 10 11:51:04 2021 +0300
 
    MDEV-26724 Endless loop in json_escape_to_string upon ... empty string
    
    Part#3:
    - make json_escape() return different errors on conversion error
      and on out-of-space condition.
    - Make histogram code handle conversion errors.

and are caused by handling the unassigned-character code path

Generated at Thu Feb 08 09:48:02 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.