Bug 1360612 - Memory leak on incomplete JSON parse
Summary: Memory leak on incomplete JSON parse
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: qemu-kvm-rhev
Version: 7.3
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: rc
: ---
Assignee: Markus Armbruster
QA Contact: Chao Yang
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2016-07-27 07:17 UTC by Markus Armbruster
Modified: 2016-11-07 21:26 UTC (History)
4 users (show)

Fixed In Version: qemu-kvm-rhev-2.6.0-17.el7
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2016-11-07 21:26:44 UTC
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2016:2673 normal SHIPPED_LIVE qemu-kvm-rhev bug fix and enhancement update 2016-11-08 01:06:13 UTC

Description Markus Armbruster 2016-07-27 07:17:24 UTC
Description of problem:
Upstream commit 95385fe "qjson: store tokens in a GQueue" introduced a
memory leak.  We need the followup fixes to plug it:

    a942d8fa json-streamer: fix double-free on exiting during a parse
    ba4dba54 json-streamer: Don't leak tokens on incomplete parse

Version-Release number of selected component (if applicable):
qemu-kvm-rhev-2.6.0-16.el7

How reproducible:
Always

Steps to Reproduce:
1. Build tests/check-qjson.  The easiest way is "make && make check".
2. valgrind --leak-check=full tests/check-qjson

Actual results:
valgrind reports memory leaks.  See "additional info" for details.

Expected results:
No memory leaks reported.

Additional info:
==9520== 
==9520== HEAP SUMMARY:
==9520==     in use at exit: 116,145 bytes in 1,362 blocks
==9520==   total heap usage: 549,285 allocs, 547,923 frees, 22,629,087 bytes allocated
==9520== 
==9520== 14 bytes in 1 blocks are definitely lost in loss record 36 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x113E9D: json_lexer_feed (json-lexer.c:360)
==9520==    by 0x11088D: qobject_from_jsonv (qjson.c:46)
==9520==    by 0x10B8BF: unterminated_array (check-qjson.c:1448)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520== 
==9520== 15 bytes in 1 blocks are definitely lost in loss record 40 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x110895: qobject_from_jsonv (qjson.c:47)
==9520==    by 0x10B8BF: unterminated_array (check-qjson.c:1448)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x10B58F: main (check-qjson.c:1549)
==9520== 
==9520== 15 bytes in 1 blocks are definitely lost in loss record 41 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x110895: qobject_from_jsonv (qjson.c:47)
==9520==    by 0x10B81F: unterminated_dict (check-qjson.c:1466)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x10B58F: main (check-qjson.c:1549)
==9520== 
==9520== 17 bytes in 1 blocks are definitely lost in loss record 77 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D1C: json_lexer_feed_char (json-lexer.c:345)
==9520==    by 0x110895: qobject_from_jsonv (qjson.c:47)
==9520==    by 0x10B9AF: unterminated_string (check-qjson.c:1430)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x10B58F: main (check-qjson.c:1549)
==9520== 
==9520== 17 bytes in 1 blocks are definitely lost in loss record 78 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D1C: json_lexer_feed_char (json-lexer.c:345)
==9520==    by 0x110895: qobject_from_jsonv (qjson.c:47)
==9520==    by 0x10B90F: unterminated_sq_string (check-qjson.c:1436)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x10B58F: main (check-qjson.c:1549)
==9520== 
==9520== 19 bytes in 1 blocks are definitely lost in loss record 82 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D1C: json_lexer_feed_char (json-lexer.c:345)
==9520==    by 0x110895: qobject_from_jsonv (qjson.c:47)
==9520==    by 0x10B95F: unterminated_escape (check-qjson.c:1442)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x10B58F: main (check-qjson.c:1549)
==9520== 
==9520== 43 bytes in 3 blocks are definitely lost in loss record 98 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x113E9D: json_lexer_feed (json-lexer.c:360)
==9520==    by 0x11088D: qobject_from_jsonv (qjson.c:46)
==9520==    by 0x10B86F: unterminated_array_comma (check-qjson.c:1454)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520== 
==9520== 46 bytes in 3 blocks are definitely lost in loss record 99 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x113E9D: json_lexer_feed (json-lexer.c:360)
==9520==    by 0x11088D: qobject_from_jsonv (qjson.c:46)
==9520==    by 0x10B81F: unterminated_dict (check-qjson.c:1466)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520== 
==9520== 75 bytes in 5 blocks are definitely lost in loss record 128 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x113E9D: json_lexer_feed (json-lexer.c:360)
==9520==    by 0x11088D: qobject_from_jsonv (qjson.c:46)
==9520==    by 0x10B7CF: unterminated_dict_comma (check-qjson.c:1472)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520== 
==9520== 392 bytes in 28 blocks are definitely lost in loss record 130 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D1C: json_lexer_feed_char (json-lexer.c:345)
==9520==    by 0x110895: qobject_from_jsonv (qjson.c:47)
==9520==    by 0x10C298: utf8_string (check-qjson.c:828)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x10B58F: main (check-qjson.c:1549)
==9520== 
==9520== 2,244 bytes in 164 blocks are definitely lost in loss record 132 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D1C: json_lexer_feed_char (json-lexer.c:345)
==9520==    by 0x113E9D: json_lexer_feed (json-lexer.c:360)
==9520==    by 0x11088D: qobject_from_jsonv (qjson.c:46)
==9520==    by 0x10C298: utf8_string (check-qjson.c:828)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520== 
==9520== 14,350 bytes in 1,025 blocks are definitely lost in loss record 135 of 137
==9520==    at 0x4C28BF6: malloc (vg_replace_malloc.c:299)
==9520==    by 0x52FB528: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x110AD1: json_message_process_token (json-streamer.c:54)
==9520==    by 0x113D8C: json_lexer_feed_char (json-lexer.c:310)
==9520==    by 0x113E9D: json_lexer_feed (json-lexer.c:360)
==9520==    by 0x11088D: qobject_from_jsonv (qjson.c:46)
==9520==    by 0x10C1D3: limits_nesting (check-qjson.c:1508)
==9520==    by 0x531B50A: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B6D2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B8DD: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520==    by 0x531B900: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==9520== 
==9520== LEAK SUMMARY:
==9520==    definitely lost: 17,247 bytes in 1,234 blocks
==9520==    indirectly lost: 0 bytes in 0 blocks
==9520==      possibly lost: 0 bytes in 0 blocks
==9520==    still reachable: 98,898 bytes in 128 blocks
==9520==         suppressed: 0 bytes in 0 blocks
==9520== Reachable blocks (those to which a pointer was found) are not shown.
==9520== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==9520== 
==9520== For counts of detected and suppressed errors, rerun with: -v
==9520== ERROR SUMMARY: 12 errors from 12 contexts (suppressed: 0 from 0)

