Skip to content

Commit 9dbbd45

Browse files
committed
lws_get_urlarg_by_name: drop candidates that wont fit in buf rather than bail
#3227
1 parent c60bff0 commit 9dbbd45

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

include/libwebsockets/lws-http.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ lws_hdr_copy(struct lws *wsi, char *dest, int len, enum lws_token_indexes h);
436436
/**
437437
* lws_hdr_copy_fragment() - copy a single fragment of the given header to a buffer
438438
* The buffer length len must include space for an additional
439-
* terminating '\0', or it will fail returning -1.
439+
* terminating '\0', or it will fail returning -2.
440440
* If the requested fragment index is not present, it fails
441441
* returning -1.
442442
*

lib/core-net/wsi.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -746,10 +746,11 @@ lws_get_urlarg_by_name_safe(struct lws *wsi, const char *name, char *buf, int le
746746
fraglen = lws_hdr_copy_fragment(wsi, buf, len,
747747
WSI_TOKEN_HTTP_URI_ARGS, n);
748748

749-
if (fraglen < 0)
749+
if (fraglen == -1) /* no fragment or basic problem */
750750
break;
751751

752-
if (fraglen + 1 < len &&
752+
if (fraglen > 0 && /* fragment could fit */
753+
fraglen + 1 < len &&
753754
fraglen >= sl &&
754755
!strncmp(buf, name, (size_t)sl)) {
755756
/*

lib/roles/http/parsers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ int lws_hdr_copy_fragment(struct lws *wsi, char *dst, int len,
520520
}
521521

522522
if (wsi->http.ah->frags[f].len >= len)
523-
return -1;
523+
return -2;
524524

525525
memcpy(dst, wsi->http.ah->data + wsi->http.ah->frags[f].offset,
526526
wsi->http.ah->frags[f].len);

0 commit comments

Comments
 (0)