aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2017-08-22 21:28:55 (GMT)
committerJouni Malinen <j@w1.fi>2017-08-22 21:28:55 (GMT)
commitd4488b9dad7f186f2750748f993ec444f8e9ac8b (patch)
tree0a3c98f4a5e80641259de76aa8ba2ece25664993
parenta4bf007877576ab91ef1cf9b97aa5df62e233496 (diff)
downloadhostap-d4488b9dad7f186f2750748f993ec444f8e9ac8b.zip
hostap-d4488b9dad7f186f2750748f993ec444f8e9ac8b.tar.gz
hostap-d4488b9dad7f186f2750748f993ec444f8e9ac8b.tar.bz2
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 <jouni@qca.qualcomm.com>
-rw-r--r--src/utils/json.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/utils/json.c b/src/utils/json.c
index c544b99..eae627d 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");