Skip to content

Oom reporting#5

Closed
erichkeane wants to merge 1 commit intointel:masterfrom
erichkeane:OOMReporting
Closed

Oom reporting#5
erichkeane wants to merge 1 commit intointel:masterfrom
erichkeane:OOMReporting

Conversation

@erichkeane
Copy link
Contributor

Allow Out-Of-Memory size reporting

This patch causes TinyCbor Encoder to remain in a valid-state in the situation
where it has overrun its buffer.  It does this by setting the pointer
and end variable of the encoder to NULL, making encoder->ptr - NULL (or
encoder->ptr - encoder->end) equal the amount of additional data
necessary to properly encode the package.

Signed-off-by: Erich Keane <erich.keane@intel.com>
@erichkeane
Copy link
Contributor Author

Thiago: This passes all unit-tests, and works with the new one. Most of this is per-our previous discussion.

@thiagomacieira
Copy link
Member

Merged.

@thiagomacieira thiagomacieira self-assigned this Aug 11, 2015
niooss-ledger added a commit to niooss-ledger/tinycbor that referenced this pull request Mar 13, 2025
When function text_string_to_escaped successfully parses a string and
fails to parse the next value (cbor_value_finish_string_iteration
returns an error), it correctly propagates the error but the string is
never freed.

This can be reproduced with:

    make CC='clang -g -fsanitize=address'
    printf '\x82\x60\xff' | ./bin/cbordump -j

clang's Address Sanitizer reports:

    =================================================================
    ==20317==ERROR: LeakSanitizer: detected memory leaks

    Direct leak of 1 byte(s) in 1 object(s) allocated from:
        #0 0x560b654b9916 in __interceptor_realloc (/tinycbor/bin/cbordump+0xa4916) (BuildId: f9933666b5d987b21f68c2887de4aebe93bc2bef)
        intel#1 0x560b654f5c18 in escape_text_string /tinycbor/src/cbortojson.c:331:15
        intel#2 0x560b654f3e29 in text_string_to_escaped /tinycbor/src/cbortojson.c:377:19
        intel#3 0x560b654f267d in value_to_json /tinycbor/src/cbortojson.c:674:19
        intel#4 0x560b654f34c2 in array_to_json /tinycbor/src/cbortojson.c:545:25
        intel#5 0x560b654f2085 in value_to_json /tinycbor/src/cbortojson.c:627:19
        intel#6 0x560b654f1baf in cbor_value_to_json_advance /tinycbor/src/cbortojson.c:816:12
        intel#7 0x560b654ea928 in dumpFile /tinycbor/tools/cbordump/cbordump.c:76:19
        intel#8 0x560b654ead2b in main /tinycbor/tools/cbordump/cbordump.c:149:9
        intel#9 0x7fa9d7629d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16

    SUMMARY: AddressSanitizer: 1 byte(s) leaked in 1 allocation(s).

Fix this by freeing the string when cbor_value_finish_string_iteration
fails.

Fixes: e072bc1 ("CBOR-to-JSON: do properly escape JSON strings")
thiagomacieira pushed a commit that referenced this pull request Mar 14, 2025
When function text_string_to_escaped successfully parses a string and
fails to parse the next value (cbor_value_finish_string_iteration
returns an error), it correctly propagates the error but the string is
never freed.

This can be reproduced with:

    make CC='clang -g -fsanitize=address'
    printf '\x82\x60\xff' | ./bin/cbordump -j

clang's Address Sanitizer reports:

    =================================================================
    ==20317==ERROR: LeakSanitizer: detected memory leaks

    Direct leak of 1 byte(s) in 1 object(s) allocated from:
        #0 0x560b654b9916 in __interceptor_realloc (/tinycbor/bin/cbordump+0xa4916) (BuildId: f9933666b5d987b21f68c2887de4aebe93bc2bef)
        #1 0x560b654f5c18 in escape_text_string /tinycbor/src/cbortojson.c:331:15
        #2 0x560b654f3e29 in text_string_to_escaped /tinycbor/src/cbortojson.c:377:19
        #3 0x560b654f267d in value_to_json /tinycbor/src/cbortojson.c:674:19
        #4 0x560b654f34c2 in array_to_json /tinycbor/src/cbortojson.c:545:25
        #5 0x560b654f2085 in value_to_json /tinycbor/src/cbortojson.c:627:19
        #6 0x560b654f1baf in cbor_value_to_json_advance /tinycbor/src/cbortojson.c:816:12
        #7 0x560b654ea928 in dumpFile /tinycbor/tools/cbordump/cbordump.c:76:19
        #8 0x560b654ead2b in main /tinycbor/tools/cbordump/cbordump.c:149:9
        #9 0x7fa9d7629d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16

    SUMMARY: AddressSanitizer: 1 byte(s) leaked in 1 allocation(s).

Fix this by freeing the string when cbor_value_finish_string_iteration
fails.

Fixes: e072bc1 ("CBOR-to-JSON: do properly escape JSON strings")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants