Skip to content

Commit 49f4ae0

Browse files
committed
ra: validate parts and fix parser byte range (#3290)
Signed-off-by: Eduardo Silva <[email protected]>
1 parent a9fd4aa commit 49f4ae0

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/flb_record_accessor.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ static int ra_parse_buffer(struct flb_record_accessor *ra, flb_sds_t buf)
190190
++quote_cnt;
191191
}
192192
else if (buf[end] == '.' && (quote_cnt & 0x01)) {
193-
// ignore '.' if it is inside a string/subkey
194-
continue;
193+
/* ignore '.' if it is inside a string/subkey */
194+
continue;
195195
}
196196
else if (buf[end] == '.' || buf[end] == ' ' || buf[end] == ',' || buf[end] == '"') {
197197
break;
@@ -229,7 +229,8 @@ static int ra_parse_buffer(struct flb_record_accessor *ra, flb_sds_t buf)
229229

230230
/* Append remaining string */
231231
if (i - 1 > end && pre < i) {
232-
rp_str = ra_parse_string(ra, buf, pre, i);
232+
end = flb_sds_len(buf);
233+
rp_str = ra_parse_string(ra, buf, pre, end);
233234
if (rp_str) {
234235
mk_list_add(&rp_str->_head, &ra->list);
235236
}
@@ -610,6 +611,10 @@ int flb_ra_get_kv_pair(struct flb_record_accessor *ra, msgpack_object map,
610611
}
611612

612613
rp = mk_list_entry_first(&ra->list, struct flb_ra_parser, _head);
614+
if (!rp->key) {
615+
return FLB_FALSE;
616+
}
617+
613618
return flb_ra_key_value_get(rp->key->name, map, rp->key->subkeys,
614619
start_key, out_key, out_val);
615620
}
@@ -624,5 +629,9 @@ struct flb_ra_value *flb_ra_get_value_object(struct flb_record_accessor *ra,
624629
}
625630

626631
rp = mk_list_entry_first(&ra->list, struct flb_ra_parser, _head);
632+
if (!rp->key) {
633+
return NULL;
634+
}
635+
627636
return flb_ra_key_to_value(rp->key->name, map, rp->key->subkeys);
628637
}

0 commit comments

Comments
 (0)