summaryrefslogtreecommitdiffstats
path: root/src/afb-hsrv.c
diff options
context:
space:
mode:
authorJose Bollo <jose.bollo@iot.bzh>2018-08-01 13:44:23 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2018-08-02 15:49:43 +0200
commite39610f8c9b2e6bbb8a460f7d7ccccbc5161b4ed (patch)
tree9f11498d5ba8793c925a4b1a36591dfdc736adbb /src/afb-hsrv.c
parent10aa15afc5bc7321d0049823dd173dda11ff3724 (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.c14
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;
}