diff --git a/mongoose.c b/mongoose.c index 61c6aed2..b4e2a432 100644 --- a/mongoose.c +++ b/mongoose.c @@ -3969,9 +3969,9 @@ size_t mg_json_unescape(struct mg_str json, const char *path, char *to, char *mg_json_get_str(struct mg_str json, const char *path) { char *result = NULL; int len = 0, off = mg_json_get(json, path, &len); - if (off >= 0 && len > 2 && json.buf[off] == '"') { + if (off >= 0 && len >= 2 && json.buf[off] == '"') { if ((result = (char *) mg_calloc(1, (size_t) len)) != NULL && - mg_json_unescape(json, path, result, (size_t) len) == 0) { + len > 2 && mg_json_unescape(json, path, result, (size_t) len) == 0) { mg_free(result); result = NULL; } diff --git a/src/json.c b/src/json.c index 017ee127..d014eb83 100644 --- a/src/json.c +++ b/src/json.c @@ -338,9 +338,9 @@ size_t mg_json_unescape(struct mg_str json, const char *path, char *to, char *mg_json_get_str(struct mg_str json, const char *path) { char *result = NULL; int len = 0, off = mg_json_get(json, path, &len); - if (off >= 0 && len > 2 && json.buf[off] == '"') { + if (off >= 0 && len >= 2 && json.buf[off] == '"') { if ((result = (char *) mg_calloc(1, (size_t) len)) != NULL && - mg_json_unescape(json, path, result, (size_t) len) == 0) { + len > 2 && mg_json_unescape(json, path, result, (size_t) len) == 0) { mg_free(result); result = NULL; } diff --git a/test/unit_test.c b/test/unit_test.c index 7a28b763..644e7771 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -3565,13 +3565,23 @@ static void test_json(void) { int len; char *str = NULL; - json = mg_str("{\"a\":\"b\"}"); + json = mg_str("{\"a\":\"b\", \"c\":\"\"}"); str = mg_json_get_str(json, "$.a"); ASSERT(str != NULL); // printf("---> [%s]\n", str); ASSERT(strcmp(str, "b") == 0); mg_free(str); + // Non existent string + str = mg_json_get_str(json, "$.d"); + ASSERT(str == NULL); + + // Empty string + str = mg_json_get_str(json, "$.c"); + ASSERT(str != NULL); + ASSERT(strcmp(str, "") == 0); + mg_free(str); + json = mg_str("{\"a\": \"hi\\nthere\",\"b\": [12345, true]}"); str = mg_json_get_str(json, "$.a");