Skip to content
  • Markus Armbruster's avatar
    cbf97d5b
    qapi: Fix visit_type_STRUCT() not to fail for null object · cbf97d5b
    Markus Armbruster authored
    
    
    To make deallocating partially constructed objects work, the
    visit_type_STRUCT() need to succeed without doing anything when passed
    a null object.
    
    Commit cdd2b228 "qapi: Smooth visitor error checking in generated
    code" broke that.  To reproduce, run tests/test-qobject-input-visitor
    with AddressSanitizer:
    
        ==4353==ERROR: LeakSanitizer: detected memory leaks
    
        Direct leak of 16 byte(s) in 1 object(s) allocated from:
    	#0 0x7f192d0c5d28 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded28)
    	#1 0x7f192cd21b10 in g_malloc0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x51b10)
    	#2 0x556725f6bbee in visit_next_list qapi/qapi-visit-core.c:86
    	#3 0x556725f49e15 in visit_type_UserDefOneList tests/test-qapi-visit.c:474
    	#4 0x556725f4489b in test_visitor_in_fail_struct_in_list tests/test-qobject-input-visitor.c:1086
    	#5 0x7f192cd42f29  (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x72f29)
    
        SUMMARY: AddressSanitizer: 16 byte(s) leaked in 1 allocation(s).
    
    Test case /visitor/input/fail/struct-in-list feeds a list with a bad
    element to the QObject input visitor.  Visiting that element duly
    fails, and aborts the visit with the list only partially constructed:
    the faulty object is null.  Cleaning up the partially constructed list
    visits that null object, fails, and aborts the visit before the list
    node gets freed.
    
    Fix the the generated visit_type_STRUCT() to succeed for null objects.
    
    Fixes: cdd2b228
    Reported-by: default avatarLi Qiang <liq3ea@163.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Message-Id: <20200716150617.4027356-1-armbru@redhat.com>
    Tested-by: default avatarLi Qiang <liq3ea@gmail.com>
    Reviewed-by: default avatarLi Qiang <liq3ea@gmail.com>
    cbf97d5b
    qapi: Fix visit_type_STRUCT() not to fail for null object
    Markus Armbruster authored
    
    
    To make deallocating partially constructed objects work, the
    visit_type_STRUCT() need to succeed without doing anything when passed
    a null object.
    
    Commit cdd2b228 "qapi: Smooth visitor error checking in generated
    code" broke that.  To reproduce, run tests/test-qobject-input-visitor
    with AddressSanitizer:
    
        ==4353==ERROR: LeakSanitizer: detected memory leaks
    
        Direct leak of 16 byte(s) in 1 object(s) allocated from:
    	#0 0x7f192d0c5d28 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded28)
    	#1 0x7f192cd21b10 in g_malloc0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x51b10)
    	#2 0x556725f6bbee in visit_next_list qapi/qapi-visit-core.c:86
    	#3 0x556725f49e15 in visit_type_UserDefOneList tests/test-qapi-visit.c:474
    	#4 0x556725f4489b in test_visitor_in_fail_struct_in_list tests/test-qobject-input-visitor.c:1086
    	#5 0x7f192cd42f29  (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x72f29)
    
        SUMMARY: AddressSanitizer: 16 byte(s) leaked in 1 allocation(s).
    
    Test case /visitor/input/fail/struct-in-list feeds a list with a bad
    element to the QObject input visitor.  Visiting that element duly
    fails, and aborts the visit with the list only partially constructed:
    the faulty object is null.  Cleaning up the partially constructed list
    visits that null object, fails, and aborts the visit before the list
    node gets freed.
    
    Fix the the generated visit_type_STRUCT() to succeed for null objects.
    
    Fixes: cdd2b228
    Reported-by: default avatarLi Qiang <liq3ea@163.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Message-Id: <20200716150617.4027356-1-armbru@redhat.com>
    Tested-by: default avatarLi Qiang <liq3ea@gmail.com>
    Reviewed-by: default avatarLi Qiang <liq3ea@gmail.com>
Loading