@@ -39,6 +39,9 @@ static void fuzz_tokens(FuzzedDataProvider& fdp) {
3939 size_t payload_size2 = payload2.size ();
4040 size_t payload_size3 = payload3.size ();
4141
42+ // Fuzz mhd_str_equal_caseless
43+ mhd_str_equal_caseless (payload_str1, payload_str2);
44+
4245 // Fuzz mhd_str_equal_caseless_n
4346 mhd_str_equal_caseless_n (payload_str1, payload_str2, fdp.ConsumeIntegral <size_t >());
4447
@@ -142,20 +145,21 @@ static void fuzz_quoted(FuzzedDataProvider& fdp) {
142145 // Fuzz mhd_str_equal_quoted_bin_n with random string payload as binary
143146 mhd_str_equal_quoted_bin_n (payload_str1, payload_size1, payload_str2, payload_size2);
144147
145- // Fuzz mhd_str_quote with random string payload
148+ // Fuzz mhd_str_quote and mhd_str_unquote with random string payload
146149 size_t max_out = payload_size1 * 2 ;
147150 char *out = (char *) malloc (max_out);
148151 if (out) {
149152 mhd_str_quote (payload_str1, payload_size1, out, max_out);
153+ mhd_str_unquote (payload_str1, payload_size1, out);
150154 }
151155 free (out);
152156
153157 max_out = payload_size2 * 2 ;
154158 out = (char *) malloc (max_out);
155159 if (out) {
156160 mhd_str_quote (payload_str2, payload_size2, out, max_out);
161+ mhd_str_unquote (payload_str2, payload_size2, out);
157162 }
158-
159163 free (out);
160164}
161165
@@ -194,17 +198,49 @@ static void fuzz_transformation(FuzzedDataProvider& fdp) {
194198 }
195199}
196200
201+ static void fuzz_hex_conversion (FuzzedDataProvider& fdp) {
202+ // Prepare random data for hex conversion
203+ std::string payload = fdp.ConsumeRandomLengthString (1024 );
204+ char *payload_str = payload.data ();
205+ size_t payload_size = payload.size ();
206+
207+ // Fuzz mhd_hex_to_bin with random payload
208+ uint8_t *bin_out = (uint8_t *) malloc (payload_size);
209+ if (bin_out) {
210+ mhd_hex_to_bin (payload_str, payload_size, bin_out);
211+ free (bin_out);
212+ }
213+
214+ // Fuzz mhd_bin_to_hex with random payload
215+ char *hex_out = (char *) malloc (payload_size * 2 );
216+ if (hex_out) {
217+ if (!payload.empty ()) {
218+ mhd_bin_to_hex (payload_str, payload_size, hex_out);
219+ }
220+ free (hex_out);
221+ }
222+
223+ char *hexz_out = (char *) malloc (payload_size * 2 + 1 );
224+ if (hexz_out) {
225+ if (!payload.empty ()) {
226+ mhd_bin_to_hex (payload_str, payload_size, hexz_out);
227+ }
228+ free (hexz_out);
229+ }
230+ }
231+
197232extern " C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size) {
198233 FuzzedDataProvider fdp (data, size);
199234
200235 for (int i = 0 ; i < fdp.ConsumeIntegralInRange <unsigned >(1 , 6 ); i++) {
201- switch (fdp.ConsumeIntegralInRange <int >(0 , 6 )) {
236+ switch (fdp.ConsumeIntegralInRange <int >(0 , 7 )) {
202237 case 0 : fuzz_tokens (fdp); break ;
203238 case 1 : fuzz_conversion (fdp); break ;
204239 case 2 : fuzz_decode (fdp); break ;
205240 case 3 : fuzz_quoted (fdp); break ;
206241 case 4 : fuzz_base64 (fdp); break ;
207242 case 5 : fuzz_transformation (fdp); break ;
243+ case 6 : fuzz_hex_conversion (fdp); break ;
208244 }
209245 }
210246 return 0 ;
0 commit comments