Skip to content

Commit 684af6d

Browse files
author
czjaso
committed
Fix unit tests and skipOneHexEscape logic for overflows.
1 parent e5c12ff commit 684af6d

File tree

2 files changed

+5
-23
lines changed

2 files changed

+5
-23
lines changed

source/core_json.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,17 +331,16 @@ static bool skipOneHexEscape( const char * buf,
331331
size_t i = 0U, end = 0U;
332332
uint16_t value = 0U;
333333

334-
coreJSON_ASSERT( ( buf != NULL ) && ( start != NULL ) && ( max > 0U ) );
335-
coreJSON_ASSERT( outValue != NULL );
334+
coreJSON_ASSERT( ( buf != NULL ) && ( start != NULL ) && ( max > 0U ) && ( outValue != NULL ) );
336335

337336
i = *start;
338337
#define HEX_ESCAPE_LENGTH ( 6U ) /* e.g., \u1234 */
339338
/* MISRA Ref 14.3.1 [Configuration dependent invariant] */
340339
/* More details at: https://github.com/FreeRTOS/coreJSON/blob/main/MISRA.md#rule-143 */
341340
/* coverity[misra_c_2012_rule_14_3_violation] */
342-
end = ( i <= ( SIZE_MAX - HEX_ESCAPE_LENGTH ) ) ? ( i + HEX_ESCAPE_LENGTH ) : SIZE_MAX;
341+
end = i + HEX_ESCAPE_LENGTH;
343342

344-
if( ( end < max ) && ( buf[ i ] == '\\' ) && ( buf[ i + 1U ] == 'u' ) )
343+
if( ( end > i ) && ( end < max ) && ( buf[ i ] == '\\' ) && ( buf[ i + 1U ] == 'u' ) )
345344
{
346345
for( i += 2U; i < end; i++ )
347346
{

test/unit-test/core_json_utest.c

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
"\"foo\":\"abc\",\"" FIRST_QUERY_KEY "\":" FIRST_QUERY_KEY_ANSWER "}"
104104
#define JSON_DOC_VARIED_SCALARS_LENGTH ( sizeof( JSON_DOC_VARIED_SCALARS ) - 1 )
105105

106-
#define MULTIPLE_VALID_ESCAPES "\\\\ \\\" \\/ \\b \\f \\n \\r \\t \\\x12"
106+
#define MULTIPLE_VALID_ESCAPES "\\\\ \\\" \\/ \\b \\f \\n \\r \\t \\u0001"
107107
#define MULTIPLE_VALID_ESCAPES_LENGTH ( sizeof( MULTIPLE_VALID_ESCAPES ) - 1 )
108108

109109
#define JSON_DOC_QUERY_KEY_NOT_FOUND "{\"hello\": \"world\"}"
@@ -354,12 +354,6 @@
354354
"\":{\"" SECOND_QUERY_KEY "\" : \"\\uD83D\\uD83D\"}}"
355355
#define UNICODE_BOTH_SURROGATES_HIGH_LENGTH ( sizeof( UNICODE_BOTH_SURROGATES_HIGH ) - 1 )
356356

357-
/* For security, \u0000 is disallowed. */
358-
#define UNICODE_ESCAPE_SEQUENCE_ZERO_CP \
359-
"{\"foo\":\"abc\",\"" FIRST_QUERY_KEY \
360-
"\":{\"" SECOND_QUERY_KEY "\" : \"\\u0000\"}}"
361-
#define UNICODE_ESCAPE_SEQUENCE_ZERO_CP_LENGTH ( sizeof( UNICODE_ESCAPE_SEQUENCE_ZERO_CP ) - 1 )
362-
363357
/* /NUL escape is disallowed. */
364358
#define NUL_ESCAPE \
365359
"{\"foo\":\"abc\",\"" FIRST_QUERY_KEY \
@@ -580,6 +574,7 @@ void test_JSON_Validate_Legal_Documents( void )
580574

581575
jsonStatus = JSON_Validate( JSON_DOC_MULTIPLE_VALID_ESCAPES,
582576
JSON_DOC_MULTIPLE_VALID_ESCAPES_LENGTH );
577+
583578
TEST_ASSERT_EQUAL( JSONSuccess, jsonStatus );
584579

585580
jsonStatus = JSON_Validate( JSON_DOC_LEGAL_UTF8_BYTE_SEQUENCES,
@@ -802,10 +797,6 @@ void test_JSON_Validate_Illegal_Documents( void )
802797
UNICODE_BOTH_SURROGATES_HIGH_LENGTH );
803798
TEST_ASSERT_EQUAL( JSONIllegalDocument, jsonStatus );
804799

805-
jsonStatus = JSON_Validate( UNICODE_ESCAPE_SEQUENCE_ZERO_CP,
806-
UNICODE_ESCAPE_SEQUENCE_ZERO_CP_LENGTH );
807-
TEST_ASSERT_EQUAL( JSONIllegalDocument, jsonStatus );
808-
809800
jsonStatus = JSON_Validate( UNICODE_VALID_HIGH_INVALID_LOW_SURROGATE,
810801
UNICODE_VALID_HIGH_INVALID_LOW_SURROGATE_LENGTH );
811802
TEST_ASSERT_EQUAL( JSONIllegalDocument, jsonStatus );
@@ -1506,14 +1497,6 @@ void test_JSON_Search_Illegal_Documents( void )
15061497
&outValueLength );
15071498
TEST_ASSERT_EQUAL( JSONNotFound, jsonStatus );
15081499

1509-
jsonStatus = JSON_Search( UNICODE_ESCAPE_SEQUENCE_ZERO_CP,
1510-
UNICODE_ESCAPE_SEQUENCE_ZERO_CP_LENGTH,
1511-
COMPLETE_QUERY_KEY,
1512-
COMPLETE_QUERY_KEY_LENGTH,
1513-
&outValue,
1514-
&outValueLength );
1515-
TEST_ASSERT_EQUAL( JSONNotFound, jsonStatus );
1516-
15171500
jsonStatus = JSON_Search( UNICODE_VALID_HIGH_INVALID_LOW_SURROGATE,
15181501
UNICODE_VALID_HIGH_INVALID_LOW_SURROGATE_LENGTH,
15191502
COMPLETE_QUERY_KEY,

0 commit comments

Comments
 (0)