Skip to content

Commit bdb681f

Browse files
committed
mpack_utils: Handle exdeeded limits of label values and replace with "..." for exceeded characters
Signed-off-by: Hiroshi Hatake <[email protected]>
1 parent a3bc932 commit bdb681f

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

src/cmt_mpack_utils.c

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,13 @@ int cmt_mpack_consume_uint_tag(mpack_reader_t *reader, uint64_t *output_buffer)
7474
return CMT_MPACK_SUCCESS;
7575
}
7676

77+
7778
int cmt_mpack_consume_string_tag(mpack_reader_t *reader, cfl_sds_t *output_buffer)
7879
{
7980
uint32_t string_length;
8081
mpack_tag_t tag;
82+
cfl_sds_t left_buffer;
83+
uint32_t left_length;
8184

8285
if (NULL == output_buffer) {
8386
return CMT_MPACK_INVALID_ARGUMENT_ERROR;
@@ -105,25 +108,35 @@ int cmt_mpack_consume_string_tag(mpack_reader_t *reader, cfl_sds_t *output_buffe
105108
*/
106109

107110
if (CMT_MPACK_MAX_STRING_LENGTH < string_length) {
108-
return CMT_MPACK_CORRUPT_INPUT_DATA_ERROR;
109-
}
111+
*output_buffer = cfl_sds_create_size(CMT_MPACK_MAX_STRING_LENGTH + 4);
110112

111-
*output_buffer = cfl_sds_create_size(string_length + 1);
113+
if (NULL == *output_buffer) {
114+
return CMT_MPACK_ALLOCATION_ERROR;
115+
}
112116

113-
if (NULL == *output_buffer) {
114-
return CMT_MPACK_ALLOCATION_ERROR;
115-
}
117+
left_length = string_length - CMT_MPACK_MAX_STRING_LENGTH;
118+
left_buffer = cfl_sds_create_size(left_length + 1);
119+
if (NULL == left_buffer) {
120+
return CMT_MPACK_ALLOCATION_ERROR;
121+
}
116122

117-
cfl_sds_set_len(*output_buffer, string_length);
123+
cfl_sds_set_len(*output_buffer, CMT_MPACK_MAX_STRING_LENGTH);
124+
mpack_read_cstr(reader, *output_buffer, CMT_MPACK_MAX_STRING_LENGTH + 1, CMT_MPACK_MAX_STRING_LENGTH);
125+
cfl_sds_cat_safe(output_buffer, "...", 3);
118126

119-
mpack_read_cstr(reader, *output_buffer, string_length + 1, string_length);
127+
mpack_read_cstr(reader, left_buffer, left_length + 1, left_length);
128+
cfl_sds_destroy(left_buffer);
129+
}
130+
else {
131+
*output_buffer = cfl_sds_create_size(string_length + 1);
120132

121-
if (mpack_ok != mpack_reader_error(reader)) {
122-
cfl_sds_destroy(*output_buffer);
133+
if (NULL == *output_buffer) {
134+
return CMT_MPACK_ALLOCATION_ERROR;
135+
}
123136

124-
*output_buffer = NULL;
137+
cfl_sds_set_len(*output_buffer, string_length);
125138

126-
return CMT_MPACK_ENGINE_ERROR;
139+
mpack_read_cstr(reader, *output_buffer, string_length + 1, string_length);
127140
}
128141

129142
mpack_done_str(reader);

0 commit comments

Comments
 (0)