summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2009-08-18 14:18:53 +0000
committerjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2009-08-18 14:18:53 +0000
commit6941d29cccfc336b5eac89ec7770515a7922bac5 (patch)
tree1fc4655e41e430a184512e2d468831588a9dfb01 /test
parent9ecf5fc3c83b27eec78e761caaa6658cfb7b2384 (diff)
downloadneon-6941d29cccfc336b5eac89ec7770515a7922bac5.tar.gz
Security fix for CVE-2009-2473: prevent the "billion laughs" attack
against expat: * src/ne_xml.c (ne_xml_create) [HAVE_EXPAT]: Register entity decl handler. [HAVE_LIBXML]: Use xmlCtxtUseOptions interface. (entity_declaration): New function. * test/xml.c (fail_parse): Add billion laughs test case. * test/run.sh: Limit run-time CPU use to 120 seconds. git-svn-id: http://svn.webdav.org/repos/projects/neon/trunk@1687 61a7d7f5-40b7-0310-9c16-bb0ea8cb1845
Diffstat (limited to 'test')
-rw-r--r--test/run.sh1
-rw-r--r--test/xml.c38
2 files changed, 39 insertions, 0 deletions
diff --git a/test/run.sh b/test/run.sh
index dd62bf4..194e0b3 100644
--- a/test/run.sh
+++ b/test/run.sh
@@ -3,6 +3,7 @@
rm -f debug.log child.log
ulimit -c unlimited
+ulimit -t 120
unset LANG
unset LC_MESSAGES
diff --git a/test/xml.c b/test/xml.c
index ac979a2..eafa94d 100644
--- a/test/xml.c
+++ b/test/xml.c
@@ -441,6 +441,44 @@ static int fail_parse(void)
"\xEF\xBB" PFX "<hello/>",
"\xEF" PFX "<hello/>",
+"<?xml version=\"1.0\"?>\
+<!DOCTYPE billion [\
+<!ELEMENT billion (#PCDATA)>\
+<!ENTITY laugh0 \"ha\">\
+<!ENTITY laugh1 \"&laugh0;&laugh0;\">\
+<!ENTITY laugh2 \"&laugh1;&laugh1;\">\
+<!ENTITY laugh3 \"&laugh2;&laugh2;\">\
+<!ENTITY laugh4 \"&laugh3;&laugh3;\">\
+<!ENTITY laugh5 \"&laugh4;&laugh4;\">\
+<!ENTITY laugh6 \"&laugh5;&laugh5;\">\
+<!ENTITY laugh7 \"&laugh6;&laugh6;\">\
+<!ENTITY laugh8 \"&laugh7;&laugh7;\">\
+<!ENTITY laugh9 \"&laugh8;&laugh8;\">\
+<!ENTITY laugh10 \"&laugh9;&laugh9;\">\
+<!ENTITY laugh11 \"&laugh10;&laugh10;\">\
+<!ENTITY laugh12 \"&laugh11;&laugh11;\">\
+<!ENTITY laugh13 \"&laugh12;&laugh12;\">\
+<!ENTITY laugh14 \"&laugh13;&laugh13;\">\
+<!ENTITY laugh15 \"&laugh14;&laugh14;\">\
+<!ENTITY laugh16 \"&laugh15;&laugh15;\">\
+<!ENTITY laugh17 \"&laugh16;&laugh16;\">\
+<!ENTITY laugh18 \"&laugh17;&laugh17;\">\
+<!ENTITY laugh19 \"&laugh18;&laugh18;\">\
+<!ENTITY laugh20 \"&laugh19;&laugh19;\">\
+<!ENTITY laugh21 \"&laugh20;&laugh20;\">\
+<!ENTITY laugh22 \"&laugh21;&laugh21;\">\
+<!ENTITY laugh23 \"&laugh22;&laugh22;\">\
+<!ENTITY laugh24 \"&laugh23;&laugh23;\">\
+<!ENTITY laugh25 \"&laugh24;&laugh24;\">\
+<!ENTITY laugh26 \"&laugh25;&laugh25;\">\
+<!ENTITY laugh27 \"&laugh26;&laugh26;\">\
+<!ENTITY laugh28 \"&laugh27;&laugh27;\">\
+<!ENTITY laugh29 \"&laugh28;&laugh28;\">\
+<!ENTITY laugh30 \"&laugh29;&laugh29;\">\
+]>\
+<billion>&laugh30;</billion>\
+",
+
NULL
};
int n;