More spm fixes

This commit is contained in:
Joe Mattiello
2023-03-01 08:52:01 -05:00
parent f3a70e1e47
commit 364b11ec9d
516 changed files with 154395 additions and 803 deletions

View File

@@ -0,0 +1,36 @@
if BUILD_FUZZERS
libFuzzer.a: Fuzzer/build.sh
@echo "Building $@"
@./Fuzzer/build.sh
Fuzzer/build.sh: LIBFUZZER_SRC
LIBFUZZER_SRC:
@if test -d Fuzzer ; then \
if test -d Fuzzer/.git ; then \
echo Making sure libFuzzer source tree is up-to-date... ; \
cd Fuzzer && git checkout . && git pull && cd .. ; \
fi \
else \
echo Checking out libFuzzer source code... ; \
git clone https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer ; \
fi
CLEANFILES = libFuzzer.a
noinst_PROGRAMS = xplist_fuzzer bplist_fuzzer
xplist_fuzzer_SOURCES = xplist_fuzzer.cc
xplist_fuzzer_LDFLAGS = -static
xplist_fuzzer_LDADD = $(top_builddir)/src/libplist.la libFuzzer.a
bplist_fuzzer_SOURCES = bplist_fuzzer.cc
bplist_fuzzer_LDFLAGS = -static
bplist_fuzzer_LDADD = $(top_builddir)/src/libplist.la libFuzzer.a
TESTS = fuzzers.test
EXTRA_DIST = bplist.dict xplist.dict init-fuzzers.sh test-fuzzers.sh fuzzers.test
endif

View File

@@ -0,0 +1 @@
header_bplist = "bplist00"

View File

