Skip to content

Commit adba93d

Browse files
Advenam Tacetelopez
authored andcommitted
fuzz_escape: fuzzing (un)escape functions
It does check if orginal string and unescaped data are same. Functions fuzzed: - curl_easy_escape - curl_easy_unescape
1 parent 634664d commit adba93d

File tree

4 files changed

+42
-1
lines changed

4 files changed

+42
-1
lines changed

Makefile.am

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ FUZZPROGS = curl_fuzzer \
4040
curl_fuzzer_base64 \
4141
curl_fuzzer_dict \
4242
curl_fuzzer_doh \
43+
curl_fuzzer_escape \
4344
curl_fuzzer_file \
4445
curl_fuzzer_ftp \
4546
curl_fuzzer_gopher \
@@ -151,6 +152,10 @@ curl_fuzzer_doh_SOURCES = fuzz_doh.cc
151152
curl_fuzzer_doh_CXXFLAGS = $(COMMON_FLAGS) -I$(CURLDIR)
152153
curl_fuzzer_doh_LDADD = $(COMMON_LDADD)
153154

155+
curl_fuzzer_escape_SOURCES = fuzz_escape.cc
156+
curl_fuzzer_escape_CXXFLAGS = $(COMMON_FLAGS) -I$(CURLDIR)
157+
curl_fuzzer_escape_LDADD = $(COMMON_LDADD)
158+
154159
curl_fuzzer_parsedate_SOURCES = fuzz_parsedate.cc
155160
curl_fuzzer_parsedate_CXXFLAGS = $(COMMON_FLAGS) -I$(CURLDIR)
156161
curl_fuzzer_parsedate_LDADD = $(COMMON_LDADD)

corpora/curl_fuzzer_escape/simple

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!@#$%^&*()_+[]\{}|;':",./<>?

fuzz_escape.cc

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
extern "C"
2+
{
3+
#include <stdlib.h>
4+
#include <signal.h>
5+
#include <string.h>
6+
#include <unistd.h>
7+
#include <curl/curl.h>
8+
#include <cassert>
9+
10+
char *curl_escape(const char *string, int inlength);
11+
}
12+
13+
// fuzz_target.cc
14+
15+
extern "C" int LLVMFuzzerTestOneInput(char *data, size_t size) {
16+
if(size == 0) return 0;
17+
char* terminated_data = (char *)malloc(size+1);
18+
memcpy(terminated_data, data, size);
19+
terminated_data[size] = '\0';
20+
21+
int output_len;
22+
char *input = (char *)malloc(size);
23+
memcpy(input, terminated_data, size);
24+
25+
char *escaped = curl_easy_escape(NULL, input, size);
26+
char *unescaped = curl_easy_unescape(NULL, escaped, 0, &output_len);
27+
assert(size == output_len);
28+
assert(memcmp(unescaped, terminated_data, size) == 0);
29+
30+
free(terminated_data);
31+
free(input);
32+
curl_free(escaped);
33+
curl_free(unescaped);
34+
return 0; // Values other than 0 and -1 are reserved for future use.
35+
}

scripts/fuzz_targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#!/bin/bash
22

3-
export FUZZ_TARGETS="curl_fuzzer_dict curl_fuzzer_file curl_fuzzer_ftp curl_fuzzer_gopher curl_fuzzer_http curl_fuzzer_https curl_fuzzer_imap curl_fuzzer_ldap curl_fuzzer_mqtt curl_fuzzer_pop3 curl_fuzzer_rtmp curl_fuzzer_rtsp curl_fuzzer_scp curl_fuzzer_sftp curl_fuzzer_smb curl_fuzzer_smtp curl_fuzzer_tftp curl_fuzzer_ws curl_fuzzer fuzz_url curl_fuzzer_altsvc curl_fuzzer_base64 curl_fuzzer_doh curl_fuzzer_parsedate"
3+
export FUZZ_TARGETS="curl_fuzzer_dict curl_fuzzer_file curl_fuzzer_ftp curl_fuzzer_gopher curl_fuzzer_http curl_fuzzer_https curl_fuzzer_imap curl_fuzzer_ldap curl_fuzzer_mqtt curl_fuzzer_pop3 curl_fuzzer_rtmp curl_fuzzer_rtsp curl_fuzzer_scp curl_fuzzer_sftp curl_fuzzer_smb curl_fuzzer_smtp curl_fuzzer_tftp curl_fuzzer_ws curl_fuzzer fuzz_url curl_fuzzer_altsvc curl_fuzzer_base64 curl_fuzzer_doh curl_fuzzer_escape curl_fuzzer_parsedate"

0 commit comments

Comments
 (0)