From: Jouni Malinen Date: Tue, 22 Aug 2017 21:28:55 +0000 (+0300) Subject: JSON: Fix parsing of arrays of numbers, strings, literals X-Git-Tag: hostap_2_7~1163 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4488b9dad7f186f2750748f993ec444f8e9ac8b;p=thirdparty%2Fhostap.git JSON: Fix parsing of arrays of numbers, strings, literals The previous implementation was able to parse arrays of objects, but not arrays of other types of items. Signed-off-by: Jouni Malinen --- diff --git a/src/utils/json.c b/src/utils/json.c index c544b9918..eae627d87 100644 --- a/src/utils/json.c +++ b/src/utils/json.c @@ -296,6 +296,16 @@ struct json_token * json_parse(const char *data, size_t data_len) token->type = JSON_STRING; token->string = str; token->state = JSON_COMPLETED; + } else if (curr_token->parent && + curr_token->parent->type == JSON_ARRAY && + curr_token->parent->state == JSON_STARTED && + curr_token->state == JSON_EMPTY) { + curr_token->string = str; + curr_token->state = JSON_COMPLETED; + curr_token->type = JSON_STRING; + wpa_printf(MSG_MSGDUMP, + "JSON: String value: '%s'", + curr_token->string); } else if (curr_token->state == JSON_EMPTY) { curr_token->type = JSON_VALUE; curr_token->name = str; @@ -358,6 +368,12 @@ struct json_token * json_parse(const char *data, size_t data_len) wpa_printf(MSG_MSGDUMP, "JSON: Literal name: '%s' = %c", curr_token->name, *pos); + } else if (curr_token->parent && + curr_token->parent->type == JSON_ARRAY && + curr_token->parent->state == JSON_STARTED && + curr_token->state == JSON_EMPTY) { + wpa_printf(MSG_MSGDUMP, + "JSON: Literal name: %c", *pos); } else { wpa_printf(MSG_DEBUG, "JSON: Invalid state for a literal name"); @@ -410,6 +426,16 @@ struct json_token * json_parse(const char *data, size_t data_len) "JSON: Number value: '%s' = '%d'", curr_token->name, curr_token->number); + } else if (curr_token->parent && + curr_token->parent->type == JSON_ARRAY && + curr_token->parent->state == JSON_STARTED && + curr_token->state == JSON_EMPTY) { + curr_token->number = num; + curr_token->state = JSON_COMPLETED; + curr_token->type = JSON_NUMBER; + wpa_printf(MSG_MSGDUMP, + "JSON: Number value: %d", + curr_token->number); } else { wpa_printf(MSG_DEBUG, "JSON: Invalid state for a number");