Skip to content

Commit 711dea9

Browse files
committed
fuzz_url.cc: fuzz the URL parser
Closes #59
1 parent 32fc19a commit 711dea9

File tree

4 files changed

+82
-19
lines changed

4 files changed

+82
-19
lines changed

Makefile.am

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,26 @@ LIBS = -lpthread -lm
3636
LIB_FUZZING_ENGINE ?= libstandaloneengine.a
3737

3838
FUZZPROGS = curl_fuzzer \
39-
curl_fuzzer_dict \
40-
curl_fuzzer_file \
41-
curl_fuzzer_ftp \
42-
curl_fuzzer_gopher \
43-
curl_fuzzer_http \
44-
curl_fuzzer_https \
45-
curl_fuzzer_imap \
46-
curl_fuzzer_ldap \
47-
curl_fuzzer_mqtt \
48-
curl_fuzzer_pop3 \
49-
curl_fuzzer_rtmp \
50-
curl_fuzzer_rtsp \
51-
curl_fuzzer_scp \
52-
curl_fuzzer_sftp \
53-
curl_fuzzer_smb \
54-
curl_fuzzer_smtp \
55-
curl_fuzzer_ws \
56-
curl_fuzzer_tftp
39+
curl_fuzzer_dict \
40+
curl_fuzzer_file \
41+
curl_fuzzer_ftp \
42+
curl_fuzzer_gopher \
43+
curl_fuzzer_http \
44+
curl_fuzzer_https \
45+
curl_fuzzer_imap \
46+
curl_fuzzer_ldap \
47+
curl_fuzzer_mqtt \
48+
curl_fuzzer_pop3 \
49+
curl_fuzzer_rtmp \
50+
curl_fuzzer_rtsp \
51+
curl_fuzzer_scp \
52+
curl_fuzzer_sftp \
53+
curl_fuzzer_smb \
54+
curl_fuzzer_smtp \
55+
curl_fuzzer_ws \
56+
curl_fuzzer_tftp \
57+
fuzz_url
58+
5759
FUZZLIBS = libstandaloneengine.a
5860

5961
COMMON_SOURCES = curl_fuzzer.cc curl_fuzzer_tlv.cc curl_fuzzer_callback.cc
@@ -124,6 +126,10 @@ curl_fuzzer_ws_SOURCES = $(COMMON_SOURCES)
124126
curl_fuzzer_ws_CXXFLAGS = $(COMMON_FLAGS) -DFUZZ_PROTOCOLS_WS
125127
curl_fuzzer_ws_LDADD = $(COMMON_LDADD)
126128

129+
fuzz_url_SOURCES = fuzz_url.cc
130+
fuzz_url_CXXFLAGS = $(COMMON_FLAGS)
131+
fuzz_url_LDADD = $(COMMON_LDADD)
132+
127133
# Unit test fuzzers
128134
curl_fuzzer_fnmatch_SOURCES = fuzz_fnmatch.cc
129135
curl_fuzzer_fnmatch_CXXFLAGS = $(COMMON_FLAGS)

corpora/fuzz_url/basictest

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
http://localhost

fuzz_url.cc

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/***************************************************************************
2+
* _ _ ____ _
3+
* Project ___| | | | _ \| |
4+
* / __| | | | |_) | |
5+
* | (__| |_| | _ <| |___
6+
* \___|\___/|_| \_\_____|
7+
*
8+
* Copyright (C) 2017 - 2022, Max Dymond, <[email protected]>, et al.
9+
*
10+
* This software is licensed as described in the file COPYING, which
11+
* you should have received as part of this distribution. The terms
12+
* are also available at https://curl.se/docs/copyright.html.
13+
*
14+
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
15+
* copies of the Software, and permit persons to whom the Software is
16+
* furnished to do so, under the terms of the COPYING file.
17+
*
18+
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19+
* KIND, either express or implied.
20+
*
21+
***************************************************************************/
22+
23+
#include <stdlib.h>
24+
#include <stdlib.h>
25+
#include <string.h>
26+
#include <curl/curl.h>
27+
#include "curl_fuzzer.h"
28+
29+
/**
30+
* Fuzzing entry point. This function is passed a buffer containing a test
31+
* case. This test case should drive the CURL URL API.
32+
*/
33+
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
34+
{
35+
CURLU *uh;
36+
char *newp;
37+
38+
uh = curl_url();
39+
40+
/* it works on a null-terminated string */
41+
if(size) {
42+
newp = (char *)malloc(size + 1);
43+
if(newp) {
44+
memcpy(newp, data, size);
45+
/* make sure it is zero terminated */
46+
newp[size] = 0;
47+
curl_url_set(uh, CURLUPART_URL, newp, CURLU_GUESS_SCHEME);
48+
free(newp);
49+
}
50+
}
51+
curl_url_cleanup(uh);
52+
53+
/* This function must always return 0. Non-zero codes are reserved. */
54+
return 0;
55+
}
56+

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"
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"

0 commit comments

Comments
 (0)