diff options
author | Jose Bollo <jose.bollo@iot.bzh> | 2018-08-01 13:44:23 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2018-08-02 15:49:43 +0200 |
commit | e39610f8c9b2e6bbb8a460f7d7ccccbc5161b4ed (patch) | |
tree | 9f11498d5ba8793c925a4b1a36591dfdc736adbb /src/afb-hsrv.c | |
parent | 10aa15afc5bc7321d0049823dd173dda11ff3724 (diff) |
Improve parsing of json string
Change-Id: I7100961ef8f8a75d623a0667178f191dd4cfb9d3
Signed-off-by: Jose Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-hsrv.c')
-rw-r--r-- | src/afb-hsrv.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/afb-hsrv.c b/src/afb-hsrv.c index efa74f4b..7e680cc4 100644 --- a/src/afb-hsrv.c +++ b/src/afb-hsrv.c @@ -109,6 +109,7 @@ static int access_handler( struct afb_hsrv *hsrv; struct hsrv_handler *iter; const char *type; + enum json_tokener_error jerr; hsrv = cls; hreq = *recordreq; @@ -179,12 +180,13 @@ static int access_handler( } } else if (hreq->tokener) { hreq->json = json_tokener_parse_ex(hreq->tokener, upload_data, (int)*upload_data_size); - switch (json_tokener_get_error(hreq->tokener)) { - case json_tokener_success: - case json_tokener_continue: - break; - default: - ERROR("error in POST json: %s", json_tokener_error_desc(json_tokener_get_error(hreq->tokener))); + jerr = json_tokener_get_error(hreq->tokener); + if (jerr == json_tokener_continue) { + hreq->json = json_tokener_parse_ex(hreq->tokener, "", 1); + jerr = json_tokener_get_error(hreq->tokener); + } + if (jerr != json_tokener_success) { + ERROR("error in POST json: %s", json_tokener_error_desc(jerr)); afb_hreq_reply_error(hreq, MHD_HTTP_BAD_REQUEST); return MHD_YES; } |