@@ -117,5 +117,168 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
117
117
array_to_hexstr_uppercase (buffer, sizeof (buffer), data, (size > 64 ) ? 64 : size);
118
118
}
119
119
120
+ // Test bip32_to_str
121
+ if (size >= 20 ) {
122
+ char bip32Buffer[256 ];
123
+ uint32_t path[5 ];
124
+ const uint8_t pathLen = (data[0 ] % 5 ) + 1 ;
125
+
126
+ for (uint8_t i = 0 ; i < pathLen && static_cast <size_t >(i) * 4 + 4 <= size - 1 ; i++) {
127
+ memcpy (&path[i], data + 1 + static_cast <size_t >(i) * 4 , sizeof (uint32_t ));
128
+ }
129
+
130
+ bip32_to_str (bip32Buffer, sizeof (bip32Buffer), path, pathLen);
131
+ bip32_to_str (bip32Buffer, 10 , path, pathLen);
132
+ bip32_to_str (bip32Buffer, 5 , path, pathLen);
133
+ bip32_to_str (bip32Buffer, sizeof (bip32Buffer), path, 0 );
134
+ bip32_to_str (bip32Buffer, sizeof (bip32Buffer), path, 6 );
135
+ }
136
+
137
+ // Test str_to_int8
138
+ if (size > 2 ) {
139
+ char str[16 ];
140
+ const size_t str_len = (size > 15 ) ? 15 : size;
141
+ memcpy (str, data, str_len);
142
+ str[str_len] = ' \0 ' ;
143
+
144
+ const char *end = str + str_len;
145
+ char error = 0 ;
146
+ str_to_int8 (str, end, &error);
147
+ str_to_int8 (str, end, NULL );
148
+ }
149
+
150
+ // Test number_inplace_trimming
151
+ if (size > 8 ) {
152
+ char numberStr[128 ];
153
+ const size_t copy_len = (size > 127 ) ? 127 : size;
154
+ memcpy (numberStr, data, copy_len);
155
+ numberStr[copy_len] = ' \0 ' ;
156
+
157
+ const uint8_t non_trimmed = data[0 ] % 10 ;
158
+ number_inplace_trimming (numberStr, non_trimmed);
159
+
160
+ // Test with decimal point
161
+ strcpy (numberStr, " 123.456000" );
162
+ number_inplace_trimming (numberStr, 2 );
163
+
164
+ strcpy (numberStr, " 0.000000" );
165
+ number_inplace_trimming (numberStr, 0 );
166
+ }
167
+
168
+ // Test hexstr_to_array
169
+ if (size >= 4 ) {
170
+ uint8_t outputArray[128 ];
171
+ char hexStr[256 ];
172
+
173
+ // Create a valid hex string from data
174
+ const size_t hexLen = (size > 127 ) ? 127 : size;
175
+ array_to_hexstr (hexStr, sizeof (hexStr), data, hexLen);
176
+
177
+ hexstr_to_array (outputArray, sizeof (outputArray), hexStr, strlen (hexStr));
178
+ hexstr_to_array (outputArray, 10 , hexStr, strlen (hexStr));
179
+ hexstr_to_array (outputArray, sizeof (outputArray), hexStr, 3 );
180
+ }
181
+
182
+ // Test to_uppercase and to_lowercase
183
+ if (size >= 1 ) {
184
+ uint8_t letter = data[0 ];
185
+ to_uppercase (&letter);
186
+
187
+ letter = data[0 ];
188
+ to_lowercase (&letter);
189
+
190
+ to_uppercase (NULL );
191
+ to_lowercase (NULL );
192
+ }
193
+
194
+ // Test array_to_uppercase and array_to_lowercase
195
+ if (size >= 4 ) {
196
+ uint8_t upperArray[64 ];
197
+ uint8_t lowerArray[64 ];
198
+ const size_t array_len = (size > 64 ) ? 64 : size;
199
+
200
+ memcpy (upperArray, data, array_len);
201
+ memcpy (lowerArray, data, array_len);
202
+
203
+ array_to_uppercase (upperArray, array_len);
204
+ array_to_lowercase (lowerArray, array_len);
205
+
206
+ array_to_uppercase (NULL , array_len);
207
+ array_to_lowercase (NULL , array_len);
208
+ }
209
+
210
+ // Test pageStringHex
211
+ if (size >= 16 ) {
212
+ char hexOutput[128 ];
213
+ const uint16_t hexOutputLen = sizeof (hexOutput);
214
+
215
+ const uint16_t inValueLen = (size > 256 ) ? 256 : size;
216
+ const uint8_t pageIdx = data[0 ] % 10 ;
217
+ uint8_t pageCount = 0 ;
218
+
219
+ pageStringHex (hexOutput, hexOutputLen, (const char *)data, inValueLen, pageIdx, &pageCount);
220
+ pageStringHex (hexOutput, 10 , (const char *)data, inValueLen, pageIdx, &pageCount);
221
+ pageStringHex (hexOutput, 1 , (const char *)data, inValueLen, pageIdx, &pageCount);
222
+ pageStringHex (hexOutput, hexOutputLen, (const char *)data, 0 , pageIdx, &pageCount);
223
+ }
224
+
225
+ // Test formatBufferData
226
+ if (size >= 8 ) {
227
+ char formattedOutput[256 ];
228
+ const uint16_t outputLen = sizeof (formattedOutput);
229
+
230
+ const uint64_t dataLen = (size > 500 ) ? 500 : size;
231
+ const uint8_t pageIdx = data[0 ] % 10 ;
232
+ uint8_t pageCount = 0 ;
233
+
234
+ formatBufferData (data, dataLen, formattedOutput, outputLen, pageIdx, &pageCount);
235
+ formatBufferData (data, dataLen, formattedOutput, 10 , pageIdx, &pageCount);
236
+ formatBufferData (data, 501 , formattedOutput, outputLen, pageIdx, &pageCount);
237
+
238
+ // Test with non-ASCII data
239
+ uint8_t nonAsciiData[64 ];
240
+ for (size_t i = 0 ; i < 64 && i < size; i++) {
241
+ nonAsciiData[i] = data[i] | 0x80 ;
242
+ }
243
+ formatBufferData (nonAsciiData, 64 , formattedOutput, outputLen, pageIdx, &pageCount);
244
+ }
245
+
246
+ // Test uint64_from_BEarray
247
+ if (size >= 8 ) {
248
+ uint8_t beArray[8 ];
249
+ memcpy (beArray, data, 8 );
250
+
251
+ uint64_t result = uint64_from_BEarray (beArray);
252
+
253
+ // Test with different patterns
254
+ if (size >= 16 ) {
255
+ memcpy (beArray, data + 8 , 8 );
256
+ const uint64_t result2 = uint64_from_BEarray (beArray);
257
+ // Use results to avoid dead store warning
258
+ if (result > result2) {
259
+ result = result2;
260
+ }
261
+ }
262
+
263
+ // Test with all zeros
264
+ memset (beArray, 0 , 8 );
265
+ const uint64_t zeroResult = uint64_from_BEarray (beArray);
266
+ if (zeroResult != 0 ) {
267
+ result = zeroResult;
268
+ }
269
+
270
+ // Test with all ones
271
+ memset (beArray, 0xFF , 8 );
272
+ const uint64_t onesResult = uint64_from_BEarray (beArray);
273
+ if (onesResult != 0xFFFFFFFFFFFFFFFF ) {
274
+ result = onesResult;
275
+ }
276
+
277
+ // Force use of result
278
+ if (result == 0 ) {
279
+ beArray[0 ] = 0 ;
280
+ }
281
+ }
282
+
120
283
return 0 ;
121
284
}
0 commit comments