Skip to content

Commit 785d275

Browse files
nokute78edsiper
authored andcommitted
pack: modify to determine how many JSON messages are OK(#5336)
jsmn_parse updates jsmn_parser members. (state->parser) A member 'toknext' points next incomplete object token. We use toknext - 1 as an index of last member of complete JSON. Signed-off-by: Takahiro Yamashita <[email protected]>
1 parent b3d20d2 commit 785d275

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/flb_pack.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -361,24 +361,33 @@ int flb_pack_json_state(const char *js, size_t len,
361361
* are OK in the array of tokens, if any, process them and adjust
362362
* the JSMN context/buffers.
363363
*/
364+
365+
/*
366+
* jsmn_parse updates jsmn_parser members. (state->parser)
367+
* A member 'toknext' points next incomplete object token.
368+
* We use toknext - 1 as an index of last member of complete JSON.
369+
*/
364370
int i;
365371
int found = 0;
366372

367-
for (i = 1; i < state->tokens_count; i++) {
373+
if (state->parser.toknext == 0) {
374+
return ret;
375+
}
376+
377+
for (i = (int)state->parser.toknext - 1; i >= 1; i--) {
368378
t = &state->tokens[i];
369379

370380
if (t->parent == -1 && (t->end != 0)) {
371381
found++;
372382
delim = i;
383+
break;
373384
}
374385
}
375386

376-
if (found > 0) {
377-
state->tokens_count += delim;
378-
}
379-
else {
380-
return ret;
387+
if (found == 0) {
388+
return ret; /* FLB_ERR_JSON_PART */
381389
}
390+
state->tokens_count += delim;
382391
}
383392
else if (ret != 0) {
384393
return ret;

0 commit comments

Comments
 (0)