Comment 1 Miroslav Rezanina 2016-07-29 09:12:50 UTC
Fix included in qemu-kvm-rhev-2.6.0-17.el7

Comment 3 Chao Yang 2016-09-05 09:40:06 UTC
Reproduced with qemu-kvm-rhev-2.6.0-16.el7. 

Actual Result:

# valgrind --leak-check=full tests/check-qjson
==15681== Memcheck, a memory error detector
==15681== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==15681== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==15681== Command: tests/check-qjson
==15681== 
/literals/keyword: OK
/literals/string/simple: OK
/literals/string/escaped: OK
/literals/string/utf8: OK
/literals/string/single_quote: OK
/literals/string/vararg: OK
/literals/number/simple: OK
/literals/number/float: OK
/literals/number/vararg: OK
/dicts/simple_dict: OK
/dicts/large_dict: OK
/lists/simple_list: OK
/whitespace/simple_whitespace: OK
/varargs/simple_varargs: OK
/errors/empty_input: OK
/errors/invalid_array_comma: OK
/errors/invalid_dict_comma: OK
/errors/unterminated/string: OK
/errors/unterminated/escape: OK
/errors/unterminated/sq_string: OK
/errors/unterminated/array: OK
/errors/unterminated/array_comma: OK
/errors/unterminated/dict: OK
/errors/unterminated/dict_comma: OK
/errors/unterminated/literal: OK
/errors/limits/nesting: OK
==15681== 
==15681== HEAP SUMMARY:
==15681==     in use at exit: 26,140 bytes in 125 blocks
==15681==   total heap usage: 547,978 allocs, 547,853 frees, 22,446,647 bytes allocated
==15681== 
==15681== LEAK SUMMARY:
==15681==    definitely lost: 0 bytes in 0 blocks
==15681==    indirectly lost: 0 bytes in 0 blocks
==15681==      possibly lost: 0 bytes in 0 blocks
==15681==    still reachable: 26,140 bytes in 125 blocks
==15681==         suppressed: 0 bytes in 0 blocks
==15681== Reachable blocks (those to which a pointer was found) are not shown.
==15681== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==15681== 
==15681== For counts of detected and suppressed errors, rerun with: -v
==15681== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
[root@localhost qemu-kvm]# git describe --tags
qemu-kvm-rhev-2.6.0-22.el7
[root@localhost qemu-kvm]# cat /home/chayang/log 
==8231== HEAP SUMMARY:
==8231==     in use at exit: 43,387 bytes in 1,359 blocks
==8231==   total heap usage: 547,978 allocs, 546,619 frees, 22,446,647 bytes allocated
==8231== 
==8231== 14 bytes in 1 blocks are definitely lost in loss record 35 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x113EFD: json_lexer_feed (json-lexer.c:360)
==8231==    by 0x1108AD: qobject_from_jsonv (qjson.c:46)
==8231==    by 0x10B77F: unterminated_array (check-qjson.c:1448)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231== 
==8231== 15 bytes in 1 blocks are definitely lost in loss record 39 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x1108B5: qobject_from_jsonv (qjson.c:47)
==8231==    by 0x10B77F: unterminated_array (check-qjson.c:1448)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x10B46F: main (check-qjson.c:1549)
==8231== 
==8231== 15 bytes in 1 blocks are definitely lost in loss record 40 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x1108B5: qobject_from_jsonv (qjson.c:47)
==8231==    by 0x10B6DF: unterminated_dict (check-qjson.c:1466)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x10B46F: main (check-qjson.c:1549)
==8231== 
==8231== 17 bytes in 1 blocks are definitely lost in loss record 76 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113D88: json_lexer_feed_char (json-lexer.c:345)
==8231==    by 0x1108B5: qobject_from_jsonv (qjson.c:47)
==8231==    by 0x10B86F: unterminated_string (check-qjson.c:1430)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x10B46F: main (check-qjson.c:1549)
==8231== 
==8231== 17 bytes in 1 blocks are definitely lost in loss record 77 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113D88: json_lexer_feed_char (json-lexer.c:345)
==8231==    by 0x1108B5: qobject_from_jsonv (qjson.c:47)
==8231==    by 0x10B7CF: unterminated_sq_string (check-qjson.c:1436)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x10B46F: main (check-qjson.c:1549)
==8231== 
==8231== 19 bytes in 1 blocks are definitely lost in loss record 81 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113D88: json_lexer_feed_char (json-lexer.c:345)
==8231==    by 0x1108B5: qobject_from_jsonv (qjson.c:47)
==8231==    by 0x10B81F: unterminated_escape (check-qjson.c:1442)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x10B46F: main (check-qjson.c:1549)
==8231== 
==8231== 43 bytes in 3 blocks are definitely lost in loss record 96 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x113EFD: json_lexer_feed (json-lexer.c:360)
==8231==    by 0x1108AD: qobject_from_jsonv (qjson.c:46)
==8231==    by 0x10B72F: unterminated_array_comma (check-qjson.c:1454)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231== 
==8231== 46 bytes in 3 blocks are definitely lost in loss record 97 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x113EFD: json_lexer_feed (json-lexer.c:360)
==8231==    by 0x1108AD: qobject_from_jsonv (qjson.c:46)
==8231==    by 0x10B6DF: unterminated_dict (check-qjson.c:1466)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231== 
==8231== 75 bytes in 5 blocks are definitely lost in loss record 126 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x113EFD: json_lexer_feed (json-lexer.c:360)
==8231==    by 0x1108AD: qobject_from_jsonv (qjson.c:46)
==8231==    by 0x10B68F: unterminated_dict_comma (check-qjson.c:1472)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231== 
==8231== 392 bytes in 28 blocks are definitely lost in loss record 128 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113D88: json_lexer_feed_char (json-lexer.c:345)
==8231==    by 0x1108B5: qobject_from_jsonv (qjson.c:47)
==8231==    by 0x10CE9D: utf8_string (check-qjson.c:828)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x10B46F: main (check-qjson.c:1549)
==8231== 
==8231== 2,244 bytes in 164 blocks are definitely lost in loss record 130 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113D88: json_lexer_feed_char (json-lexer.c:345)
==8231==    by 0x113EFD: json_lexer_feed (json-lexer.c:360)
==8231==    by 0x1108AD: qobject_from_jsonv (qjson.c:46)
==8231==    by 0x10CE9D: utf8_string (check-qjson.c:828)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231== 
==8231== 14,350 bytes in 1,025 blocks are definitely lost in loss record 133 of 134
==8231==    at 0x4C27BE3: malloc (vg_replace_malloc.c:299)
==8231==    by 0x538630D: g_malloc (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x110AF1: json_message_process_token (json-streamer.c:54)
==8231==    by 0x113E3A: json_lexer_feed_char (json-lexer.c:310)
==8231==    by 0x113EFD: json_lexer_feed (json-lexer.c:360)
==8231==    by 0x1108AD: qobject_from_jsonv (qjson.c:46)
==8231==    by 0x10BFE5: limits_nesting (check-qjson.c:1508)
==8231==    by 0x53A4D19: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A4EE2: ??? (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A50ED: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231==    by 0x53A5110: g_test_run (in /usr/lib64/libglib-2.0.so.0.4600.2)
==8231== 
==8231== LEAK SUMMARY:
==8231==    definitely lost: 17,247 bytes in 1,234 blocks
==8231==    indirectly lost: 0 bytes in 0 blocks
==8231==      possibly lost: 0 bytes in 0 blocks
==8231==    still reachable: 26,140 bytes in 125 blocks
==8231==         suppressed: 0 bytes in 0 blocks
==8231== Reachable blocks (those to which a pointer was found) are not shown.
==8231== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==8231== 
==8231== For counts of detected and suppressed errors, rerun with: -v
==8231== ERROR SUMMARY: 12 errors from 12 contexts (suppressed: 0 from 0)



-- Verified pass with qemu-kvm-rhev-2.6.0-22.el7 

# valgrind --leak-check=full tests/check-qjson
==15681== Memcheck, a memory error detector
==15681== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==15681== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==15681== Command: tests/check-qjson
==15681== 
/literals/keyword: OK
/literals/string/simple: OK
/literals/string/escaped: OK
/literals/string/utf8: OK
/literals/string/single_quote: OK
/literals/string/vararg: OK
/literals/number/simple: OK
/literals/number/float: OK
/literals/number/vararg: OK
/dicts/simple_dict: OK
/dicts/large_dict: OK
/lists/simple_list: OK
/whitespace/simple_whitespace: OK
/varargs/simple_varargs: OK
/errors/empty_input: OK
/errors/invalid_array_comma: OK
/errors/invalid_dict_comma: OK
/errors/unterminated/string: OK
/errors/unterminated/escape: OK
/errors/unterminated/sq_string: OK
/errors/unterminated/array: OK
/errors/unterminated/array_comma: OK
/errors/unterminated/dict: OK
/errors/unterminated/dict_comma: OK
/errors/unterminated/literal: OK
/errors/limits/nesting: OK
==15681== 
==15681== HEAP SUMMARY:
==15681==     in use at exit: 26,140 bytes in 125 blocks
==15681==   total heap usage: 547,978 allocs, 547,853 frees, 22,446,647 bytes allocated
==15681== 
==15681== LEAK SUMMARY:
==15681==    definitely lost: 0 bytes in 0 blocks
==15681==    indirectly lost: 0 bytes in 0 blocks
==15681==      possibly lost: 0 bytes in 0 blocks
==15681==    still reachable: 26,140 bytes in 125 blocks
==15681==         suppressed: 0 bytes in 0 blocks
==15681== Reachable blocks (those to which a pointer was found) are not shown.
==15681== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==15681== 
==15681== For counts of detected and suppressed errors, rerun with: -v
==15681== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Comment 6 errata-xmlrpc 2016-11-07 21:26:44 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2016-2673.html


Note You need to log in before you can comment on or make changes to this bug.