|
22 | 22 | #include <fluent-bit/flb_error.h> |
23 | 23 | #include <fluent-bit/flb_pack.h> |
24 | 24 |
|
| 25 | +#include <ctype.h> |
| 26 | + |
25 | 27 | #include <fluent-bit/flb_gzip.h> |
26 | 28 | #include <fluent-bit/flb_zstd.h> |
27 | 29 | #include <fluent-bit/flb_snappy.h> |
@@ -60,7 +62,11 @@ static int sds_uri_decode(flb_sds_t s) |
60 | 62 |
|
61 | 63 | for (optr = buf, iptr = s; iptr < s + flb_sds_len(s) && optr-buf < sizeof(buf); iptr++) { |
62 | 64 | if (*iptr == '%') { |
63 | | - if (iptr+2 > (s + flb_sds_len(s))) { |
| 65 | + if (iptr + 2 >= (s + flb_sds_len(s))) { |
| 66 | + return -1; |
| 67 | + } |
| 68 | + if (!isxdigit((unsigned char) *(iptr + 1)) || |
| 69 | + !isxdigit((unsigned char) *(iptr + 2))) { |
64 | 70 | return -1; |
65 | 71 | } |
66 | 72 | *optr++ = hex2nibble(*(iptr+1)) << 4 | hex2nibble(*(iptr+2)); |
@@ -219,7 +225,7 @@ static flb_sds_t tag_key(struct flb_http *ctx, msgpack_object *map) |
219 | 225 | } |
220 | 226 |
|
221 | 227 |
|
222 | | - flb_plg_error(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key); |
| 228 | + flb_plg_warn(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key); |
223 | 229 | return NULL; |
224 | 230 | } |
225 | 231 |
|
@@ -423,7 +429,7 @@ static ssize_t parse_payload_urlencoded(struct flb_http *ctx, flb_sds_t tag, |
423 | 429 | char *start; |
424 | 430 | msgpack_packer pck; |
425 | 431 | msgpack_sbuffer sbuf; |
426 | | - |
| 432 | + const char *field_name; |
427 | 433 |
|
428 | 434 | /* initialize buffers */ |
429 | 435 | msgpack_sbuffer_init(&sbuf); |
@@ -493,12 +499,13 @@ static ssize_t parse_payload_urlencoded(struct flb_http *ctx, flb_sds_t tag, |
493 | 499 | msgpack_pack_str_body(&pck, keys[i], flb_sds_len(keys[i])); |
494 | 500 |
|
495 | 501 | if (sds_uri_decode(vals[i]) != 0) { |
496 | | - goto decode_error; |
497 | | - } |
498 | | - else { |
499 | | - msgpack_pack_str(&pck, flb_sds_len(vals[i])); |
500 | | - msgpack_pack_str_body(&pck, vals[i], flb_sds_len(vals[i])); |
| 502 | + field_name = keys[i] ? keys[i] : ""; |
| 503 | + flb_plg_warn(ctx->ins, |
| 504 | + "invalid percent-encoding for field '%s', keeping raw value", |
| 505 | + field_name); |
501 | 506 | } |
| 507 | + msgpack_pack_str(&pck, flb_sds_len(vals[i])); |
| 508 | + msgpack_pack_str_body(&pck, vals[i], flb_sds_len(vals[i])); |
502 | 509 | } |
503 | 510 |
|
504 | 511 | ret = process_pack(ctx, tag, sbuf.data, sbuf.size); |
|
0 commit comments