Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions include/fluent-bit/flb_pack.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@ flb_sds_t flb_msgpack_raw_to_json_sds(const void *in_buf, size_t in_size, int es

int flb_pack_time_now(msgpack_packer *pck);
int flb_msgpack_expand_map(char *map_data, size_t map_size,
msgpack_object_kv **obj_arr, int obj_arr_len,
char** out_buf, int* out_size);
msgpack_object_kv **obj_arr, size_t obj_arr_len,
char** out_buf, size_t *out_size);

struct flb_gelf_fields {
flb_sds_t timestamp_key;
Expand Down
2 changes: 1 addition & 1 deletion plugins/filter_parser/filter_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ static int cb_parser_filter(const void *data, size_t bytes,
if (out_buf != NULL && parse_ret >= 0) {
if (append_arr != NULL && append_arr_len > 0) {
char *new_buf = NULL;
int new_size;
size_t new_size;
size_t valid_kv_count = 0;
msgpack_object_kv **valid_kv = NULL;

Expand Down
2 changes: 1 addition & 1 deletion plugins/in_syslog/syslog_prot.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ static int append_message_to_record_data(char **result_buffer,
{
int result = FLB_MAP_NOT_MODIFIED;
char *modified_data_buffer;
int modified_data_size;
size_t modified_data_size;
msgpack_object_kv *new_map_entries[1];
msgpack_object_kv message_entry;
*result_buffer = NULL;
Expand Down
2 changes: 1 addition & 1 deletion plugins/in_udp/udp_conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ static int append_message_to_record_data(char **result_buffer,
{
int result = FLB_MAP_NOT_MODIFIED;
char *modified_data_buffer;
int modified_data_size;
size_t modified_data_size;
msgpack_object_kv *new_map_entries[1];
msgpack_object_kv message_entry;
*result_buffer = NULL;
Expand Down
2 changes: 1 addition & 1 deletion src/flb_msgpack_append_message.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ int flb_msgpack_append_message_to_record(char **result_buffer,
{
int result = FLB_MAP_NOT_MODIFIED;
char *modified_data_buffer;
int modified_data_size;
size_t modified_data_size;
msgpack_object_kv *new_map_entries[1];
msgpack_object_kv message_entry;
*result_buffer = NULL;
Expand Down
31 changes: 25 additions & 6 deletions src/flb_pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <limits.h>

#include <fluent-bit/flb_info.h>
#include <fluent-bit/flb_mem.h>
Expand Down Expand Up @@ -1628,17 +1630,17 @@ int flb_pack_time_now(msgpack_packer *pck)
}

int flb_msgpack_expand_map(char *map_data, size_t map_size,
msgpack_object_kv **kv_arr, int kv_arr_len,
char** out_buf, int* out_size)
msgpack_object_kv **kv_arr, size_t kv_arr_len,
char** out_buf, size_t *out_size)
{
msgpack_sbuffer sbuf;
msgpack_packer pck;
msgpack_unpacked result;
size_t off = 0;
char *ret_buf;
int map_num;
int i;
int len;
size_t map_num;
size_t i;
size_t len;

if (map_data == NULL){
return -1;
Expand All @@ -1656,11 +1658,28 @@ int flb_msgpack_expand_map(char *map_data, size_t map_size,
}

len = result.data.via.map.size;

/*
* Guard len + kv_arr_len from overflowing size_t.
*
* Using `kv_arr_len > SIZE_MAX - len` makes the boundary explicit:
* equality is allowed (sum == SIZE_MAX), only strictly larger values fail.
*/
if (kv_arr_len > SIZE_MAX - len) {
msgpack_unpacked_destroy(&result);
return -1;
}

map_num = kv_arr_len + len;

if (map_num > UINT32_MAX) {
msgpack_unpacked_destroy(&result);
return -1;
}

msgpack_sbuffer_init(&sbuf);
msgpack_packer_init(&pck, &sbuf, msgpack_sbuffer_write);
msgpack_pack_map(&pck, map_num);
msgpack_pack_map(&pck, (uint32_t) map_num);

for (i=0; i<len; i++) {
msgpack_pack_object(&pck, result.data.via.map.ptr[i].key);
Expand Down
Loading