diff --git a/lib/core/libwebsockets.c b/lib/core/libwebsockets.c index d034fe79d..aae71555c 100644 --- a/lib/core/libwebsockets.c +++ b/lib/core/libwebsockets.c @@ -405,7 +405,7 @@ lws_json_simple_find(const char *buf, size_t len, const char *name, size_t *alen while (np < end && (*np == ' ' || *np == '\t')) np++; - if (np >= end - 1) + if (np >= end) return NULL; /* @@ -432,9 +432,6 @@ lws_json_simple_find(const char *buf, size_t len, const char *name, size_t *alen np++; } - if (np == end) - return NULL; - *alen = lws_ptr_diff(np, as); return as; diff --git a/minimal-examples/api-tests/api-test-lejp/main.c b/minimal-examples/api-tests/api-test-lejp/main.c index 91cd630fb..352181bbd 100644 --- a/minimal-examples/api-tests/api-test-lejp/main.c +++ b/minimal-examples/api-tests/api-test-lejp/main.c @@ -184,6 +184,27 @@ int main(int argc, const char **argv) } } + { + const char *cs; + size_t cslen; + cs = lws_json_simple_find("{\"blah\":123,\"ext\":{\"authorized\":1}}", 35, + "\"ext\":", &cslen); + if (!cs) { + lwsl_err("%s: simple_find failed\n", __func__); + e++; + } else { + if (lws_json_simple_strcmp(cs, cslen, + "\"authorized\":", "1")) + e++; + } + cs = lws_json_simple_find("{\"blah\":123,\"auth_user\":\"andy@warmcat.com\",\"thing\":\"yeah\"}", 57, + "\"auth_user\":", &cslen); + if (cslen != 16) { + lwsl_err("%s: wrong string len %d isolated\n", __func__, (int)cslen); + e++; + } + } + if (e) goto bail;