@@ -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+
7778int 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