File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1- all : fuzzer-html fuzzer-email fuzzer-httpclient fuzzer-json fuzzer-difflib fuzzer-csv fuzzer-decode fuzzer-ast fuzzer-tarfile fuzzer-tarfile-hypothesis fuzzer-zipfile fuzzer-zipfile-hypothesis fuzzer-re fuzzer-configparser fuzzer-tomllib fuzzer-plistlib fuzzer-xml fuzzer-zoneinfo
1+ all : fuzzer-html fuzzer-email fuzzer-httpclient fuzzer-json fuzzer-difflib fuzzer-csv fuzzer-decode fuzzer-ast fuzzer-tarfile fuzzer-tarfile-hypothesis fuzzer-zipfile fuzzer-zipfile-hypothesis fuzzer-re fuzzer-configparser fuzzer-tomllib fuzzer-plistlib fuzzer-xml fuzzer-zoneinfo fuzzer-locale
22
33PYTHON_CONFIG_PATH =$(CPYTHON_INSTALL_PATH ) /bin/python3-config
44CXXFLAGS += $(shell $(PYTHON_CONFIG_PATH ) --cflags)
5- LDFLAGS += -rdynamic $(shell $(PYTHON_CONFIG_PATH ) --ldflags --embed)
5+ LDFLAGS += -rdynamic $(shell $(PYTHON_CONFIG_PATH ) --ldflags --embed) $( CPYTHON_MODLIBS ) -Wl,--allow-multiple-definition
66
77fuzzer-html :
88 clang++ $(CXXFLAGS ) $(LIB_FUZZING_ENGINE ) -std=c++17 fuzzer.cpp -DPYTHON_HARNESS_PATH=" \" html.py\" " -ldl $(LDFLAGS ) -o fuzzer-html
@@ -40,3 +40,6 @@ fuzzer-xml:
4040 clang++ $(CXXFLAGS ) $(LIB_FUZZING_ENGINE ) -std=c++17 fuzzer.cpp -DPYTHON_HARNESS_PATH=" \" xml.py\" " -ldl $(LDFLAGS ) -o fuzzer-xml
4141fuzzer-zoneinfo :
4242 clang++ $(CXXFLAGS ) $(LIB_FUZZING_ENGINE ) -std=c++17 fuzzer.cpp -DPYTHON_HARNESS_PATH=" \" zoneinfo.py\" " -ldl $(LDFLAGS ) -o fuzzer-zoneinfo
43+
44+ fuzzer-locale :
45+ clang++ $(CXXFLAGS ) $(LIB_FUZZING_ENGINE ) -std=c++17 fuzzer.cpp -DPYTHON_HARNESS_PATH=" \" locale.py\" " -ldl $(LDFLAGS ) -o fuzzer-locale
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ email email.py
77html html.py
88httpclient httpclient.py
99json json.py
10+ locale locale.py
1011plistlib plist.py
1112re re.py
1213tarfile tarfile.py
Original file line number Diff line number Diff line change 1+ from fuzzeddataprovider import FuzzedDataProvider
2+ import locale
3+
4+ OP_STRXFRM = 0
5+ OP_STRCOLL = 1
6+
7+
8+ # Fuzzes the _locale C module (Modules/_localemodule.c).
9+ # Exercises locale.strxfrm() for locale-aware string transformation
10+ # and locale.strcoll() for locale-aware string comparison, both with
11+ # fuzz-generated Unicode input.
12+ def FuzzerRunOne (FuzzerInput ):
13+ if len (FuzzerInput ) < 1 or len (FuzzerInput ) > 0x10000 :
14+ return
15+ fdp = FuzzedDataProvider (FuzzerInput )
16+ target = fdp .ConsumeIntInRange (OP_STRXFRM , OP_STRCOLL )
17+ n = (
18+ fdp .ConsumeIntInRange (1 , min (fdp .remaining_bytes (), 10000 ))
19+ if fdp .remaining_bytes () > 0
20+ else 0
21+ )
22+ if n == 0 :
23+ return
24+ s = fdp .ConsumeUnicode (n )
25+ try :
26+ if target == OP_STRXFRM :
27+ locale .strxfrm (s )
28+ elif target == OP_STRCOLL :
29+ n2 = (
30+ fdp .ConsumeIntInRange (1 , min (fdp .remaining_bytes (), 10000 ))
31+ if fdp .remaining_bytes () > 0
32+ else 0
33+ )
34+ s2 = fdp .ConsumeUnicode (n2 ) if n2 > 0 else ""
35+ locale .strcoll (s , s2 )
36+ except Exception :
37+ pass
You can’t perform that action at this time.
0 commit comments