summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkwaclaw <kwaclaw>2012-03-11 05:13:12 +0000
committerkwaclaw <kwaclaw>2012-03-11 05:13:12 +0000
commit1c26093ba51c1f76d7171228f55187637123cbbd (patch)
treeef58d821602b4a14b81349bdb8011b52839ded94
parentf6fe585e29fe8c9f17934021ee840c9ec0389298 (diff)
downloadlibexpat-1c26093ba51c1f76d7171228f55187637123cbbd.tar.gz
Fix for bug #3500861 did not work properly, fixed the fix by applying
the setContext() call only to the root parser. Also added a make target to run the benchmark - it relies on the testdata module being present at the same location as in the repository.
-rw-r--r--Makefile.in7
-rw-r--r--lib/xmlparse.c12
2 files changed, 13 insertions, 6 deletions
diff --git a/Makefile.in b/Makefile.in
index 02d0bfa..f2ae36d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -169,6 +169,13 @@ tests/runtestspp.@OBJEXT@: tests/runtestspp.cpp tests/runtests.c tests/chardata.
tests/runtestspp: tests/runtestspp.@OBJEXT@ tests/chardata.@OBJEXT@ tests/minicheck.@OBJEXT@ $(LIBRARY)
$(LINK_CXX_EXE) tests/runtestspp.@OBJEXT@ tests/chardata.@OBJEXT@ tests/minicheck.@OBJEXT@ $(LIBRARY)
+tests/benchmark/benchmark.@OBJEXT@: tests/benchmark/benchmark.c
+tests/benchmark/benchmark: tests/benchmark/benchmark.@OBJEXT@ $(LIBRARY)
+ $(LINK_EXE) tests/benchmark/benchmark.@OBJEXT@ $(LIBRARY)
+
+run-benchmark: tests/benchmark/benchmark
+ tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/recset.xml 65535 3
+
tests/xmlts.zip:
wget --output-document=tests/xmlts.zip \
http://www.w3.org/XML/Test/xmlts20020606.zip
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
index b7389eb..f35aa36 100644
--- a/lib/xmlparse.c
+++ b/lib/xmlparse.c
@@ -433,7 +433,7 @@ getElementType(XML_Parser parser, const ENCODING *enc,
const char *ptr, const char *end);
static unsigned long generate_hash_secret_salt(void);
-static XML_Bool parsingSetup(XML_Parser parser);
+static XML_Bool startParsing(XML_Parser parser);
static XML_Parser
parserCreate(const XML_Char *encodingName,
@@ -698,13 +698,13 @@ generate_hash_secret_salt(void)
return rand();
}
-static XML_Bool
-parsingSetup(XML_Parser parser)
+static XML_Bool /* only valid for root parser */
+startParsing(XML_Parser parser)
{
/* hash functions must be initialized before setContext() is called */
if (hash_secret_salt == 0)
hash_secret_salt = generate_hash_secret_salt();
- if (parser != NULL && ns) {
+ if (ns) {
/* implicit context only set for root parser, since child
parsers (i.e. external entity parsers) will inherit it
*/
@@ -1507,7 +1507,7 @@ XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
errorCode = XML_ERROR_FINISHED;
return XML_STATUS_ERROR;
case XML_INITIALIZED:
- if (!parsingSetup(parser)) {
+ if (parentParser == NULL && !startParsing(parser)) {
errorCode = XML_ERROR_NO_MEMORY;
return XML_STATUS_ERROR;
}
@@ -1633,7 +1633,7 @@ XML_ParseBuffer(XML_Parser parser, int len, int isFinal)
errorCode = XML_ERROR_FINISHED;
return XML_STATUS_ERROR;
case XML_INITIALIZED:
- if (!parsingSetup(parser)) {
+ if (parentParser == NULL && !startParsing(parser)) {
errorCode = XML_ERROR_NO_MEMORY;
return XML_STATUS_ERROR;
}