Skip to content

Commit

Permalink
Add a fuzzer for the url parser
Browse files Browse the repository at this point in the history
  • Loading branch information
deweerdt committed Feb 8, 2017
1 parent 36d75bf commit eadee12
Show file tree
Hide file tree
Showing 72 changed files with 108 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -531,6 +531,7 @@ IF (BUILD_FUZZER)
ENDIF()
ADD_EXECUTABLE(h2o-fuzzer-http1 fuzz/driver.cc)
ADD_EXECUTABLE(h2o-fuzzer-http2 fuzz/driver.cc)
ADD_EXECUTABLE(h2o-fuzzer-url fuzz/driver_url.cc)
SET_TARGET_PROPERTIES(h2o-fuzzer-http1 PROPERTIES COMPILE_FLAGS "-DHTTP1")
SET_TARGET_PROPERTIES(h2o-fuzzer-http2 PROPERTIES COMPILE_FLAGS "-DHTTP2")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
Expand All @@ -548,10 +549,12 @@ IF (BUILD_FUZZER)
ADD_CUSTOM_TARGET(libFuzzer ${CMAKE_CURRENT_SOURCE_DIR}/misc/build_libFuzzer.sh WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
ADD_DEPENDENCIES(h2o-fuzzer-http1 libFuzzer)
ADD_DEPENDENCIES(h2o-fuzzer-http2 libFuzzer)
ADD_DEPENDENCIES(h2o-fuzzer-url libFuzzer)
ENDIF (OSS_FUZZ)

TARGET_LINK_LIBRARIES(h2o-fuzzer-http1 libh2o-evloop ${EXTRA_LIBS} ${LIB_FUZZER})
TARGET_LINK_LIBRARIES(h2o-fuzzer-http2 libh2o-evloop ${EXTRA_LIBS} ${LIB_FUZZER})
TARGET_LINK_LIBRARIES(h2o-fuzzer-url libh2o-evloop ${EXTRA_LIBS} ${LIB_FUZZER})

ENDIF (BUILD_FUZZER)

Expand Down
35 changes: 35 additions & 0 deletions fuzz/driver_url.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Copyright (c) 2016 Fastly, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/

/*
* This file implements a test harness for using h2o with LibFuzzer.
* See http://llvm.org/docs/LibFuzzer.html for more info.
*/

#include "h2o.h"
#include "h2o/url.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
h2o_url_t url;
h2o_url_parse((const char *)Data, Size, &url);
return 0;
}
1 change: 1 addition & 0 deletions fuzz/url-corpus/1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com
1 change: 1 addition & 0 deletions fuzz/url-corpus/10
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/a%20b?q=c+d
1 change: 1 addition & 0 deletions fuzz/url-corpus/11
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http:www.google.com/?q=go+language
1 change: 1 addition & 0 deletions fuzz/url-corpus/12
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http:%2f%2fwww.google.com/?q=go+language
1 change: 1 addition & 0 deletions fuzz/url-corpus/13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mailto:/webmaster@golang.org
1 change: 1 addition & 0 deletions fuzz/url-corpus/14
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mailto:webmaster@golang.org
1 change: 1 addition & 0 deletions fuzz/url-corpus/15
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/foo?query=http://bad
1 change: 1 addition & 0 deletions fuzz/url-corpus/16
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/17
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//user@foo/path?a=b
1 change: 1 addition & 0 deletions fuzz/url-corpus/18
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
///threeslashes
1 change: 1 addition & 0 deletions fuzz/url-corpus/19
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://user:password@google.com
1 change: 1 addition & 0 deletions fuzz/url-corpus/2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/
1 change: 1 addition & 0 deletions fuzz/url-corpus/20
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://j@ne:password@google.com
1 change: 1 addition & 0 deletions fuzz/url-corpus/21
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://jane:p@ssword@google.com
1 change: 1 addition & 0 deletions fuzz/url-corpus/22
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://j@ne:password@google.com/p@th?q=@go
1 change: 1 addition & 0 deletions fuzz/url-corpus/23
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/?q=go+language#foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/24
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/?q=go+language#foo%26bar
1 change: 1 addition & 0 deletions fuzz/url-corpus/25
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
file:///home/adg/rabbits
1 change: 1 addition & 0 deletions fuzz/url-corpus/26
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
file:///C:/FooBar/Baz.txt
1 change: 1 addition & 0 deletions fuzz/url-corpus/27
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MaIlTo:webmaster@golang.org
1 change: 1 addition & 0 deletions fuzz/url-corpus/28
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a/b/c
1 change: 1 addition & 0 deletions fuzz/url-corpus/29
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://%3Fam:pa%3Fsword@google.com
1 change: 1 addition & 0 deletions fuzz/url-corpus/3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/file%20one%26two
1 change: 1 addition & 0 deletions fuzz/url-corpus/30
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://192.168.0.1/
1 change: 1 addition & 0 deletions fuzz/url-corpus/31
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://192.168.0.1:8080/
1 change: 1 addition & 0 deletions fuzz/url-corpus/32
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[fe80::1]/
1 change: 1 addition & 0 deletions fuzz/url-corpus/33
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[fe80::1]:8080/
1 change: 1 addition & 0 deletions fuzz/url-corpus/34
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[fe80::1%25en0]/",
1 change: 1 addition & 0 deletions fuzz/url-corpus/35
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//
1 change: 1 addition & 0 deletions fuzz/url-corpus/36
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alphanum
1 change: 1 addition & 0 deletions fuzz/url-corpus/37
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
zone
1 change: 1 addition & 0 deletions fuzz/url-corpus/38
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
identifier
1 change: 1 addition & 0 deletions fuzz/url-corpus/39
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[fe80::1%25en0]:8080/",
1 change: 1 addition & 0 deletions fuzz/url-corpus/4
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ftp://webmaster@www.google.com/
1 change: 1 addition & 0 deletions fuzz/url-corpus/40
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//
1 change: 1 addition & 0 deletions fuzz/url-corpus/41
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alphanum
1 change: 1 addition & 0 deletions fuzz/url-corpus/42
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
zone
1 change: 1 addition & 0 deletions fuzz/url-corpus/43
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
identifier
1 change: 1 addition & 0 deletions fuzz/url-corpus/44
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[fe80::1%25%65%6e%301-._~]/",
1 change: 1 addition & 0 deletions fuzz/url-corpus/45
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//
1 change: 1 addition & 0 deletions fuzz/url-corpus/46
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
percent-encoded+unreserved
1 change: 1 addition & 0 deletions fuzz/url-corpus/47
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
zone
1 change: 1 addition & 0 deletions fuzz/url-corpus/48
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
identifier
1 change: 1 addition & 0 deletions fuzz/url-corpus/49
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[fe80::1%25%65%6e%301-._~]:8080/",
1 change: 1 addition & 0 deletions fuzz/url-corpus/5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ftp://john%20doe@www.google.com/
1 change: 1 addition & 0 deletions fuzz/url-corpus/50
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//
1 change: 1 addition & 0 deletions fuzz/url-corpus/51
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
percent-encoded+unreserved
1 change: 1 addition & 0 deletions fuzz/url-corpus/52
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
zone
1 change: 1 addition & 0 deletions fuzz/url-corpus/53
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
identifier
1 change: 1 addition & 0 deletions fuzz/url-corpus/54
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://rest.rsc.io/foo%2fbar/baz%2Fquux?alt=media
1 change: 1 addition & 0 deletions fuzz/url-corpus/55
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mysql://a,b,c/bar
1 change: 1 addition & 0 deletions fuzz/url-corpus/56
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
scheme://!$&'()*+,;=hello!:port/path
1 change: 1 addition & 0 deletions fuzz/url-corpus/57
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://host/!$&'()*+,;=:@[hello]
1 change: 1 addition & 0 deletions fuzz/url-corpus/58
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://example.com/oid/[order_id]
1 change: 1 addition & 0 deletions fuzz/url-corpus/59
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://192.168.0.2:8080/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/6
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/?
1 change: 1 addition & 0 deletions fuzz/url-corpus/60
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://192.168.0.2:/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/61
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://2b01:e34:ef40:7730:8e70:5aff:fefe:edac:8080/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/62
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://2b01:e34:ef40:7730:8e70:5aff:fefe:edac:/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/63
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[2b01:e34:ef40:7730:8e70:5aff:fefe:edac]:8080/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/64
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://[2b01:e34:ef40:7730:8e70:5aff:fefe:edac]:/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/65
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://hello.世界.com/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/66
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://hello.%e4%b8%96%e7%95%8c.com/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/67
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://hello.%E4%B8%96%E7%95%8C.com/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/68
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://example.com//foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/69
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
myscheme://authority<\"hi\">/foo
1 change: 1 addition & 0 deletions fuzz/url-corpus/7
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/?foo=bar?
1 change: 1 addition & 0 deletions fuzz/url-corpus/70
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020
1 change: 1 addition & 0 deletions fuzz/url-corpus/8
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/?q=go+language
1 change: 1 addition & 0 deletions fuzz/url-corpus/9
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
http://www.google.com/?q=go%20language

0 comments on commit eadee12

Please sign in to comment.