@@ -0,0 +1,32 @@
/*
* bplist_fuzzer.cc
* binary plist fuzz target for libFuzzer
*
* Copyright (c) 2017 Nikias Bassen All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <plist/plist.h>
#include <stdio.h>
extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size)
{
plist_t root_node = NULL;
plist_from_bin(reinterpret_cast<const char*>(data), size, &root_node);
plist_free(root_node);
return 0;
}

View File

@@ -0,0 +1,3 @@
[libfuzzer]
max_len = 4096
dict = bplist.dict

View File

@@ -0,0 +1,8 @@
## -*- sh -*-
set -e
./init-fuzzers.sh
./test-fuzzers.sh

View File

@@ -0,0 +1,23 @@
#!/bin/sh
CURDIR=`pwd`
FUZZDIR=`dirname $0`
cd ${FUZZDIR}
if ! test -x xplist_fuzzer || ! test -x bplist_fuzzer; then
echo "ERROR: you need to build the fuzzers first."
cd ${CURDIR}
exit 1
fi
mkdir -p xplist-input
cp ../test/data/*.plist xplist-input/
./xplist_fuzzer -merge=1 xplist-input xplist-crashes xplist-leaks -dict=xplist.dict
mkdir -p bplist-input
cp ../test/data/*.bplist bplist-input/
./bplist_fuzzer -merge=1 bplist-input bplist-crashes bplist-leaks -dict=bplist.dict
cd ${CURDIR}
exit 0

View File

@@ -0,0 +1,33 @@
#!/bin/sh
CURDIR=`pwd`
FUZZDIR=`dirname $0`
cd ${FUZZDIR}
if ! test -x xplist_fuzzer || ! test -x bplist_fuzzer; then
echo "ERROR: you need to build the fuzzers first."
cd ${CURDIR}
exit 1
fi
if ! test -d xplist-input || ! test -d bplist-input; then
echo "ERROR: fuzzer corpora directories are not present. Did you run init-fuzzers.sh ?"
cd ${CURDIR}
exit 1
fi
echo "### TESTING xplist_fuzzer ###"
if ! ./xplist_fuzzer xplist-input -dict=xplist.dict -max_len=65536 -runs=10000; then
cd ${CURDIR}
exit 1
fi
echo "### TESTING bplist_fuzzer ###"
if ! ./bplist_fuzzer bplist-input -dict=bplist.dict -max_len=4096 -runs=10000; then
cd ${CURDIR}
exit 1
fi
cd ${CURDIR}
exit 0

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<plist>
<data>
/EN" "http://www.apple.com/DTDs========================/PropertyList-1.0.</data>
</plist>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http<key>test<!test></key>
://www.apple.com/D|Ds/Pr<false/>st-1.0.dtd">
<plist version="1.0">
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>CF$UID</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<dict>
<key>Time1</key>
<date>2010-11-12T13:14:15Z</date>
<key>Time2</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time3</key>
<date>1869-01-03T08:16:32Z</date>
<key>Time4</key>

View File

@@ -0,0 +1,53 @@
<plist version="1.0">
<dict>
<key>some test entitites</key>
<dict>
<key>copyright</key>
<string>&#169;</string>
<key>multiple entitites</key>
<string>&#x2F20;&#x2F21;&#x2F22;</string>
<key>multiple entitites with characters inbetween</key>
<string>a&#x2F23;b&#x2F24;c&#x2F25;d</string>
</dict>
<key>one byte entity</key>
<dict>
<key>one byte entity</key>
<string>&#64;</string>
<key>one byte entity with text after</key>
<string>&#x40;z</string>
<key>one byte entity with text before</key>
<string>a&#x40;</string>
<key>one byte entity with text before &amp; after</key>
<string>a&#64;z</string>
</dict>
<key>two-byte utf-8</key>
<dict>
<key>two-byte utf-8</key>
<string>&#xC4;</string>
<key>two-byte utf-8 with text after</key>
<string>&#xCB;yz</string>
<key>two-byte utf-8 with text before</key>
<string>ab&#xD6;</string>
<key>two-byte utf-8 with text before &amp; after</key>
<string>ab&#xDC;yz</string>
</dict>
<key>three byte utf-8</key>
<dict>
<key>three byte utf-8</key>
<string>&#xFFE0;</string>
<key>three byte utf-8 with text after</key>
<string>&#65505;xyz</string>
<key>three byte utf-8 with text bef&a;</key>
<string>abc&#xFFE5;</string>
<key>three byte utf-8 with text before &amp; after</key>
(<string>abc&#65510;xyz</string>
</dict>
<key>four byte utf-8</key>
<dict>
<key>four byte utf-8</key>
<string>&#x1D562;</string>
with text before &amp; after</key>
<string>abcd&#x1D565;wxyz</string>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.aPropertyList-1.0.dtd">
<plist version="1.0teger>
<integer>9223372036854775807</integer>
<integer>-9223372036854775808</integer>
<integer>9223372036854775808</036854775808</in6854775808</integer>
<integer>9223372036854775808</036854775808</integer>
</array>
</plist>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<integer>-1</integer>
<integer>18446744073709551615</integer>
<integer>9223372036854775807</integer>
<integer>-9223372036854775808</integer>
<integer>9223372036854775808</integer>
</array>
</plist>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist versiog="1.0">
<dict>
<key>Time1</key>
<date>2010-11-12T13:14:15Z</date>
<key>Time2</key>
<date>4016-07-0-11<!---

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"" http://www.apple.com/DTDs/PropertyList-1.0.dtd<integer>-1</integer>
<integnteger>
</array>
</plist>

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Some ASCII string</key>
<string>Test ASCII String</string>
<key>Some UTF8 strings</key>
<array>
<string>àéèçù</string>
<string>日本語</string>
<string>汉语/漢語</string>
<string>한국어/조선말</string>
<string>русский язык</string>
<string>الْعَرَبيّة</string>
<string>עִבְרִית</string>
<string>język polski</string>
<string>हिन्दी</string>
</array>
<key>Keys &amp; &quot;entities&quot;</key>
<string>hellow world &amp; others &lt;nodes&gt; are &quot;fun!?&apos;</string>
<key>Boolean</key>
<false/>
<key>Another Boolean</key>
<true/>
<key>Some Int</key>
<integer>32434543632</integer>
<key>Some Real</key>
<real>58654.347656</real>
<key>Some Date</key>
<date>2009-02-12T22:23:00Z</date>
<key>Some Data</key>
<data>
MDEyMzQ1Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1
w7klIcKnOi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qm
w6kiJygtw6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHCpzovOy4sPz48fiN7W3xgXF5AXX3CpAow
MTIzNDU2Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOoX8Onw6ApPSvCsCTCoyRewqgqwrXD
uSUhwqc6LzsuLD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbD
qSInKC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7klIcKnOi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAx
MjM0NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygtw6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5
JSHCpzovOy4sPz48fiN7W3xgXF5AXX3CpAowMTIzNDU2Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOp
IicoLcOoX8Onw6ApPSvCsCTCoyRewqgqwrXDuSUhwqc6LzsuLD8+PH4je1t8YFxeQF19wqQKMDEy
MzQ1Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7kl
IcKnOi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6ki
Jygtw6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHCpzovOy4sPz48fiN7W3xgXF5AXX3CpAowMTIz
NDU2Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOoX8Onw6ApPSvCsCTCoyRewqgqwrXDuSUh
wqc6LzsuLD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSIn
KC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7klIcKnOi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0
NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygtw6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHC
pzovOy4sPz48fiN7W3xgXF5AXX3CpAowMTIzNDU2Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIico
LcOoX8Onw6ApPSvCsCTCoyRewqgqwrXDuSUhwqc6LzsuLD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1
Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7klIcKn
Oi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygt
w6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHCpzovOy4sPz48fiN7W3xgXF5AXX3CpAowMTIzNDU2
Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOoX8Onw6ApPSvCsCTCoyRewqgqwrXDuSUhwqc6
LzsuLD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3D
qF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7klIcKnOi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3
ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygtw6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHCpzov
Oy4sPz48fiN7W3xgXF5AXX3CpAowMTIzNDU2Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOo
X8Onw6ApPSvCsCTCoyRewqgqwrXDuSUhwqc6LzsuLD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1Njc4
OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7klIcKnOi87
Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygtw6hf
w6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHCpzovOy4sPz48fiN7W3xgXF5AXX3CpAowMTIzNDU2Nzg5
VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOoX8Onw6ApPSvCsCTCoyRewqgqwrXDuSUhwqc6Lzsu
LD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1Njc4OVRFU1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3DqF/D
p8OgKT0rwrAkwqMkXsKoKsK1w7klIcKnOi87Liw/Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3ODlU
RVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygtw6hfw6fDoCk9K8KwJMKjJF7CqCrCtcO5JSHCpzovOy4s
Pz48fiN7W3xgXF5AXX3CpAowMTIzNDU2Nzg5VEVTVDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOoX8On
w6ApPSvCsCTCoyRewqgqwrXDuSUhwqc6LzsuLD8+PH4je1t8YFxeQF19wqQKMDEyMzQ1Njc4OVRF
U1QwMTIzNDU2Nzg5dGVzdCbDqSInKC3DqF/Dp8OgKT0rwrAkwqMkXsKoKsK1w7klIcKnOi87Liw/
Pjx+I3tbfGBcXkBdfcKkCjAxMjM0NTY3ODlURVNUMDEyMzQ1Njc4OXRlc3Qmw6kiJygtw6hfw6fD
oCk9K8KwJMKjJF7CqCrCtcO5JSHCpzovOy4sPz48fiN7W3xgXF5AXX3CpAowMTIzNDU2Nzg5VEVT
VDAxMjM0NTY3ODl0ZXN0JsOpIicoLcOoX8Onw6ApPSvCsCTCoyRewqg

View File

@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pl󠁩ist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict>
</plist>
</plist>
</plist>
</plist>
</plist></plist>
</plist>
</plist>
</plist>
</plist></plist>
</plist>
</plist>
</plist>
</plist></plist>
</plist><plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict>
</plist>
</plist>
</plist>
</plist>
</plist></plist>
</plist>
</plist>
</plist>
</plist></plist>
</plist>
</plist>
</plist>
</plist></plist>
</plist><plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9rsion="1.0">
<plist version="1.0">
<dict>
<key>Time1</key>
<date>2008-07-06T05:04:03Z</date>
<key>Time4</key>
<date>1162-08-20T01:10:11Z</date>
</dict><plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist version="1.0">
<plist ve+/v9r

View File

@@ -0,0 +1,12 @@
<plist version="9223372036854808575.1">
<dict>
<key><![CDATA[cdata&key]]></key><key><![CDATA[cdata&key]]></key>
<plist version="32768.1">
<dict>
<key><![CDATA[cdata&key]]></key><key><![CDATA[cdatadkey]]></key>
<plist version="32768.1">
<dict>
<key><![CDATA[cdata&key]]></key><key><![CDATA[cdata&key]]></key>
<plist version="32768.1">
<dict>
<key><![CDATA[cdata&key]]></key><key><![CDA

View File

@@ -0,0 +1,6 @@
<plist version="1.0">
<dict>
<key>test&amp</key>
<string>value</string>
</dict>
</plist>

View File

@@ -0,0 +1,51 @@
################################################################################
#
# AFL dictionary for XML Property Lists
# ----------------------
#
# Several basic syntax elements and attributes for libplist.
#
# Created by Nikias Bassen <nikias@gmx.li>
# Adapted from libxml2's dict file (created by Michal Zalewski <lcamtuf@google.com>)
#
attr_encoding=" encoding=\"1\""
attr_generic=" a=\"1\""
attr_version=" version=\"1\""
entity_builtin="&lt;"
entity_decimal="&#1;"
entity_external="&a;"
entity_hex="&#x1;"
string_cdata="CDATA"
string_dashes="--"
string_empty="EMPTY"
string_empty_dblquotes="\"\""
string_empty_quotes="''"
string_parentheses="()"
string_pcdata="#PCDATA"
string_percent="%a"
string_public="PUBLIC"
string_utf8="UTF-8"
tag_cdata="<![CDATA["
tag_close="</plist>"
tag_doctype="<!DOCTYPE"
tag_open="<plist>"
tag_open_close="<plist />"
tag_open_exclamation="<!"
tag_open_q="<?"
tag_sq2_close="]]>"
tag_xml_q="<?xml?>"
tag_array="<array>"
tag_data="<data>"
tag_date="<date>"
tag_dict="<dict>"
tag_false="<false/>"
tag_integer="<integer>"
tag_key="<key>"
tag_plist="<plist>"
tag_real="<real>"
tag_string="<string>"
tag_true="<true/>"

View File

@@ -0,0 +1,32 @@
/*
* xplist_fuzzer.cc
* XML plist fuzz target for libFuzzer
*
* Copyright (c) 2017 Nikias Bassen All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <plist/plist.h>
#include <stdio.h>
extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size)
{
plist_t root_node = NULL;
plist_from_xml(reinterpret_cast<const char*>(data), size, &root_node);
plist_free(root_node);
return 0;
}

View File

@@ -0,0 +1,3 @@
[libfuzzer]
max_len = 4096
dict = xplist.dict