Vendor import of expat 2.4.3.
This commit is contained in:
parent
987ba809b8
commit
f83ac37f1e
2
COPYING
2
COPYING
@ -1,5 +1,5 @@
|
|||||||
Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
|
Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
|
||||||
Copyright (c) 2001-2017 Expat maintainers
|
Copyright (c) 2001-2019 Expat maintainers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
282
Changes
282
Changes
@ -2,7 +2,283 @@ NOTE: We are looking for help with a few things:
|
|||||||
https://github.com/libexpat/libexpat/labels/help%20wanted
|
https://github.com/libexpat/libexpat/labels/help%20wanted
|
||||||
If you can help, please get in touch. Thanks!
|
If you can help, please get in touch. Thanks!
|
||||||
|
|
||||||
Release 2.2.9 Wed Septemper 25 2019
|
Release 2.4.3 Sun January 16 2022
|
||||||
|
Security fixes:
|
||||||
|
#531 #534 CVE-2021-45960 -- Fix issues with left shifts by >=29 places
|
||||||
|
resulting in
|
||||||
|
a) realloc acting as free
|
||||||
|
b) realloc allocating too few bytes
|
||||||
|
c) undefined behavior
|
||||||
|
depending on architecture and precise value
|
||||||
|
for XML documents with >=2^27+1 prefixed attributes
|
||||||
|
on a single XML tag a la
|
||||||
|
"<r xmlns:a='[..]' a:a123='[..]' [..] />"
|
||||||
|
where XML_ParserCreateNS is used to create the parser
|
||||||
|
(which needs argument "-n" when running xmlwf).
|
||||||
|
Impact is denial of service, or more.
|
||||||
|
#532 #538 CVE-2021-46143 (ZDI-CAN-16157) -- Fix integer overflow
|
||||||
|
on variable m_groupSize in function doProlog leading
|
||||||
|
to realloc acting as free.
|
||||||
|
Impact is denial of service or more.
|
||||||
|
#539 CVE-2022-22822 to CVE-2022-22827 -- Prevent integer overflows
|
||||||
|
near memory allocation at multiple places. Mitre assigned
|
||||||
|
a dedicated CVE for each involved internal C function:
|
||||||
|
- CVE-2022-22822 for function addBinding
|
||||||
|
- CVE-2022-22823 for function build_model
|
||||||
|
- CVE-2022-22824 for function defineAttribute
|
||||||
|
- CVE-2022-22825 for function lookup
|
||||||
|
- CVE-2022-22826 for function nextScaffoldPart
|
||||||
|
- CVE-2022-22827 for function storeAtts
|
||||||
|
Impact is denial of service or more.
|
||||||
|
|
||||||
|
Other changes:
|
||||||
|
#535 CMake: Make call to file(GENERATE [..]) work for CMake <3.19
|
||||||
|
#541 Autotools|CMake: MinGW: Make run.sh(.in) work for Cygwin
|
||||||
|
and MSYS2 by not going through Wine on these platforms
|
||||||
|
#527 #528 Address compiler warnings
|
||||||
|
#533 #543 Version info bumped from 9:2:8 to 9:3:8;
|
||||||
|
see https://verbump.de/ for what these numbers do
|
||||||
|
|
||||||
|
Infrastructure:
|
||||||
|
#536 CI: Check for realistic minimum CMake version
|
||||||
|
#529 #539 CI: Cover compilation with -m32
|
||||||
|
#529 CI: Store coverage reports as artifacts for download
|
||||||
|
#528 CI: Upgrade Clang from 11 to 13
|
||||||
|
|
||||||
|
Special thanks to:
|
||||||
|
An anonymous whitehat
|
||||||
|
Christopher Degawa
|
||||||
|
J. Peter Mugaas
|
||||||
|
Tyson Smith
|
||||||
|
and
|
||||||
|
GCC Farm Project
|
||||||
|
Trend Micro Zero Day Initiative
|
||||||
|
|
||||||
|
Release 2.4.2 Sun December 19 2021
|
||||||
|
Other changes:
|
||||||
|
#509 #510 Link againgst libm for function "isnan"
|
||||||
|
#513 #514 Include expat_config.h as early as possible
|
||||||
|
#498 Autotools: Include files with release archives:
|
||||||
|
- buildconf.sh
|
||||||
|
- fuzz/*.c
|
||||||
|
#507 #519 Autotools: Sync CMake templates
|
||||||
|
#495 #524 CMake: MinGW: Fix pkg-config section "Libs" for
|
||||||
|
- non-release build types (e.g. -DCMAKE_BUILD_TYPE=Debug)
|
||||||
|
- multi-config CMake generators (e.g. Ninja Multi-Config)
|
||||||
|
#502 #503 docs: Document that function XML_GetBuffer may return NULL
|
||||||
|
when asking for a buffer of 0 (zero) bytes size
|
||||||
|
#522 #523 docs: Fix return value docs for both
|
||||||
|
XML_SetBillionLaughsAttackProtection* functions
|
||||||
|
#525 #526 Version info bumped from 9:1:8 to 9:2:8;
|
||||||
|
see https://verbump.de/ for what these numbers do
|
||||||
|
|
||||||
|
Special thanks to:
|
||||||
|
Dong-hee Na
|
||||||
|
Joergen Ibsen
|
||||||
|
Kai Pastor
|
||||||
|
|
||||||
|
Release 2.4.1 Sun May 23 2021
|
||||||
|
Bug fixes:
|
||||||
|
#488 #490 Autotools: Fix installed header expat_config.h for multilib
|
||||||
|
systems; regression introduced in 2.4.0 by pull request #486
|
||||||
|
|
||||||
|
Other changes:
|
||||||
|
#491 #492 Version info bumped from 9:0:8 to 9:1:8;
|
||||||
|
see https://verbump.de/ for what these numbers do
|
||||||
|
|
||||||
|
Special thanks to:
|
||||||
|
Gentoo's QA check "multilib_check_headers"
|
||||||
|
|
||||||
|
Release 2.4.0 Sun May 23 2021
|
||||||
|
Security fixes:
|
||||||
|
#34 #466 #484 CVE-2013-0340/CWE-776 -- Protect against billion laughs attacks
|
||||||
|
(denial-of-service; flavors targeting CPU time or RAM or both,
|
||||||
|
leveraging general entities or parameter entities or both)
|
||||||
|
by tracking and limiting the input amplification factor
|
||||||
|
(<amplification> := (<direct> + <indirect>) / <direct>).
|
||||||
|
By conservative default, amplification up to a factor of 100.0
|
||||||
|
is tolerated and rejection only starts after 8 MiB of output bytes
|
||||||
|
(=<direct> + <indirect>) have been processed.
|
||||||
|
The fix adds the following to the API:
|
||||||
|
- A new error code XML_ERROR_AMPLIFICATION_LIMIT_BREACH to
|
||||||
|
signals this specific condition.
|
||||||
|
- Two new API functions ..
|
||||||
|
- XML_SetBillionLaughsAttackProtectionMaximumAmplification and
|
||||||
|
- XML_SetBillionLaughsAttackProtectionActivationThreshold
|
||||||
|
.. to further tighten billion laughs protection parameters
|
||||||
|
when desired. Please see file "doc/reference.html" for details.
|
||||||
|
If you ever need to increase the defaults for non-attack XML
|
||||||
|
payload, please file a bug report with libexpat.
|
||||||
|
- Two new XML_FEATURE_* constants ..
|
||||||
|
- that can be queried using the XML_GetFeatureList function, and
|
||||||
|
- that are shown in "xmlwf -v" output.
|
||||||
|
- Two new environment variable switches ..
|
||||||
|
- EXPAT_ACCOUNTING_DEBUG=(0|1|2|3) and
|
||||||
|
- EXPAT_ENTITY_DEBUG=(0|1)
|
||||||
|
.. for runtime debugging of accounting and entity processing.
|
||||||
|
Specific behavior of these values may change in the future.
|
||||||
|
- Two new command line arguments "-a FACTOR" and "-b BYTES"
|
||||||
|
for xmlwf to further tighten billion laughs protection
|
||||||
|
parameters when desired.
|
||||||
|
If you ever need to increase the defaults for non-attack XML
|
||||||
|
payload, please file a bug report with libexpat.
|
||||||
|
|
||||||
|
Bug fixes:
|
||||||
|
#332 #470 For (non-default) compilation with -DEXPAT_MIN_SIZE=ON (CMake)
|
||||||
|
or CPPFLAGS=-DXML_MIN_SIZE (GNU Autotools): Fix segfault
|
||||||
|
for UTF-16 payloads containing CDATA sections.
|
||||||
|
#485 #486 Autotools: Fix generated CMake files for non-64bit and
|
||||||
|
non-Linux platforms (e.g. macOS and MinGW in particular)
|
||||||
|
that were introduced with release 2.3.0
|
||||||
|
|
||||||
|
Other changes:
|
||||||
|
#468 #469 xmlwf: Improve help output and the xmlwf man page
|
||||||
|
#463 xmlwf: Improve maintainability through some refactoring
|
||||||
|
#477 xmlwf: Fix man page DocBook validity
|
||||||
|
#458 #459 CMake: Support absolute paths for both CMAKE_INSTALL_LIBDIR
|
||||||
|
and CMAKE_INSTALL_INCLUDEDIR
|
||||||
|
#471 #481 CMake: Add support for standard variable BUILD_SHARED_LIBS
|
||||||
|
#457 Unexpose symbol _INTERNAL_trim_to_complete_utf8_characters
|
||||||
|
#467 Resolve macro HAVE_EXPAT_CONFIG_H
|
||||||
|
#472 Delete unused legacy helper file "conftools/PrintPath"
|
||||||
|
#473 #483 Improve attribution
|
||||||
|
#464 #465 #477 doc/reference.html: Fix XHTML validity
|
||||||
|
#475 #478 doc/reference.html: Replace the 90s look by OK.css
|
||||||
|
#479 Version info bumped from 8:0:7 to 9:0:8
|
||||||
|
due to addition of new symbols and error codes;
|
||||||
|
see https://verbump.de/ for what these numbers do
|
||||||
|
|
||||||
|
Infrastructure:
|
||||||
|
#456 CI: Enable periodic runs
|
||||||
|
#457 CI: Start covering the list of exported symbols
|
||||||
|
#474 CI: Isolate coverage task
|
||||||
|
#476 #482 CI: Adapt to breaking changes in image "ubuntu-18.04"
|
||||||
|
#477 CI: Cover well-formedness and DocBook/XHTML validity
|
||||||
|
of doc/reference.html and doc/xmlwf.xml
|
||||||
|
|
||||||
|
Special thanks to:
|
||||||
|
Dimitry Andric
|
||||||
|
Eero Helenius
|
||||||
|
Nick Wellnhofer
|
||||||
|
Rhodri James
|
||||||
|
Tomas Korbar
|
||||||
|
Yury Gribov
|
||||||
|
and
|
||||||
|
Clang LeakSan
|
||||||
|
JetBrains
|
||||||
|
OSS-Fuzz
|
||||||
|
|
||||||
|
Release 2.3.0 Thu March 25 2021
|
||||||
|
Bug fixes:
|
||||||
|
#438 When calling XML_ParseBuffer without a prior successful call to
|
||||||
|
XML_GetBuffer as a user, no longer trigger undefined behavior
|
||||||
|
(by adding an integer to a NULL pointer) but rather return
|
||||||
|
XML_STATUS_ERROR and set the error code to (new) code
|
||||||
|
XML_ERROR_NO_BUFFER. Found by UBSan (UndefinedBehaviorSanitizer)
|
||||||
|
of Clang 11 (but not Clang 9).
|
||||||
|
#444 xmlwf: Exit status 2 was used for both:
|
||||||
|
- malformed input files (documented) and
|
||||||
|
- invalid command-line arguments (undocumented).
|
||||||
|
The case of invalid command-line arguments now
|
||||||
|
has its own exit status 4, resolving the ambiguity.
|
||||||
|
|
||||||
|
Other changes:
|
||||||
|
#439 xmlwf: Add argument -k to allow continuing after
|
||||||
|
non-fatal errors
|
||||||
|
#439 xmlwf: Add section about exit status to the -h help output
|
||||||
|
#422 #426 #447 Windows: Drop support for Visual Studio <=14.0/2015
|
||||||
|
#434 Windows: CMake: Detect unsupported Visual Studio at
|
||||||
|
configure time (rather than at compile time)
|
||||||
|
#382 #428 testrunner: Make verbose mode (argument "-v") report
|
||||||
|
about passed tests, and make default mode report about
|
||||||
|
failures, as well.
|
||||||
|
#442 CMake: Call "enable_language(CXX)" prior to tinkering
|
||||||
|
with CMAKE_CXX_* variables
|
||||||
|
#448 Document use of libexpat from a CMake-based project
|
||||||
|
#451 Autotools: Install CMake files as generated by CMake 3.19.6
|
||||||
|
so that users with "find_package(expat [..] CONFIG [..])"
|
||||||
|
are served on distributions that are *not* using the CMake
|
||||||
|
build system inside for libexpat packaging
|
||||||
|
#436 #437 Autotools: Drop obsolescent macro AC_HEADER_STDC
|
||||||
|
#450 #452 Autotools: Resolve use of obsolete macro AC_CONFIG_HEADER
|
||||||
|
#441 Address compiler warnings
|
||||||
|
#443 Version info bumped from 7:12:6 to 8:0:7
|
||||||
|
due to addition of error code XML_ERROR_NO_BUFFER
|
||||||
|
(see https://verbump.de/ for what these numbers do)
|
||||||
|
|
||||||
|
Infrastructure:
|
||||||
|
#435 #446 Replace Travis CI by GitHub Actions
|
||||||
|
|
||||||
|
Special thanks to:
|
||||||
|
Alexander Richardson
|
||||||
|
Oleksandr Popovych
|
||||||
|
Thomas Beutlich
|
||||||
|
Tim Bray
|
||||||
|
and
|
||||||
|
Clang LeakSan, Clang 11 UBSan and the Clang team
|
||||||
|
|
||||||
|
Release 2.2.10 Sat October 3 2020
|
||||||
|
Bug fixes:
|
||||||
|
#390 #395 #398 Fix undefined behavior during parsing caused by
|
||||||
|
pointer arithmetic with NULL pointers
|
||||||
|
#404 #405 Fix reading uninitialized variable during parsing
|
||||||
|
#406 xmlwf: Add missing check for malloc NULL return
|
||||||
|
|
||||||
|
Other changes:
|
||||||
|
#396 Windows: Drop support for Visual Studio <=8.0/2005
|
||||||
|
#409 Windows: Add missing file "Changes" to the installer
|
||||||
|
to fix compilation with CMake from installed sources
|
||||||
|
#403 xmlwf: Document exit codes in xmlwf manpage and
|
||||||
|
exit with code 3 (rather than code 1) for output errors
|
||||||
|
when used with "-d DIRECTORY"
|
||||||
|
#356 #359 MinGW: Provide declaration of rand_s for mingwrt <5.3.0
|
||||||
|
#383 #392 Autotools: Use -Werror while configure tests the compiler
|
||||||
|
for supported compile flags to avoid false positives
|
||||||
|
#383 #393 #394 Autotools: Improve handling of user (C|CPP|CXX|LD)FLAGS,
|
||||||
|
e.g. ensure that they have the last word over flags added
|
||||||
|
while running ./configure
|
||||||
|
#360 CMake: Create libexpatw.{dll,so} and expatw.pc (with emphasis
|
||||||
|
on suffix "w") with -DEXPAT_CHAR_TYPE=(ushort|wchar_t)
|
||||||
|
#360 CMake: Detect and deny unsupported build combinations
|
||||||
|
involving -DEXPAT_CHAR_TYPE=(ushort|wchar_t)
|
||||||
|
#360 CMake: Install pre-compiled shipped xmlwf.1 manpage in case
|
||||||
|
of -DEXPAT_BUILD_DOCS=OFF
|
||||||
|
#375 #380 #419 CMake: Fix use of Expat by means of add_subdirectory
|
||||||
|
#407 #408 CMake: Keep expat target name constant at "expat"
|
||||||
|
(i.e. refrain from using the target name to control
|
||||||
|
build artifact filenames)
|
||||||
|
#385 CMake: Fix compilation with -DEXPAT_SHARED_LIBS=OFF for
|
||||||
|
Windows
|
||||||
|
CMake: Expose man page compilation as target "xmlwf-manpage"
|
||||||
|
#413 #414 CMake: Introduce option EXPAT_BUILD_PKGCONFIG
|
||||||
|
to control generation of pkg-config file "expat.pc"
|
||||||
|
#424 CMake: Add minimalistic support for building binary packages
|
||||||
|
with CMake target "package"; based on CPack
|
||||||
|
#366 CMake: Add option -DEXPAT_OSSFUZZ_BUILD=(ON|OFF) with
|
||||||
|
default OFF to build fuzzer code against OSS-Fuzz and
|
||||||
|
related environment variable LIB_FUZZING_ENGINE
|
||||||
|
#354 Fix testsuite for -DEXPAT_DTD=OFF and -DEXPAT_NS=OFF, each
|
||||||
|
#354 #355 ..
|
||||||
|
#356 #412 Address compiler warnings
|
||||||
|
#368 #369 Address pngcheck warnings with doc/*.png images
|
||||||
|
#425 Version info bumped from 7:11:6 to 7:12:6
|
||||||
|
|
||||||
|
Special thanks to:
|
||||||
|
asavah
|
||||||
|
Ben Wagner
|
||||||
|
Bhargava Shastry
|
||||||
|
Frank Landgraf
|
||||||
|
Jeffrey Walton
|
||||||
|
Joe Orton
|
||||||
|
Kleber Tarcísio
|
||||||
|
Ma Lin
|
||||||
|
Maciej Sroczyński
|
||||||
|
Mohammed Khajapasha
|
||||||
|
Vadim Zeitlin
|
||||||
|
and
|
||||||
|
Cppcheck 2.0 and the Cppcheck team
|
||||||
|
|
||||||
|
Release 2.2.9 Wed September 25 2019
|
||||||
Other changes:
|
Other changes:
|
||||||
examples: Drop executable bits from elements.c
|
examples: Drop executable bits from elements.c
|
||||||
#349 Windows: Change the name of the Windows DLLs from expat*.dll
|
#349 Windows: Change the name of the Windows DLLs from expat*.dll
|
||||||
@ -17,7 +293,7 @@ Release 2.2.9 Wed Septemper 25 2019
|
|||||||
Special thanks to:
|
Special thanks to:
|
||||||
Ben Wagner
|
Ben Wagner
|
||||||
|
|
||||||
Release 2.2.8 Fri Septemper 13 2019
|
Release 2.2.8 Fri September 13 2019
|
||||||
Security fixes:
|
Security fixes:
|
||||||
#317 #318 CVE-2019-15903 -- Fix heap overflow triggered by
|
#317 #318 CVE-2019-15903 -- Fix heap overflow triggered by
|
||||||
XML_GetCurrentLineNumber (or XML_GetCurrentColumnNumber),
|
XML_GetCurrentLineNumber (or XML_GetCurrentColumnNumber),
|
||||||
@ -115,10 +391,10 @@ Release 2.2.8 Fri Septemper 13 2019
|
|||||||
Special thanks to:
|
Special thanks to:
|
||||||
David Loffredo
|
David Loffredo
|
||||||
Joonun Jang
|
Joonun Jang
|
||||||
Khajapasha Mohammed
|
|
||||||
Kishore Kunche
|
Kishore Kunche
|
||||||
Marco Maggi
|
Marco Maggi
|
||||||
Mitch Phillips
|
Mitch Phillips
|
||||||
|
Mohammed Khajapasha
|
||||||
Rolf Ade
|
Rolf Ade
|
||||||
xantares
|
xantares
|
||||||
Zhongyuan Zhou
|
Zhongyuan Zhou
|
||||||
|
25
Makefile.am
25
Makefile.am
@ -6,7 +6,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2018 KangLin <kl222@126.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -53,13 +54,28 @@ pkgconfig_DATA = expat.pc
|
|||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
|
||||||
|
|
||||||
|
dist_cmake_DATA = \
|
||||||
|
cmake/autotools/expat.cmake
|
||||||
|
|
||||||
|
nodist_cmake_DATA = \
|
||||||
|
cmake/autotools/expat-config-version.cmake \
|
||||||
|
cmake/autotools/expat-noconfig.cmake \
|
||||||
|
cmake/expat-config.cmake
|
||||||
|
|
||||||
|
cmakedir = $(libdir)/cmake/expat-@PACKAGE_VERSION@
|
||||||
|
|
||||||
|
|
||||||
_EXTRA_DIST_CMAKE = \
|
_EXTRA_DIST_CMAKE = \
|
||||||
cmake/expat-config.cmake.in \
|
cmake/autotools/expat-noconfig__linux.cmake.in \
|
||||||
|
cmake/autotools/expat-noconfig__macos.cmake.in \
|
||||||
|
cmake/autotools/expat-noconfig__windows.cmake.in \
|
||||||
|
cmake/autotools/expat-package-init.cmake \
|
||||||
cmake/mingw-toolchain.cmake \
|
cmake/mingw-toolchain.cmake \
|
||||||
\
|
\
|
||||||
CMakeLists.txt \
|
CMakeLists.txt \
|
||||||
CMake.README \
|
CMake.README \
|
||||||
ConfigureChecks.cmake \
|
ConfigureChecks.cmake \
|
||||||
|
expat.pc.cmake \
|
||||||
expat_config.h.cmake
|
expat_config.h.cmake
|
||||||
|
|
||||||
_EXTRA_DIST_WINDOWS = \
|
_EXTRA_DIST_WINDOWS = \
|
||||||
@ -74,11 +90,14 @@ EXTRA_DIST = \
|
|||||||
\
|
\
|
||||||
conftools/expat.m4 \
|
conftools/expat.m4 \
|
||||||
conftools/get-version.sh \
|
conftools/get-version.sh \
|
||||||
conftools/PrintPath \
|
\
|
||||||
|
fuzz/xml_parsebuffer_fuzzer.c \
|
||||||
|
fuzz/xml_parse_fuzzer.c \
|
||||||
\
|
\
|
||||||
xmlwf/xmlwf_helpgen.py \
|
xmlwf/xmlwf_helpgen.py \
|
||||||
xmlwf/xmlwf_helpgen.sh \
|
xmlwf/xmlwf_helpgen.sh \
|
||||||
\
|
\
|
||||||
|
buildconf.sh \
|
||||||
Changes \
|
Changes \
|
||||||
README.md \
|
README.md \
|
||||||
\
|
\
|
||||||
|
161
Makefile.in
161
Makefile.in
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2018 KangLin <kl222@126.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -138,12 +139,14 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
|||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
||||||
$(am__configure_deps) $(am__DIST_COMMON)
|
$(am__configure_deps) $(dist_cmake_DATA) $(am__DIST_COMMON)
|
||||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
configure.lineno config.status.lineno
|
configure.lineno config.status.lineno
|
||||||
mkinstalldirs = $(install_sh) -d
|
mkinstalldirs = $(install_sh) -d
|
||||||
CONFIG_HEADER = expat_config.h
|
CONFIG_HEADER = expat_config.h
|
||||||
CONFIG_CLEAN_FILES = expat.pc run.sh
|
CONFIG_CLEAN_FILES = expat.pc cmake/expat-config.cmake \
|
||||||
|
cmake/autotools/expat-config-version.cmake \
|
||||||
|
cmake/autotools/expat-noconfig.cmake run.sh
|
||||||
CONFIG_CLEAN_VPATH_FILES =
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
AM_V_P = $(am__v_P_@AM_V@)
|
AM_V_P = $(am__v_P_@AM_V@)
|
||||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||||
@ -199,8 +202,9 @@ am__uninstall_files_from_dir = { \
|
|||||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||||
}
|
}
|
||||||
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
|
am__installdirs = "$(DESTDIR)$(cmakedir)" "$(DESTDIR)$(cmakedir)" \
|
||||||
DATA = $(pkgconfig_DATA)
|
"$(DESTDIR)$(pkgconfigdir)"
|
||||||
|
DATA = $(dist_cmake_DATA) $(nodist_cmake_DATA) $(pkgconfig_DATA)
|
||||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||||
distclean-recursive maintainer-clean-recursive
|
distclean-recursive maintainer-clean-recursive
|
||||||
am__recursive_targets = \
|
am__recursive_targets = \
|
||||||
@ -209,8 +213,8 @@ am__recursive_targets = \
|
|||||||
$(am__extra_recursive_targets)
|
$(am__extra_recursive_targets)
|
||||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
||||||
cscope distdir distdir-am dist dist-all distcheck
|
cscope distdir distdir-am dist dist-all distcheck
|
||||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
|
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
|
||||||
$(LISP)expat_config.h.in
|
expat_config.h.in
|
||||||
# Read a list of newline-separated strings from the standard input,
|
# Read a list of newline-separated strings from the standard input,
|
||||||
# and print each of them once, without duplicates. Input order is
|
# and print each of them once, without duplicates. Input order is
|
||||||
# *not* preserved.
|
# *not* preserved.
|
||||||
@ -227,18 +231,17 @@ am__define_uniq_tagged_files = \
|
|||||||
unique=`for i in $$list; do \
|
unique=`for i in $$list; do \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
done | $(am__uniquify_input)`
|
done | $(am__uniquify_input)`
|
||||||
ETAGS = etags
|
|
||||||
CTAGS = ctags
|
|
||||||
CSCOPE = cscope
|
|
||||||
DIST_SUBDIRS = lib examples tests xmlwf doc
|
DIST_SUBDIRS = lib examples tests xmlwf doc
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/expat.pc.in \
|
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/expat.pc.in \
|
||||||
$(srcdir)/expat_config.h.in $(srcdir)/run.sh.in \
|
$(srcdir)/expat_config.h.in $(srcdir)/run.sh.in \
|
||||||
|
$(top_srcdir)/cmake/autotools/expat-config-version.cmake.in \
|
||||||
|
$(top_srcdir)/cmake/expat-config.cmake.in \
|
||||||
$(top_srcdir)/conftools/ar-lib $(top_srcdir)/conftools/compile \
|
$(top_srcdir)/conftools/ar-lib $(top_srcdir)/conftools/compile \
|
||||||
$(top_srcdir)/conftools/config.guess \
|
$(top_srcdir)/conftools/config.guess \
|
||||||
$(top_srcdir)/conftools/config.sub \
|
$(top_srcdir)/conftools/config.sub \
|
||||||
$(top_srcdir)/conftools/install-sh \
|
$(top_srcdir)/conftools/install-sh \
|
||||||
$(top_srcdir)/conftools/ltmain.sh \
|
$(top_srcdir)/conftools/ltmain.sh \
|
||||||
$(top_srcdir)/conftools/missing AUTHORS COPYING \
|
$(top_srcdir)/conftools/missing AUTHORS COPYING README.md \
|
||||||
conftools/ar-lib conftools/compile conftools/config.guess \
|
conftools/ar-lib conftools/compile conftools/config.guess \
|
||||||
conftools/config.sub conftools/depcomp conftools/install-sh \
|
conftools/config.sub conftools/depcomp conftools/install-sh \
|
||||||
conftools/ltmain.sh conftools/missing
|
conftools/ltmain.sh conftools/missing
|
||||||
@ -281,13 +284,19 @@ DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).tar.lz \
|
|||||||
$(distdir).tar.xz
|
$(distdir).tar.xz
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
DIST_TARGETS = dist-lzip dist-xz dist-bzip2 dist-gzip
|
DIST_TARGETS = dist-lzip dist-xz dist-bzip2 dist-gzip
|
||||||
|
# Exists only to be overridden by the user if desired.
|
||||||
|
AM_DISTCHECK_DVI_TARGET = dvi
|
||||||
distuninstallcheck_listfiles = find . -type f -print
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||||
distcleancheck_listfiles = find . -type f -print
|
distcleancheck_listfiles = find . -type f -print
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -297,8 +306,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -314,7 +324,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -327,6 +345,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -356,6 +376,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -366,6 +389,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -403,6 +427,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -423,13 +448,26 @@ LIBTOOLFLAGS = --verbose
|
|||||||
SUBDIRS = lib $(am__append_1) $(am__append_2) $(am__append_3)
|
SUBDIRS = lib $(am__append_1) $(am__append_2) $(am__append_3)
|
||||||
pkgconfig_DATA = expat.pc
|
pkgconfig_DATA = expat.pc
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
dist_cmake_DATA = \
|
||||||
|
cmake/autotools/expat.cmake
|
||||||
|
|
||||||
|
nodist_cmake_DATA = \
|
||||||
|
cmake/autotools/expat-config-version.cmake \
|
||||||
|
cmake/autotools/expat-noconfig.cmake \
|
||||||
|
cmake/expat-config.cmake
|
||||||
|
|
||||||
|
cmakedir = $(libdir)/cmake/expat-@PACKAGE_VERSION@
|
||||||
_EXTRA_DIST_CMAKE = \
|
_EXTRA_DIST_CMAKE = \
|
||||||
cmake/expat-config.cmake.in \
|
cmake/autotools/expat-noconfig__linux.cmake.in \
|
||||||
|
cmake/autotools/expat-noconfig__macos.cmake.in \
|
||||||
|
cmake/autotools/expat-noconfig__windows.cmake.in \
|
||||||
|
cmake/autotools/expat-package-init.cmake \
|
||||||
cmake/mingw-toolchain.cmake \
|
cmake/mingw-toolchain.cmake \
|
||||||
\
|
\
|
||||||
CMakeLists.txt \
|
CMakeLists.txt \
|
||||||
CMake.README \
|
CMake.README \
|
||||||
ConfigureChecks.cmake \
|
ConfigureChecks.cmake \
|
||||||
|
expat.pc.cmake \
|
||||||
expat_config.h.cmake
|
expat_config.h.cmake
|
||||||
|
|
||||||
_EXTRA_DIST_WINDOWS = \
|
_EXTRA_DIST_WINDOWS = \
|
||||||
@ -444,11 +482,14 @@ EXTRA_DIST = \
|
|||||||
\
|
\
|
||||||
conftools/expat.m4 \
|
conftools/expat.m4 \
|
||||||
conftools/get-version.sh \
|
conftools/get-version.sh \
|
||||||
conftools/PrintPath \
|
\
|
||||||
|
fuzz/xml_parsebuffer_fuzzer.c \
|
||||||
|
fuzz/xml_parse_fuzzer.c \
|
||||||
\
|
\
|
||||||
xmlwf/xmlwf_helpgen.py \
|
xmlwf/xmlwf_helpgen.py \
|
||||||
xmlwf/xmlwf_helpgen.sh \
|
xmlwf/xmlwf_helpgen.sh \
|
||||||
\
|
\
|
||||||
|
buildconf.sh \
|
||||||
Changes \
|
Changes \
|
||||||
README.md \
|
README.md \
|
||||||
\
|
\
|
||||||
@ -509,6 +550,12 @@ distclean-hdr:
|
|||||||
-rm -f expat_config.h stamp-h1
|
-rm -f expat_config.h stamp-h1
|
||||||
expat.pc: $(top_builddir)/config.status $(srcdir)/expat.pc.in
|
expat.pc: $(top_builddir)/config.status $(srcdir)/expat.pc.in
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||||
|
cmake/expat-config.cmake: $(top_builddir)/config.status $(top_srcdir)/cmake/expat-config.cmake.in
|
||||||
|
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||||
|
cmake/autotools/expat-config-version.cmake: $(top_builddir)/config.status $(top_srcdir)/cmake/autotools/expat-config-version.cmake.in
|
||||||
|
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||||
|
cmake/autotools/expat-noconfig.cmake: $(top_builddir)/config.status
|
||||||
|
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||||
run.sh: $(top_builddir)/config.status $(srcdir)/run.sh.in
|
run.sh: $(top_builddir)/config.status $(srcdir)/run.sh.in
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||||
|
|
||||||
@ -520,6 +567,48 @@ clean-libtool:
|
|||||||
|
|
||||||
distclean-libtool:
|
distclean-libtool:
|
||||||
-rm -f libtool config.lt
|
-rm -f libtool config.lt
|
||||||
|
install-dist_cmakeDATA: $(dist_cmake_DATA)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
@list='$(dist_cmake_DATA)'; test -n "$(cmakedir)" || list=; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(cmakedir)'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(cmakedir)" || exit 1; \
|
||||||
|
fi; \
|
||||||
|
for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
echo "$$d$$p"; \
|
||||||
|
done | $(am__base_list) | \
|
||||||
|
while read files; do \
|
||||||
|
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cmakedir)'"; \
|
||||||
|
$(INSTALL_DATA) $$files "$(DESTDIR)$(cmakedir)" || exit $$?; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-dist_cmakeDATA:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(dist_cmake_DATA)'; test -n "$(cmakedir)" || list=; \
|
||||||
|
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||||
|
dir='$(DESTDIR)$(cmakedir)'; $(am__uninstall_files_from_dir)
|
||||||
|
install-nodist_cmakeDATA: $(nodist_cmake_DATA)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
@list='$(nodist_cmake_DATA)'; test -n "$(cmakedir)" || list=; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(cmakedir)'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(cmakedir)" || exit 1; \
|
||||||
|
fi; \
|
||||||
|
for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
echo "$$d$$p"; \
|
||||||
|
done | $(am__base_list) | \
|
||||||
|
while read files; do \
|
||||||
|
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cmakedir)'"; \
|
||||||
|
$(INSTALL_DATA) $$files "$(DESTDIR)$(cmakedir)" || exit $$?; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-nodist_cmakeDATA:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(nodist_cmake_DATA)'; test -n "$(cmakedir)" || list=; \
|
||||||
|
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||||
|
dir='$(DESTDIR)$(cmakedir)'; $(am__uninstall_files_from_dir)
|
||||||
install-pkgconfigDATA: $(pkgconfig_DATA)
|
install-pkgconfigDATA: $(pkgconfig_DATA)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
|
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
|
||||||
@ -647,7 +736,6 @@ cscopelist-am: $(am__tagged_files)
|
|||||||
distclean-tags:
|
distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
@ -728,6 +816,10 @@ dist-xz: distdir
|
|||||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||||
$(am__post_remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
|
dist-zstd: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
|
||||||
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-tarZ: distdir
|
dist-tarZ: distdir
|
||||||
@echo WARNING: "Support for distribution archives compressed with" \
|
@echo WARNING: "Support for distribution archives compressed with" \
|
||||||
"legacy program 'compress' is deprecated." >&2
|
"legacy program 'compress' is deprecated." >&2
|
||||||
@ -770,6 +862,8 @@ distcheck: dist
|
|||||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
||||||
*.zip*) \
|
*.zip*) \
|
||||||
unzip $(distdir).zip ;;\
|
unzip $(distdir).zip ;;\
|
||||||
|
*.tar.zst*) \
|
||||||
|
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
|
||||||
esac
|
esac
|
||||||
chmod -R a-w $(distdir)
|
chmod -R a-w $(distdir)
|
||||||
chmod u+w $(distdir)
|
chmod u+w $(distdir)
|
||||||
@ -785,7 +879,7 @@ distcheck: dist
|
|||||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
@ -841,7 +935,7 @@ check: check-recursive
|
|||||||
all-am: Makefile $(DATA) expat_config.h
|
all-am: Makefile $(DATA) expat_config.h
|
||||||
installdirs: installdirs-recursive
|
installdirs: installdirs-recursive
|
||||||
installdirs-am:
|
installdirs-am:
|
||||||
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
|
for dir in "$(DESTDIR)$(cmakedir)" "$(DESTDIR)$(cmakedir)" "$(DESTDIR)$(pkgconfigdir)"; do \
|
||||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||||
done
|
done
|
||||||
install: install-recursive
|
install: install-recursive
|
||||||
@ -896,7 +990,8 @@ info: info-recursive
|
|||||||
|
|
||||||
info-am:
|
info-am:
|
||||||
|
|
||||||
install-data-am: install-pkgconfigDATA
|
install-data-am: install-dist_cmakeDATA install-nodist_cmakeDATA \
|
||||||
|
install-pkgconfigDATA
|
||||||
|
|
||||||
install-dvi: install-dvi-recursive
|
install-dvi: install-dvi-recursive
|
||||||
|
|
||||||
@ -942,7 +1037,8 @@ ps: ps-recursive
|
|||||||
|
|
||||||
ps-am:
|
ps-am:
|
||||||
|
|
||||||
uninstall-am: uninstall-pkgconfigDATA
|
uninstall-am: uninstall-dist_cmakeDATA uninstall-nodist_cmakeDATA \
|
||||||
|
uninstall-pkgconfigDATA
|
||||||
|
|
||||||
.MAKE: $(am__recursive_targets) all install-am install-strip
|
.MAKE: $(am__recursive_targets) all install-am install-strip
|
||||||
|
|
||||||
@ -950,18 +1046,21 @@ uninstall-am: uninstall-pkgconfigDATA
|
|||||||
am--refresh check check-am clean clean-cscope clean-generic \
|
am--refresh check check-am clean clean-cscope clean-generic \
|
||||||
clean-libtool cscope cscopelist-am ctags ctags-am dist \
|
clean-libtool cscope cscopelist-am ctags ctags-am dist \
|
||||||
dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
|
dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
|
||||||
dist-xz dist-zip distcheck distclean distclean-generic \
|
dist-xz dist-zip dist-zstd distcheck distclean \
|
||||||
distclean-hdr distclean-libtool distclean-tags distcleancheck \
|
distclean-generic distclean-hdr distclean-libtool \
|
||||||
distdir distuninstallcheck dvi dvi-am html html-am info \
|
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||||
info-am install install-am install-data install-data-am \
|
dvi-am html html-am info info-am install install-am \
|
||||||
|
install-data install-data-am install-dist_cmakeDATA \
|
||||||
install-dvi install-dvi-am install-exec install-exec-am \
|
install-dvi install-dvi-am install-exec install-exec-am \
|
||||||
install-html install-html-am install-info install-info-am \
|
install-html install-html-am install-info install-info-am \
|
||||||
install-man install-pdf install-pdf-am install-pkgconfigDATA \
|
install-man install-nodist_cmakeDATA install-pdf \
|
||||||
install-ps install-ps-am install-strip installcheck \
|
install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
|
||||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
install-strip installcheck installcheck-am installdirs \
|
||||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||||
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
|
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||||
uninstall-am uninstall-pkgconfigDATA
|
ps ps-am tags tags-am uninstall uninstall-am \
|
||||||
|
uninstall-dist_cmakeDATA uninstall-nodist_cmakeDATA \
|
||||||
|
uninstall-pkgconfigDATA
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
.PRECIOUS: Makefile
|
||||||
|
|
||||||
|
97
README.md
97
README.md
@ -1,12 +1,14 @@
|
|||||||
[![Travis CI Build Status](https://travis-ci.org/libexpat/libexpat.svg?branch=master)](https://travis-ci.org/libexpat/libexpat)
|
[![Run Linux Travis CI tasks](https://github.com/libexpat/libexpat/actions/workflows/linux.yml/badge.svg)](https://github.com/libexpat/libexpat/actions/workflows/linux.yml)
|
||||||
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/libexpat/libexpat?svg=true)](https://ci.appveyor.com/project/libexpat/libexpat)
|
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/libexpat/libexpat?svg=true)](https://ci.appveyor.com/project/libexpat/libexpat)
|
||||||
[![Packaging status](https://repology.org/badge/tiny-repos/expat.svg)](https://repology.org/metapackage/expat/versions)
|
[![Packaging status](https://repology.org/badge/tiny-repos/expat.svg)](https://repology.org/metapackage/expat/versions)
|
||||||
|
[![Downloads SourceForge](https://img.shields.io/sourceforge/dt/expat?label=Downloads%20SourceForge)](https://sourceforge.net/projects/expat/files/)
|
||||||
|
[![Downloads GitHub](https://img.shields.io/github/downloads/libexpat/libexpat/total?label=Downloads%20GitHub)](https://github.com/libexpat/libexpat/releases)
|
||||||
|
|
||||||
|
|
||||||
# Expat, Release 2.2.9
|
# Expat, Release 2.4.3
|
||||||
|
|
||||||
This is Expat, a C library for parsing XML, started by
|
This is Expat, a C library for parsing XML, started by
|
||||||
[James Clark](https://en.wikipedia.org/wiki/James_Clark_(programmer)) in 1997.
|
[James Clark](https://en.wikipedia.org/wiki/James_Clark_%28programmer%29) in 1997.
|
||||||
Expat is a stream-oriented XML parser. This means that you register
|
Expat is a stream-oriented XML parser. This means that you register
|
||||||
handlers with the parser before starting the parse. These handlers
|
handlers with the parser before starting the parse. These handlers
|
||||||
are called when the parser discovers the associated structures in the
|
are called when the parser discovers the associated structures in the
|
||||||
@ -14,13 +16,14 @@ document being parsed. A start tag is an example of the kind of
|
|||||||
structures for which you may register handlers.
|
structures for which you may register handlers.
|
||||||
|
|
||||||
Expat supports the following compilers:
|
Expat supports the following compilers:
|
||||||
|
|
||||||
- GNU GCC >=4.5
|
- GNU GCC >=4.5
|
||||||
- LLVM Clang >=3.5
|
- LLVM Clang >=3.5
|
||||||
- Microsoft Visual Studio >=8.0/2005
|
- Microsoft Visual Studio >=15.0/2017 (rolling `${today} minus 5 years`)
|
||||||
|
|
||||||
Windows users should use the
|
Windows users can use the
|
||||||
[`expat_win32` package](https://sourceforge.net/projects/expat/files/expat_win32/),
|
[`expat-win32bin-*.*.*.{exe,zip}` download](https://github.com/libexpat/libexpat/releases),
|
||||||
which includes both precompiled libraries and executables, and source code for
|
which includes both pre-compiled libraries and executables, and source code for
|
||||||
developers.
|
developers.
|
||||||
|
|
||||||
Expat is [free software](https://www.gnu.org/philosophy/free-sw.en.html).
|
Expat is [free software](https://www.gnu.org/philosophy/free-sw.en.html).
|
||||||
@ -30,6 +33,67 @@ contained in the file
|
|||||||
distributed with this package.
|
distributed with this package.
|
||||||
This license is the same as the MIT/X Consortium license.
|
This license is the same as the MIT/X Consortium license.
|
||||||
|
|
||||||
|
|
||||||
|
## Using libexpat in your CMake-Based Project
|
||||||
|
|
||||||
|
There are two ways of using libexpat with CMake:
|
||||||
|
|
||||||
|
### a) Module Mode
|
||||||
|
|
||||||
|
This approach leverages CMake's own [module `FindEXPAT`](https://cmake.org/cmake/help/latest/module/FindEXPAT.html).
|
||||||
|
|
||||||
|
Notice the *uppercase* `EXPAT` in the following example:
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
cmake_minimum_required(VERSION 3.0) # or 3.10, see below
|
||||||
|
|
||||||
|
project(hello VERSION 1.0.0)
|
||||||
|
|
||||||
|
find_package(EXPAT 2.2.8 MODULE REQUIRED)
|
||||||
|
|
||||||
|
add_executable(hello
|
||||||
|
hello.c
|
||||||
|
)
|
||||||
|
|
||||||
|
# a) for CMake >=3.10 (see CMake's FindEXPAT docs)
|
||||||
|
target_link_libraries(hello PUBLIC EXPAT::EXPAT)
|
||||||
|
|
||||||
|
# b) for CMake >=3.0
|
||||||
|
target_include_directories(hello PRIVATE ${EXPAT_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(hello PUBLIC ${EXPAT_LIBRARIES})
|
||||||
|
```
|
||||||
|
|
||||||
|
### b) Config Mode
|
||||||
|
|
||||||
|
This approach requires files from…
|
||||||
|
|
||||||
|
- libexpat >=2.2.8 where packaging uses the CMake build system
|
||||||
|
or
|
||||||
|
- libexpat >=2.3.0 where packaging uses the GNU Autotools build system
|
||||||
|
on Linux
|
||||||
|
or
|
||||||
|
- libexpat >=2.4.0 where packaging uses the GNU Autotools build system
|
||||||
|
on macOS or MinGW.
|
||||||
|
|
||||||
|
Notice the *lowercase* `expat` in the following example:
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
|
project(hello VERSION 1.0.0)
|
||||||
|
|
||||||
|
find_package(expat 2.2.8 CONFIG REQUIRED char dtd ns)
|
||||||
|
|
||||||
|
add_executable(hello
|
||||||
|
hello.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(hello PUBLIC expat::expat)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Building from a Git Clone
|
||||||
|
|
||||||
If you are building Expat from a check-out from the
|
If you are building Expat from a check-out from the
|
||||||
[Git repository](https://github.com/libexpat/libexpat/),
|
[Git repository](https://github.com/libexpat/libexpat/),
|
||||||
you need to run a script that generates the configure script using the
|
you need to run a script that generates the configure script using the
|
||||||
@ -43,6 +107,11 @@ autoconf 2.58 or newer. Run the script like this:
|
|||||||
Once this has been done, follow the same instructions as for building
|
Once this has been done, follow the same instructions as for building
|
||||||
from a source distribution.
|
from a source distribution.
|
||||||
|
|
||||||
|
|
||||||
|
## Building from a Source Distribution
|
||||||
|
|
||||||
|
### a) Building with the configure script (i.e. GNU Autotools)
|
||||||
|
|
||||||
To build Expat from a source distribution, you first run the
|
To build Expat from a source distribution, you first run the
|
||||||
configuration shell script in the top level distribution directory:
|
configuration shell script in the top level distribution directory:
|
||||||
|
|
||||||
@ -132,8 +201,14 @@ A reference manual is available in the file `doc/reference.html` in this
|
|||||||
distribution.
|
distribution.
|
||||||
|
|
||||||
|
|
||||||
The CMake build system is still *experimental* and will replace the primary
|
### b) Building with CMake
|
||||||
|
|
||||||
|
The CMake build system is still *experimental* and may replace the primary
|
||||||
build system based on GNU Autotools at some point when it is ready.
|
build system based on GNU Autotools at some point when it is ready.
|
||||||
|
|
||||||
|
|
||||||
|
#### Available Options
|
||||||
|
|
||||||
For an idea of the available (non-advanced) options for building with CMake:
|
For an idea of the available (non-advanced) options for building with CMake:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
@ -156,6 +231,9 @@ EXPAT_BUILD_EXAMPLES:BOOL=ON
|
|||||||
// build fuzzers for the expat library
|
// build fuzzers for the expat library
|
||||||
EXPAT_BUILD_FUZZERS:BOOL=OFF
|
EXPAT_BUILD_FUZZERS:BOOL=OFF
|
||||||
|
|
||||||
|
// build pkg-config file
|
||||||
|
EXPAT_BUILD_PKGCONFIG:BOOL=ON
|
||||||
|
|
||||||
// build the tests for expat library
|
// build the tests for expat library
|
||||||
EXPAT_BUILD_TESTS:BOOL=ON
|
EXPAT_BUILD_TESTS:BOOL=ON
|
||||||
|
|
||||||
@ -171,6 +249,9 @@ EXPAT_ENABLE_INSTALL:BOOL=ON
|
|||||||
// Use /MT flag (static CRT) when compiling in MSVC
|
// Use /MT flag (static CRT) when compiling in MSVC
|
||||||
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
|
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
|
||||||
|
|
||||||
|
// build fuzzers via ossfuzz for the expat library
|
||||||
|
EXPAT_OSSFUZZ_BUILD:BOOL=OFF
|
||||||
|
|
||||||
// build a shared expat library
|
// build a shared expat library
|
||||||
EXPAT_SHARED_LIBS:BOOL=ON
|
EXPAT_SHARED_LIBS:BOOL=ON
|
||||||
|
|
||||||
|
55
buildconf.sh
Executable file
55
buildconf.sh
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
# __ __ _
|
||||||
|
# ___\ \/ /_ __ __ _| |_
|
||||||
|
# / _ \\ /| '_ \ / _` | __|
|
||||||
|
# | __// \| |_) | (_| | |_
|
||||||
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
|
# |_| XML parser
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
|
||||||
|
# Licensed under the MIT license:
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# File expat_config.h.in (as generated by autoheader by autoreconf) contains
|
||||||
|
# macro SIZEOF_VOID_P which is (1) not really needed by Expat as of today and
|
||||||
|
# (2) a problem to "multilib" systems with one shared installed
|
||||||
|
# /usr/include/expat_config.h for two Expats with different "void *" sizes
|
||||||
|
# installed in e.g. /usr/lib32 and /usr/lib64. Hence we patch macro
|
||||||
|
# SIZEOF_VOID_P out of template expat_config.h.in so that configure will
|
||||||
|
# not put SIZEOF_VOID_P in the eventual expat_config.h.
|
||||||
|
patch_expat_config_h_in() {
|
||||||
|
local filename="$1"
|
||||||
|
local sizeof_void_p_line_number="$(fgrep -n SIZEOF_VOID_P "${filename}" | awk -F: '{print $1}')"
|
||||||
|
[[ ${sizeof_void_p_line_number} =~ ^[0-9]+$ ]] # cheap assert
|
||||||
|
local first_line_to_delete=$(( sizeof_void_p_line_number - 1 ))
|
||||||
|
local last_line_to_delete=$(( sizeof_void_p_line_number + 1 ))
|
||||||
|
# Note: Avoiding "sed -i" only for macOS portability.
|
||||||
|
local tempfile="$(mktemp)"
|
||||||
|
sed "${first_line_to_delete},${last_line_to_delete}d" "${filename}" > "${tempfile}"
|
||||||
|
mv "${tempfile}" "${filename}"
|
||||||
|
}
|
||||||
|
|
||||||
|
autoreconf --warnings=all --install --verbose "$@"
|
||||||
|
|
||||||
|
patch_expat_config_h_in expat_config.h.in
|
166
configure.ac
166
configure.ac
@ -1,21 +1,54 @@
|
|||||||
dnl configuration script for expat
|
dnl configuration script for expat
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
dnl __ __ _
|
||||||
|
dnl ___\ \/ /_ __ __ _| |_
|
||||||
|
dnl / _ \\ /| '_ \ / _` | __|
|
||||||
|
dnl | __// \| |_) | (_| | |_
|
||||||
|
dnl \___/_/\_\ .__/ \__,_|\__|
|
||||||
|
dnl |_| XML parser
|
||||||
dnl
|
dnl
|
||||||
dnl Copyright 2000 Clark Cooper
|
dnl Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
dnl Copyright (c) 2000-2005 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
dnl Copyright (c) 2001-2003 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
dnl Copyright (c) 2006-2012 Karl Waclawek <karl@waclawek.net>
|
||||||
|
dnl Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
dnl Copyright (c) 2017 S. P. Zeidler <spz@netbsd.org>
|
||||||
|
dnl Copyright (c) 2017 Stephen Groat <stephen@groat.us>
|
||||||
|
dnl Copyright (c) 2017-2020 Joe Orton <jorton@redhat.com>
|
||||||
|
dnl Copyright (c) 2018 Yury Gribov <tetra2005@gmail.com>
|
||||||
|
dnl Copyright (c) 2018 Benjamin Peterson <benjamin@python.org>
|
||||||
|
dnl Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
|
||||||
|
dnl Copyright (c) 2018 KangLin <kl222@126.com>
|
||||||
|
dnl Copyright (c) 2019 Mohammed Khajapasha <mohammed.khajapasha@intel.com>
|
||||||
|
dnl Copyright (c) 2019 Kishore Kunche <kishore.kunche@intel.com>
|
||||||
|
dnl Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
|
dnl Licensed under the MIT license:
|
||||||
dnl
|
dnl
|
||||||
dnl This file is part of EXPAT.
|
dnl Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
dnl a copy of this software and associated documentation files (the
|
||||||
|
dnl "Software"), to deal in the Software without restriction, including
|
||||||
|
dnl without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
dnl distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
dnl persons to whom the Software is furnished to do so, subject to the
|
||||||
|
dnl following conditions:
|
||||||
dnl
|
dnl
|
||||||
dnl EXPAT is free software; you can redistribute it and/or modify it
|
dnl The above copyright notice and this permission notice shall be included
|
||||||
dnl under the terms of the License (based on the MIT/X license) contained
|
dnl in all copies or substantial portions of the Software.
|
||||||
dnl in the file COPYING that comes with this distribution.
|
|
||||||
dnl
|
dnl
|
||||||
|
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
dnl EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
dnl NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
dnl USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
dnl Ensure that Expat is configured with autoconf 2.69 or newer.
|
dnl Ensure that Expat is configured with autoconf 2.69 or newer.
|
||||||
AC_PREREQ(2.69)
|
AC_PREREQ([2.69])
|
||||||
|
|
||||||
dnl Get the version number of Expat, using m4's esyscmd() command to run
|
dnl Get the version number of Expat, using m4's esyscmd() command to run
|
||||||
dnl the command at m4-generation time. This allows us to create an m4
|
dnl the command at m4-generation time. This allows us to create an m4
|
||||||
dnl symbol holding the correct version number. AC_INIT() requires the
|
dnl symbol holding the correct version number. AC_INIT requires the
|
||||||
dnl version number at m4-time, rather than when ./configure is run, so
|
dnl version number at m4-time, rather than when ./configure is run, so
|
||||||
dnl all this must happen as part of m4, not as part of the shell code
|
dnl all this must happen as part of m4, not as part of the shell code
|
||||||
dnl contained in ./configure.
|
dnl contained in ./configure.
|
||||||
@ -27,7 +60,7 @@ m4_define([expat_version],
|
|||||||
m4_ifdef([__gnu__],
|
m4_ifdef([__gnu__],
|
||||||
[esyscmd(conftools/get-version.sh lib/expat.h)],
|
[esyscmd(conftools/get-version.sh lib/expat.h)],
|
||||||
[2.2.x]))
|
[2.2.x]))
|
||||||
AC_INIT(expat, expat_version, expat-bugs@libexpat.org)
|
AC_INIT([expat], expat_version, [expat-bugs@libexpat.org])
|
||||||
m4_undefine([expat_version])
|
m4_undefine([expat_version])
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([Makefile.in])
|
AC_CONFIG_SRCDIR([Makefile.in])
|
||||||
@ -48,12 +81,11 @@ dnl
|
|||||||
dnl If the API changes incompatibly set LIBAGE back to 0
|
dnl If the API changes incompatibly set LIBAGE back to 0
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
LIBCURRENT=7 # sync
|
LIBCURRENT=9 # sync
|
||||||
LIBREVISION=11 # with
|
LIBREVISION=3 # with
|
||||||
LIBAGE=6 # CMakeLists.txt!
|
LIBAGE=8 # CMakeLists.txt!
|
||||||
|
|
||||||
AX_APPEND_FLAG([-DHAVE_EXPAT_CONFIG_H], [CPPFLAGS])
|
AC_CONFIG_HEADERS([expat_config.h])
|
||||||
AC_CONFIG_HEADER([expat_config.h])
|
|
||||||
|
|
||||||
AM_PROG_AR
|
AM_PROG_AR
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
@ -69,30 +101,32 @@ AC_SUBST(LIBAGE)
|
|||||||
|
|
||||||
AC_LANG([C])
|
AC_LANG([C])
|
||||||
AC_PROG_CC_C99
|
AC_PROG_CC_C99
|
||||||
|
|
||||||
AS_IF([test "$GCC" = yes],
|
AS_IF([test "$GCC" = yes],
|
||||||
[AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [CFLAGS])
|
[AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [AM_CFLAGS])
|
||||||
dnl Be careful about adding the -fexceptions option; some versions of
|
dnl Be careful about adding the -fexceptions option; some versions of
|
||||||
dnl GCC don't support it and it causes extra warnings that are only
|
dnl GCC don't support it and it causes extra warnings that are only
|
||||||
dnl distracting; avoid.
|
dnl distracting; avoid.
|
||||||
AX_APPEND_COMPILE_FLAGS([-fexceptions], [CFLAGS])
|
AX_APPEND_COMPILE_FLAGS([-fexceptions], [AM_CFLAGS])
|
||||||
AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing -Wmissing-prototypes -Wstrict-prototypes], [CFLAGS])
|
AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing -Wmissing-prototypes -Wstrict-prototypes], [AM_CFLAGS])
|
||||||
AX_APPEND_COMPILE_FLAGS([-pedantic -Wduplicated-cond -Wduplicated-branches -Wlogical-op], [CFLAGS])
|
AX_APPEND_COMPILE_FLAGS([-pedantic -Wduplicated-cond -Wduplicated-branches -Wlogical-op], [AM_CFLAGS])
|
||||||
AX_APPEND_COMPILE_FLAGS([-Wrestrict -Wnull-dereference -Wjump-misses-init -Wdouble-promotion], [CFLAGS])
|
AX_APPEND_COMPILE_FLAGS([-Wrestrict -Wnull-dereference -Wjump-misses-init -Wdouble-promotion], [AM_CFLAGS])
|
||||||
AX_APPEND_COMPILE_FLAGS([-Wshadow -Wformat=2 -Wmisleading-indentation], [CFLAGS])])
|
AX_APPEND_COMPILE_FLAGS([-Wshadow -Wformat=2 -Wno-pedantic-ms-format -Wmisleading-indentation], [AM_CFLAGS])])
|
||||||
|
|
||||||
AC_LANG_PUSH([C++])
|
AC_LANG_PUSH([C++])
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
|
|
||||||
AS_IF([test "$GCC" = yes],
|
AS_IF([test "$GCC" = yes],
|
||||||
[AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [CXXFLAGS])
|
[AX_APPEND_COMPILE_FLAGS([-Wall -Wextra], [AM_CXXFLAGS])
|
||||||
dnl Be careful about adding the -fexceptions option; some versions of
|
dnl Be careful about adding the -fexceptions option; some versions of
|
||||||
dnl GCC don't support it and it causes extra warnings that are only
|
dnl GCC don't support it and it causes extra warnings that are only
|
||||||
dnl distracting; avoid.
|
dnl distracting; avoid.
|
||||||
AX_APPEND_COMPILE_FLAGS([-fexceptions], [CXXFLAGS])
|
AX_APPEND_COMPILE_FLAGS([-fexceptions], [AM_CXXFLAGS])
|
||||||
AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing], [CXXFLAGS])])
|
AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing], [AM_CXXFLAGS])])
|
||||||
AC_LANG_POP([C++])
|
AC_LANG_POP([C++])
|
||||||
|
|
||||||
AS_IF([test "$GCC" = yes],
|
AS_IF([test "$GCC" = yes],
|
||||||
[AX_APPEND_LINK_FLAGS([-fno-strict-aliasing],[LDFLAGS])])
|
[AX_APPEND_LINK_FLAGS([-fno-strict-aliasing],[AM_LDFLAGS])])
|
||||||
|
|
||||||
dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang (issue #312)
|
dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang (issue #312)
|
||||||
AS_CASE(["$LD"],[*clang*],
|
AS_CASE(["$LD"],[*clang*],
|
||||||
@ -100,11 +134,8 @@ AS_CASE(["$LD"],[*clang*],
|
|||||||
[*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
|
[*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
|
||||||
|
|
||||||
EXPATCFG_COMPILER_SUPPORTS_VISIBILITY([
|
EXPATCFG_COMPILER_SUPPORTS_VISIBILITY([
|
||||||
AX_APPEND_FLAG([-fvisibility=hidden], [CFLAGS])
|
AX_APPEND_FLAG([-fvisibility=hidden], [AM_CFLAGS])
|
||||||
AX_APPEND_FLAG([-DXML_ENABLE_VISIBILITY=1], [CFLAGS])])
|
AX_APPEND_FLAG([-DXML_ENABLE_VISIBILITY=1], [AM_CPPFLAGS])])
|
||||||
|
|
||||||
dnl Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
|
|
||||||
@ -149,8 +180,13 @@ AS_CASE("${host_os}",
|
|||||||
AC_MSG_NOTICE([detected OS: MinGW])])
|
AC_MSG_NOTICE([detected OS: MinGW])])
|
||||||
AM_CONDITIONAL([MINGW], [test x${EXPATCFG_ON_MINGW} = xyes])
|
AM_CONDITIONAL([MINGW], [test x${EXPATCFG_ON_MINGW} = xyes])
|
||||||
|
|
||||||
|
dnl Note: Prefix "_INTERNAL_" here means exclusive use inside of file configure.ac
|
||||||
AM_CONDITIONAL([UNICODE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_UNICODE >/dev/null])
|
AM_CONDITIONAL([UNICODE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_UNICODE >/dev/null])
|
||||||
|
AM_CONDITIONAL([_INTERNAL_UNICODE_WCHAR_T], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_UNICODE_WCHAR_T >/dev/null])
|
||||||
|
AM_CONDITIONAL([_INTERNAL_MIN_SIZE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_MIN_SIZE >/dev/null])
|
||||||
|
AM_CONDITIONAL([_INTERNAL_LARGE_SIZE], [echo -- "${CPPFLAGS}${CFLAGS}" | ${FGREP} XML_LARGE_SIZE >/dev/null])
|
||||||
|
|
||||||
|
LT_LIB_M
|
||||||
|
|
||||||
AC_ARG_WITH([libbsd],
|
AC_ARG_WITH([libbsd],
|
||||||
[AS_HELP_STRING([--with-libbsd], [utilize libbsd (for arc4random_buf)])],
|
[AS_HELP_STRING([--with-libbsd], [utilize libbsd (for arc4random_buf)])],
|
||||||
@ -307,8 +343,67 @@ AS_IF([test "x${DOCBOOK_TO_MAN}" != x -a "x$with_docbook" != xno],
|
|||||||
|
|
||||||
AM_CONDITIONAL(WITH_DOCBOOK, [test "x${DOCBOOK_TO_MAN}" != x])
|
AM_CONDITIONAL(WITH_DOCBOOK, [test "x${DOCBOOK_TO_MAN}" != x])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Configure CMake file templates
|
||||||
|
dnl NOTE: The *_TRUE variables read here are Automake conditionals
|
||||||
|
dnl that are either set to "" when enabled or to "#" when disabled
|
||||||
|
dnl (because they are used to dynamically comment out certain things)
|
||||||
|
AS_IF([test "x${enable_xml_attr_info}" = xyes],
|
||||||
|
[EXPAT_ATTR_INFO=ON],
|
||||||
|
[EXPAT_ATTR_INFO=OFF])
|
||||||
|
EXPAT_DTD=ON
|
||||||
|
AS_IF([test "x${_INTERNAL_LARGE_SIZE_TRUE}" = x],
|
||||||
|
[EXPAT_LARGE_SIZE=ON],
|
||||||
|
[EXPAT_LARGE_SIZE=OFF])
|
||||||
|
AS_IF([test "x${_INTERNAL_MIN_SIZE_TRUE}" = x],
|
||||||
|
[EXPAT_MIN_SIZE=ON],
|
||||||
|
[EXPAT_MIN_SIZE=OFF])
|
||||||
|
EXPAT_NS=ON
|
||||||
|
AS_IF([test "x${enable_xml_context}" != xno],
|
||||||
|
[EXPAT_CONTEXT_BYTES=${enable_xml_context}],
|
||||||
|
[EXPAT_CONTEXT_BYTES=OFF])
|
||||||
|
AS_IF([test "x${UNICODE_TRUE}" = x],
|
||||||
|
[AS_IF(
|
||||||
|
[test "x${_INTERNAL_UNICODE_WCHAR_T_TRUE}" = x],
|
||||||
|
[EXPAT_CHAR_TYPE=wchar_t],
|
||||||
|
[EXPAT_CHAR_TYPE=ushort])],
|
||||||
|
[EXPAT_CHAR_TYPE=char])
|
||||||
|
PACKAGE_INIT="${srcdir}"/cmake/autotools/expat-package-init.cmake
|
||||||
|
LIBDIR_BASENAME="$(basename "${libdir}")"
|
||||||
|
SO_MAJOR="$(expr "${LIBCURRENT}" - "${LIBAGE}")"
|
||||||
|
SO_MINOR="${LIBAGE}"
|
||||||
|
SO_PATCH="${LIBREVISION}"
|
||||||
|
AC_CHECK_SIZEOF([void *]) # sets ac_cv_sizeof_void_p
|
||||||
|
AC_SUBST([EXPAT_ATTR_INFO])
|
||||||
|
AC_SUBST([EXPAT_DTD])
|
||||||
|
AC_SUBST([EXPAT_LARGE_SIZE])
|
||||||
|
AC_SUBST([EXPAT_MIN_SIZE])
|
||||||
|
AC_SUBST([EXPAT_NS])
|
||||||
|
AC_SUBST([EXPAT_CONTEXT_BYTES])
|
||||||
|
AC_SUBST([EXPAT_CHAR_TYPE])
|
||||||
|
AC_SUBST_FILE([PACKAGE_INIT])
|
||||||
|
AC_SUBST([LIBDIR_BASENAME])
|
||||||
|
AC_SUBST([SO_MAJOR])
|
||||||
|
AC_SUBST([SO_MINOR])
|
||||||
|
AC_SUBST([SO_PATCH])
|
||||||
|
AC_SUBST([ac_cv_sizeof_void_p])
|
||||||
|
|
||||||
|
|
||||||
|
dnl write the Automake flags we set
|
||||||
|
AC_SUBST([AM_CPPFLAGS])
|
||||||
|
AC_SUBST([AM_CFLAGS])
|
||||||
|
AC_SUBST([AM_CXXFLAGS])
|
||||||
|
AC_SUBST([AM_LDFLAGS])
|
||||||
|
|
||||||
|
AS_CASE("${host_os}",
|
||||||
|
[darwin*], [CMAKE_NOCONFIG_SOURCE=cmake/autotools/expat-noconfig__macos.cmake.in],
|
||||||
|
[mingw*], [CMAKE_NOCONFIG_SOURCE=cmake/autotools/expat-noconfig__windows.cmake.in],
|
||||||
|
[CMAKE_NOCONFIG_SOURCE=cmake/autotools/expat-noconfig__linux.cmake.in])
|
||||||
AC_CONFIG_FILES([Makefile]
|
AC_CONFIG_FILES([Makefile]
|
||||||
[expat.pc]
|
[expat.pc]
|
||||||
|
[cmake/expat-config.cmake]
|
||||||
|
[cmake/autotools/expat-config-version.cmake]
|
||||||
|
[cmake/autotools/expat-noconfig.cmake:${CMAKE_NOCONFIG_SOURCE}]
|
||||||
[doc/Makefile]
|
[doc/Makefile]
|
||||||
[examples/Makefile]
|
[examples/Makefile]
|
||||||
[lib/Makefile]
|
[lib/Makefile]
|
||||||
@ -317,3 +412,18 @@ AC_CONFIG_FILES([Makefile]
|
|||||||
[xmlwf/Makefile])
|
[xmlwf/Makefile])
|
||||||
AC_CONFIG_FILES([run.sh], [chmod +x run.sh])
|
AC_CONFIG_FILES([run.sh], [chmod +x run.sh])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
|
|
||||||
|
AC_MSG_NOTICE([
|
||||||
|
|
||||||
|
Automake flags (can be overridden by user flags):
|
||||||
|
[AM_CPPFLAGS]: ${AM_CPPFLAGS}
|
||||||
|
[AM_CFLAGS]: ${AM_CFLAGS}
|
||||||
|
[AM_CXXFLAGS]: ${AM_CXXFLAGS}
|
||||||
|
[AM_LDFLAGS]: ${AM_LDFLAGS}
|
||||||
|
|
||||||
|
User flags (override Automake flags on conflict):
|
||||||
|
CPPFLAGS: ${CPPFLAGS}
|
||||||
|
CFLAGS: ${CFLAGS}
|
||||||
|
CXXFLAGS: ${CXXFLAGS}
|
||||||
|
LDFLAGS: ${LDFLAGS}])
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Stephen Groat <stephen@groat.us>
|
||||||
|
# Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -52,7 +54,7 @@ clean-local-check:
|
|||||||
$(RM) xmlwf.1
|
$(RM) xmlwf.1
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
expat.png \
|
ok.min.css \
|
||||||
reference.html \
|
reference.html \
|
||||||
style.css \
|
style.css \
|
||||||
valid-xhtml10.png \
|
valid-xhtml10.png \
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,9 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Stephen Groat <stephen@groat.us>
|
||||||
|
# Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -193,7 +195,11 @@ am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in
|
|||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -203,8 +209,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -220,7 +227,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -233,6 +248,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -262,6 +279,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -272,6 +292,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -309,6 +330,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -319,7 +341,7 @@ top_builddir = @top_builddir@
|
|||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
@WITH_DOCBOOK_TRUE@dist_man_MANS = xmlwf.1
|
@WITH_DOCBOOK_TRUE@dist_man_MANS = xmlwf.1
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
expat.png \
|
ok.min.css \
|
||||||
reference.html \
|
reference.html \
|
||||||
style.css \
|
style.css \
|
||||||
valid-xhtml10.png \
|
valid-xhtml10.png \
|
||||||
@ -413,7 +435,6 @@ ctags CTAGS:
|
|||||||
cscope cscopelist:
|
cscope cscopelist:
|
||||||
|
|
||||||
@WITH_DOCBOOK_TRUE@dist-hook:
|
@WITH_DOCBOOK_TRUE@dist-hook:
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
|
BIN
doc/expat.png
BIN
doc/expat.png
Binary file not shown.
Before Width: | Height: | Size: 1.0 KiB |
2
doc/ok.min.css
vendored
Normal file
2
doc/ok.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -3,26 +3,55 @@
|
|||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<!-- Copyright 1999,2000 Clark Cooper <coopercc@netheaven.com>
|
<!--
|
||||||
All rights reserved.
|
__ __ _
|
||||||
This is free software. You may distribute or modify according to
|
___\ \/ /_ __ __ _| |_
|
||||||
the terms of the MIT/X License -->
|
/ _ \\ /| '_ \ / _` | __|
|
||||||
|
| __// \| |_) | (_| | |_
|
||||||
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|
|_| XML parser
|
||||||
|
|
||||||
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2000-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2012 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2017-2022 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Jakub Wilk <jwilk@jwilk.net>
|
||||||
|
Copyright (c) 2021 Tomas Korbar <tkorbar@redhat.com>
|
||||||
|
Copyright (c) 2021 Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
|
||||||
|
Licensed under the MIT license:
|
||||||
|
|
||||||
|
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.
|
||||||
|
-->
|
||||||
<title>Expat XML Parser</title>
|
<title>Expat XML Parser</title>
|
||||||
<meta name="author" content="Clark Cooper, coopercc@netheaven.com" />
|
<meta name="author" content="Clark Cooper, coopercc@netheaven.com" />
|
||||||
<meta http-equiv="Content-Style-Type" content="text/css" />
|
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||||
|
<link href="ok.min.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="style.css" rel="stylesheet" type="text/css" />
|
<link href="style.css" rel="stylesheet" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<table cellspacing="0" cellpadding="0" width="100%">
|
<div>
|
||||||
<tr>
|
<h1>
|
||||||
<td class="corner"><img src="expat.png" alt="(Expat logo)" /></td>
|
The Expat XML Parser
|
||||||
<td class="banner"><h1>The Expat XML Parser</h1></td>
|
<small>Release 2.4.3</small>
|
||||||
</tr>
|
</h1>
|
||||||
<tr>
|
</div>
|
||||||
<td class="releaseno">Release 2.0.1</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
||||||
<p>Expat is a library, written in C, for parsing XML documents. It's
|
<p>Expat is a library, written in C, for parsing XML documents. It's
|
||||||
@ -120,6 +149,13 @@ interface.</p>
|
|||||||
<li><a href="#XML_GetInputContext">XML_GetInputContext</a></li>
|
<li><a href="#XML_GetInputContext">XML_GetInputContext</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#billion-laughs">Billion Laughs Attack Protection</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#XML_SetBillionLaughsAttackProtectionMaximumAmplification">XML_SetBillionLaughsAttackProtectionMaximumAmplification</a></li>
|
||||||
|
<li><a href="#XML_SetBillionLaughsAttackProtectionActivationThreshold">XML_SetBillionLaughsAttackProtectionActivationThreshold</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
<li><a href="#miscellaneous">Miscellaneous Functions</a>
|
<li><a href="#miscellaneous">Miscellaneous Functions</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#XML_SetUserData">XML_SetUserData</a></li>
|
<li><a href="#XML_SetUserData">XML_SetUserData</a></li>
|
||||||
@ -900,7 +936,8 @@ whether the parse can be resumed in the future.</p>
|
|||||||
|
|
||||||
<h3><a name="creation">Parser Creation</a></h3>
|
<h3><a name="creation">Parser Creation</a></h3>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ParserCreate">
|
<h4 id="XML_ParserCreate">XML_ParserCreate</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Parser XMLCALL
|
XML_Parser XMLCALL
|
||||||
XML_ParserCreate(const XML_Char *encoding);
|
XML_ParserCreate(const XML_Char *encoding);
|
||||||
</pre>
|
</pre>
|
||||||
@ -917,7 +954,8 @@ encoding declaration. There are four built-in encodings:
|
|||||||
Any other value will invoke a call to the UnknownEncodingHandler.
|
Any other value will invoke a call to the UnknownEncodingHandler.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ParserCreateNS">
|
<h4 id="XML_ParserCreateNS">XML_ParserCreateNS</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Parser XMLCALL
|
XML_Parser XMLCALL
|
||||||
XML_ParserCreateNS(const XML_Char *encoding,
|
XML_ParserCreateNS(const XML_Char *encoding,
|
||||||
XML_Char sep);
|
XML_Char sep);
|
||||||
@ -936,7 +974,8 @@ the local part will be concatenated without any separator - this is intended
|
|||||||
to support RDF processors. It is a programming error to use the null separator
|
to support RDF processors. It is a programming error to use the null separator
|
||||||
with <a href= "#XML_SetReturnNSTriplet">namespace triplets</a>.</div>
|
with <a href= "#XML_SetReturnNSTriplet">namespace triplets</a>.</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ParserCreate_MM">
|
<h4 id="XML_ParserCreate_MM">XML_ParserCreate_MM</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Parser XMLCALL
|
XML_Parser XMLCALL
|
||||||
XML_ParserCreate_MM(const XML_Char *encoding,
|
XML_ParserCreate_MM(const XML_Char *encoding,
|
||||||
const XML_Memory_Handling_Suite *ms,
|
const XML_Memory_Handling_Suite *ms,
|
||||||
@ -958,7 +997,8 @@ and the character pointed at by sep is used as the separator between
|
|||||||
the namespace URI and the local part of the name.</p>
|
the namespace URI and the local part of the name.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ExternalEntityParserCreate">
|
<h4 id="XML_ExternalEntityParserCreate">XML_ExternalEntityParserCreate</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Parser XMLCALL
|
XML_Parser XMLCALL
|
||||||
XML_ExternalEntityParserCreate(XML_Parser p,
|
XML_ExternalEntityParserCreate(XML_Parser p,
|
||||||
const XML_Char *context,
|
const XML_Char *context,
|
||||||
@ -974,7 +1014,8 @@ changing functions on this parser (unless you want it to act
|
|||||||
differently than the parent parser).
|
differently than the parent parser).
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ParserFree">
|
<h4 id="XML_ParserFree">XML_ParserFree</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_ParserFree(XML_Parser p);
|
XML_ParserFree(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -983,7 +1024,8 @@ Free memory used by the parser. Your application is responsible for
|
|||||||
freeing any memory associated with <a href="#userdata">user data</a>.
|
freeing any memory associated with <a href="#userdata">user data</a>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ParserReset">
|
<h4 id="XML_ParserReset">XML_ParserReset</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Bool XMLCALL
|
XML_Bool XMLCALL
|
||||||
XML_ParserReset(XML_Parser p,
|
XML_ParserReset(XML_Parser p,
|
||||||
const XML_Char *encoding);
|
const XML_Char *encoding);
|
||||||
@ -1014,7 +1056,7 @@ if they apply to the parser created by
|
|||||||
<code><a href= "#XML_ExternalEntityParserCreate"
|
<code><a href= "#XML_ExternalEntityParserCreate"
|
||||||
>XML_ExternalEntityParserCreate</a></code>.</p>
|
>XML_ExternalEntityParserCreate</a></code>.</p>
|
||||||
|
|
||||||
<p>Note: the <code>len</code> argument passed to these functions
|
<p>Note: The <code>len</code> argument passed to these functions
|
||||||
should be considerably less than the maximum value for an integer,
|
should be considerably less than the maximum value for an integer,
|
||||||
as it could create an integer overflow situation if the added
|
as it could create an integer overflow situation if the added
|
||||||
lengths of a buffer and the unprocessed portion of the previous buffer
|
lengths of a buffer and the unprocessed portion of the previous buffer
|
||||||
@ -1022,7 +1064,8 @@ exceed the maximum integer value. Input data at the end of a buffer
|
|||||||
will remain unprocessed if it is part of an XML token for which the
|
will remain unprocessed if it is part of an XML token for which the
|
||||||
end is not part of that buffer.</p>
|
end is not part of that buffer.</p>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_Parse">
|
<h4 id="XML_Parse">XML_Parse</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Status XMLCALL
|
enum XML_Status XMLCALL
|
||||||
XML_Parse(XML_Parser p,
|
XML_Parse(XML_Parser p,
|
||||||
const char *s,
|
const char *s,
|
||||||
@ -1049,7 +1092,8 @@ If a parse error occurred, it returns <code>XML_STATUS_ERROR</code>.
|
|||||||
Otherwise it returns <code>XML_STATUS_OK</code> value.
|
Otherwise it returns <code>XML_STATUS_OK</code> value.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ParseBuffer">
|
<h4 id="XML_ParseBuffer">XML_ParseBuffer</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Status XMLCALL
|
enum XML_Status XMLCALL
|
||||||
XML_ParseBuffer(XML_Parser p,
|
XML_ParseBuffer(XML_Parser p,
|
||||||
int len,
|
int len,
|
||||||
@ -1063,7 +1107,8 @@ buffer from Expat with the <code><a href= "#XML_GetBuffer"
|
|||||||
copying of the input.
|
copying of the input.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetBuffer">
|
<h4 id="XML_GetBuffer">XML_GetBuffer</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void * XMLCALL
|
void * XMLCALL
|
||||||
XML_GetBuffer(XML_Parser p,
|
XML_GetBuffer(XML_Parser p,
|
||||||
int len);
|
int len);
|
||||||
@ -1071,7 +1116,8 @@ XML_GetBuffer(XML_Parser p,
|
|||||||
<div class="fcndef">
|
<div class="fcndef">
|
||||||
Obtain a buffer of size <code>len</code> to read a piece of the document
|
Obtain a buffer of size <code>len</code> to read a piece of the document
|
||||||
into. A NULL value is returned if Expat can't allocate enough memory for
|
into. A NULL value is returned if Expat can't allocate enough memory for
|
||||||
this buffer. This has to be called prior to every call to
|
this buffer. A NULL value may also be returned if <code>len</code> is zero.
|
||||||
|
This has to be called prior to every call to
|
||||||
<code><a href= "#XML_ParseBuffer" >XML_ParseBuffer</a></code>. A
|
<code><a href= "#XML_ParseBuffer" >XML_ParseBuffer</a></code>. A
|
||||||
typical use would look like this:
|
typical use would look like this:
|
||||||
|
|
||||||
@ -1098,7 +1144,8 @@ for (;;) {
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_StopParser">
|
<h4 id="XML_StopParser">XML_StopParser</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Status XMLCALL
|
enum XML_Status XMLCALL
|
||||||
XML_StopParser(XML_Parser p,
|
XML_StopParser(XML_Parser p,
|
||||||
XML_Bool resumable);
|
XML_Bool resumable);
|
||||||
@ -1111,7 +1158,7 @@ XML_StopParser(XML_Parser p,
|
|||||||
call-back handler, except when aborting (when <code>resumable</code>
|
call-back handler, except when aborting (when <code>resumable</code>
|
||||||
is <code>XML_FALSE</code>) an already suspended parser. Some
|
is <code>XML_FALSE</code>) an already suspended parser. Some
|
||||||
call-backs may still follow because they would otherwise get
|
call-backs may still follow because they would otherwise get
|
||||||
lost, including
|
lost, including</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li> the end element handler for empty elements when stopped in the
|
<li> the end element handler for empty elements when stopped in the
|
||||||
start element handler,</li>
|
start element handler,</li>
|
||||||
@ -1120,7 +1167,7 @@ lost, including
|
|||||||
<li> the character data handler when stopped in the character data handler
|
<li> the character data handler when stopped in the character data handler
|
||||||
while making multiple call-backs on a contiguous chunk of characters,</li>
|
while making multiple call-backs on a contiguous chunk of characters,</li>
|
||||||
</ul>
|
</ul>
|
||||||
and possibly others.</p>
|
<p>and possibly others.</p>
|
||||||
|
|
||||||
<p>This can be called from most handlers, including DTD related
|
<p>This can be called from most handlers, including DTD related
|
||||||
call-backs, except when parsing an external parameter entity and
|
call-backs, except when parsing an external parameter entity and
|
||||||
@ -1166,7 +1213,8 @@ implementation of that handler to call <code><a href=
|
|||||||
<p>New in Expat 1.95.8.</p>
|
<p>New in Expat 1.95.8.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ResumeParser">
|
<h4 id="XML_ResumeParser">XML_ResumeParser</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Status XMLCALL
|
enum XML_Status XMLCALL
|
||||||
XML_ResumeParser(XML_Parser p);
|
XML_ResumeParser(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1191,7 +1239,8 @@ appropriate moment.</p>
|
|||||||
<p>New in Expat 1.95.8.</p>
|
<p>New in Expat 1.95.8.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetParsingStatus">
|
<h4 id="XML_GetParsingStatus">XML_GetParsingStatus</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_GetParsingStatus(XML_Parser p,
|
XML_GetParsingStatus(XML_Parser p,
|
||||||
XML_ParsingStatus *status);
|
XML_ParsingStatus *status);
|
||||||
@ -1240,7 +1289,8 @@ Note that you'll receive them in this form independent of the original
|
|||||||
encoding of the document.</p>
|
encoding of the document.</p>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetStartElementHandler">
|
<h4 id="XML_SetStartElementHandler">XML_SetStartElementHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetStartElementHandler(XML_Parser p,
|
XML_SetStartElementHandler(XML_Parser p,
|
||||||
XML_StartElementHandler start);
|
XML_StartElementHandler start);
|
||||||
@ -1261,7 +1311,8 @@ by a null pointer.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetEndElementHandler">
|
<h4 id="XML_SetEndElementHandler">XML_SetEndElementHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetEndElementHandler(XML_Parser p,
|
XML_SetEndElementHandler(XML_Parser p,
|
||||||
XML_EndElementHandler);
|
XML_EndElementHandler);
|
||||||
@ -1276,7 +1327,8 @@ generates a call to both start and end handlers.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetElementHandler">
|
<h4 id="XML_SetElementHandler">XML_SetElementHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetElementHandler(XML_Parser p,
|
XML_SetElementHandler(XML_Parser p,
|
||||||
XML_StartElementHandler start,
|
XML_StartElementHandler start,
|
||||||
@ -1286,7 +1338,8 @@ XML_SetElementHandler(XML_Parser p,
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetCharacterDataHandler">
|
<h4 id="XML_SetCharacterDataHandler">XML_SetCharacterDataHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetCharacterDataHandler(XML_Parser p,
|
XML_SetCharacterDataHandler(XML_Parser p,
|
||||||
XML_CharacterDataHandler charhndl)
|
XML_CharacterDataHandler charhndl)
|
||||||
@ -1298,7 +1351,7 @@ typedef void
|
|||||||
int len);
|
int len);
|
||||||
</pre>
|
</pre>
|
||||||
<p>Set a text handler. The string your handler receives
|
<p>Set a text handler. The string your handler receives
|
||||||
is <em>NOT nul-terminated</em>. You have to use the length argument
|
is <em>NOT null-terminated</em>. You have to use the length argument
|
||||||
to deal with the end of the string. A single block of contiguous text
|
to deal with the end of the string. A single block of contiguous text
|
||||||
free of markup may still result in a sequence of calls to this handler.
|
free of markup may still result in a sequence of calls to this handler.
|
||||||
In other words, if you're searching for a pattern in the text, it may
|
In other words, if you're searching for a pattern in the text, it may
|
||||||
@ -1309,7 +1362,8 @@ will continue calling back until the end of the block is reached.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetProcessingInstructionHandler">
|
<h4 id="XML_SetProcessingInstructionHandler">XML_SetProcessingInstructionHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetProcessingInstructionHandler(XML_Parser p,
|
XML_SetProcessingInstructionHandler(XML_Parser p,
|
||||||
XML_ProcessingInstructionHandler proc)
|
XML_ProcessingInstructionHandler proc)
|
||||||
@ -1327,7 +1381,8 @@ it after skipping all whitespace after the initial word.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetCommentHandler">
|
<h4 id="XML_SetCommentHandler">XML_SetCommentHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetCommentHandler(XML_Parser p,
|
XML_SetCommentHandler(XML_Parser p,
|
||||||
XML_CommentHandler cmnt)
|
XML_CommentHandler cmnt)
|
||||||
@ -1342,7 +1397,8 @@ delimiters.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetStartCdataSectionHandler">
|
<h4 id="XML_SetStartCdataSectionHandler">XML_SetStartCdataSectionHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetStartCdataSectionHandler(XML_Parser p,
|
XML_SetStartCdataSectionHandler(XML_Parser p,
|
||||||
XML_StartCdataSectionHandler start);
|
XML_StartCdataSectionHandler start);
|
||||||
@ -1355,7 +1411,8 @@ typedef void
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetEndCdataSectionHandler">
|
<h4 id="XML_SetEndCdataSectionHandler">XML_SetEndCdataSectionHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetEndCdataSectionHandler(XML_Parser p,
|
XML_SetEndCdataSectionHandler(XML_Parser p,
|
||||||
XML_EndCdataSectionHandler end);
|
XML_EndCdataSectionHandler end);
|
||||||
@ -1368,7 +1425,8 @@ typedef void
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetCdataSectionHandler">
|
<h4 id="XML_SetCdataSectionHandler">XML_SetCdataSectionHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetCdataSectionHandler(XML_Parser p,
|
XML_SetCdataSectionHandler(XML_Parser p,
|
||||||
XML_StartCdataSectionHandler start,
|
XML_StartCdataSectionHandler start,
|
||||||
@ -1378,7 +1436,8 @@ XML_SetCdataSectionHandler(XML_Parser p,
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetDefaultHandler">
|
<h4 id="XML_SetDefaultHandler">XML_SetDefaultHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetDefaultHandler(XML_Parser p,
|
XML_SetDefaultHandler(XML_Parser p,
|
||||||
XML_DefaultHandler hndl)
|
XML_DefaultHandler hndl)
|
||||||
@ -1409,7 +1468,8 @@ href="#XML_DefaultCurrent">XML_DefaultCurrent</a></code>.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetDefaultHandlerExpand">
|
<h4 id="XML_SetDefaultHandlerExpand">XML_SetDefaultHandlerExpand</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetDefaultHandlerExpand(XML_Parser p,
|
XML_SetDefaultHandlerExpand(XML_Parser p,
|
||||||
XML_DefaultHandler hndl)
|
XML_DefaultHandler hndl)
|
||||||
@ -1429,7 +1489,8 @@ href="#XML_DefaultCurrent">XML_DefaultCurrent</a></code>.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetExternalEntityRefHandler">
|
<h4 id="XML_SetExternalEntityRefHandler">XML_SetExternalEntityRefHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetExternalEntityRefHandler(XML_Parser p,
|
XML_SetExternalEntityRefHandler(XML_Parser p,
|
||||||
XML_ExternalEntityRefHandler hndl)
|
XML_ExternalEntityRefHandler hndl)
|
||||||
@ -1482,7 +1543,8 @@ parser, the body of the external entity can be recursively parsed.</p>
|
|||||||
information into global or static variables.</p>
|
information into global or static variables.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetExternalEntityRefHandlerArg">
|
<h4 id="XML_SetExternalEntityRefHandlerArg">XML_SetExternalEntityRefHandlerArg</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetExternalEntityRefHandlerArg(XML_Parser p,
|
XML_SetExternalEntityRefHandlerArg(XML_Parser p,
|
||||||
void *arg)
|
void *arg)
|
||||||
@ -1508,7 +1570,8 @@ properly.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetSkippedEntityHandler">
|
<h4 id="XML_SetSkippedEntityHandler">XML_SetSkippedEntityHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetSkippedEntityHandler(XML_Parser p,
|
XML_SetSkippedEntityHandler(XML_Parser p,
|
||||||
XML_SkippedEntityHandler handler)
|
XML_SkippedEntityHandler handler)
|
||||||
@ -1528,14 +1591,15 @@ typedef void
|
|||||||
has been called.</li>
|
has been called.</li>
|
||||||
</ol>
|
</ol>
|
||||||
<p>The <code>is_parameter_entity</code> argument will be non-zero for
|
<p>The <code>is_parameter_entity</code> argument will be non-zero for
|
||||||
a parameter entity and zero for a general entity.</p> <p>Note: skipped
|
a parameter entity and zero for a general entity.</p> <p>Note: Skipped
|
||||||
parameter entities in declarations and skipped general entities in
|
parameter entities in declarations and skipped general entities in
|
||||||
attribute values cannot be reported, because the event would be out of
|
attribute values cannot be reported, because the event would be out of
|
||||||
sync with the reporting of the declarations or attribute values</p>
|
sync with the reporting of the declarations or attribute values</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetUnknownEncodingHandler">
|
<h4 id="XML_SetUnknownEncodingHandler">XML_SetUnknownEncodingHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetUnknownEncodingHandler(XML_Parser p,
|
XML_SetUnknownEncodingHandler(XML_Parser p,
|
||||||
XML_UnknownEncodingHandler enchandler,
|
XML_UnknownEncodingHandler enchandler,
|
||||||
@ -1576,7 +1640,7 @@ call to the function pointed at by convert. This function may return -1
|
|||||||
if the sequence itself is invalid. The convert pointer may be null if
|
if the sequence itself is invalid. The convert pointer may be null if
|
||||||
there are only single byte codes. The data parameter passed to the convert
|
there are only single byte codes. The data parameter passed to the convert
|
||||||
function is the data pointer from <code>XML_Encoding</code>. The
|
function is the data pointer from <code>XML_Encoding</code>. The
|
||||||
string s is <em>NOT</em> nul-terminated and points at the sequence of
|
string s is <em>NOT</em> null-terminated and points at the sequence of
|
||||||
bytes to be converted.</p>
|
bytes to be converted.</p>
|
||||||
|
|
||||||
<p>The function pointed at by <code>release</code> is called by the
|
<p>The function pointed at by <code>release</code> is called by the
|
||||||
@ -1584,7 +1648,8 @@ parser when it is finished with the encoding. It may be NULL.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetStartNamespaceDeclHandler">
|
<h4 id="XML_SetStartNamespaceDeclHandler">XML_SetStartNamespaceDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetStartNamespaceDeclHandler(XML_Parser p,
|
XML_SetStartNamespaceDeclHandler(XML_Parser p,
|
||||||
XML_StartNamespaceDeclHandler start);
|
XML_StartNamespaceDeclHandler start);
|
||||||
@ -1602,7 +1667,8 @@ in that start tag.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetEndNamespaceDeclHandler">
|
<h4 id="XML_SetEndNamespaceDeclHandler">XML_SetEndNamespaceDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetEndNamespaceDeclHandler(XML_Parser p,
|
XML_SetEndNamespaceDeclHandler(XML_Parser p,
|
||||||
XML_EndNamespaceDeclHandler end);
|
XML_EndNamespaceDeclHandler end);
|
||||||
@ -1619,7 +1685,8 @@ namespace was declared.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetNamespaceDeclHandler">
|
<h4 id="XML_SetNamespaceDeclHandler">XML_SetNamespaceDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetNamespaceDeclHandler(XML_Parser p,
|
XML_SetNamespaceDeclHandler(XML_Parser p,
|
||||||
XML_StartNamespaceDeclHandler start,
|
XML_StartNamespaceDeclHandler start,
|
||||||
@ -1629,7 +1696,8 @@ XML_SetNamespaceDeclHandler(XML_Parser p,
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetXmlDeclHandler">
|
<h4 id="XML_SetXmlDeclHandler">XML_SetXmlDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetXmlDeclHandler(XML_Parser p,
|
XML_SetXmlDeclHandler(XML_Parser p,
|
||||||
XML_XmlDeclHandler xmldecl);
|
XML_XmlDeclHandler xmldecl);
|
||||||
@ -1652,7 +1720,8 @@ that it was given as yes.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetStartDoctypeDeclHandler">
|
<h4 id="XML_SetStartDoctypeDeclHandler">XML_SetStartDoctypeDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetStartDoctypeDeclHandler(XML_Parser p,
|
XML_SetStartDoctypeDeclHandler(XML_Parser p,
|
||||||
XML_StartDoctypeDeclHandler start);
|
XML_StartDoctypeDeclHandler start);
|
||||||
@ -1672,7 +1741,8 @@ will be non-zero if the DOCTYPE declaration has an internal subset.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetEndDoctypeDeclHandler">
|
<h4 id="XML_SetEndDoctypeDeclHandler">XML_SetEndDoctypeDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetEndDoctypeDeclHandler(XML_Parser p,
|
XML_SetEndDoctypeDeclHandler(XML_Parser p,
|
||||||
XML_EndDoctypeDeclHandler end);
|
XML_EndDoctypeDeclHandler end);
|
||||||
@ -1686,7 +1756,8 @@ after parsing any external subset.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetDoctypeDeclHandler">
|
<h4 id="XML_SetDoctypeDeclHandler">XML_SetDoctypeDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetDoctypeDeclHandler(XML_Parser p,
|
XML_SetDoctypeDeclHandler(XML_Parser p,
|
||||||
XML_StartDoctypeDeclHandler start,
|
XML_StartDoctypeDeclHandler start,
|
||||||
@ -1696,7 +1767,8 @@ XML_SetDoctypeDeclHandler(XML_Parser p,
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetElementDeclHandler">
|
<h4 id="XML_SetElementDeclHandler">XML_SetElementDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetElementDeclHandler(XML_Parser p,
|
XML_SetElementDeclHandler(XML_Parser p,
|
||||||
XML_ElementDeclHandler eldecl);
|
XML_ElementDeclHandler eldecl);
|
||||||
@ -1768,7 +1840,8 @@ or sequence and <code>children</code> points to the nodes.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetAttlistDeclHandler">
|
<h4 id="XML_SetAttlistDeclHandler">XML_SetAttlistDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetAttlistDeclHandler(XML_Parser p,
|
XML_SetAttlistDeclHandler(XML_Parser p,
|
||||||
XML_AttlistDeclHandler attdecl);
|
XML_AttlistDeclHandler attdecl);
|
||||||
@ -1801,7 +1874,8 @@ in the <code>dflt</code> parameter.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetEntityDeclHandler">
|
<h4 id="XML_SetEntityDeclHandler">XML_SetEntityDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetEntityDeclHandler(XML_Parser p,
|
XML_SetEntityDeclHandler(XML_Parser p,
|
||||||
XML_EntityDeclHandler handler);
|
XML_EntityDeclHandler handler);
|
||||||
@ -1835,7 +1909,8 @@ declarations.</p>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetUnparsedEntityDeclHandler">
|
<h4 id="XML_SetUnparsedEntityDeclHandler">XML_SetUnparsedEntityDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetUnparsedEntityDeclHandler(XML_Parser p,
|
XML_SetUnparsedEntityDeclHandler(XML_Parser p,
|
||||||
XML_UnparsedEntityDeclHandler h)
|
XML_UnparsedEntityDeclHandler h)
|
||||||
@ -1861,7 +1936,8 @@ compatibility. Use instead <a href= "#XML_SetEntityDeclHandler"
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetNotationDeclHandler">
|
<h4 id="XML_SetNotationDeclHandler">XML_SetNotationDeclHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetNotationDeclHandler(XML_Parser p,
|
XML_SetNotationDeclHandler(XML_Parser p,
|
||||||
XML_NotationDeclHandler h)
|
XML_NotationDeclHandler h)
|
||||||
@ -1878,7 +1954,8 @@ typedef void
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="handler">
|
<div class="handler">
|
||||||
<pre class="setter" id="XML_SetNotStandaloneHandler">
|
<h4 id="XML_SetNotStandaloneHandler">XML_SetNotStandaloneHandler</h4>
|
||||||
|
<pre class="setter">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetNotStandaloneHandler(XML_Parser p,
|
XML_SetNotStandaloneHandler(XML_Parser p,
|
||||||
XML_NotStandaloneHandler h)
|
XML_NotStandaloneHandler h)
|
||||||
@ -1904,7 +1981,7 @@ of errors. The position reported is the byte position (in the original
|
|||||||
document or entity encoding) of the first of the sequence of
|
document or entity encoding) of the first of the sequence of
|
||||||
characters that generated the current event (or the error that caused
|
characters that generated the current event (or the error that caused
|
||||||
the parse functions to return <code>XML_STATUS_ERROR</code>.) The
|
the parse functions to return <code>XML_STATUS_ERROR</code>.) The
|
||||||
exceptions are callbacks trigged by declarations in the document
|
exceptions are callbacks triggered by declarations in the document
|
||||||
prologue, in which case they exact position reported is somewhere in the
|
prologue, in which case they exact position reported is somewhere in the
|
||||||
relevant markup, but not necessarily as meaningful as for other
|
relevant markup, but not necessarily as meaningful as for other
|
||||||
events.</p>
|
events.</p>
|
||||||
@ -1913,7 +1990,8 @@ events.</p>
|
|||||||
DTD. In other words, they usually return bogus information when
|
DTD. In other words, they usually return bogus information when
|
||||||
called from within a DTD declaration handler.</p>
|
called from within a DTD declaration handler.</p>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetErrorCode">
|
<h4 id="XML_GetErrorCode">XML_GetErrorCode</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Error XMLCALL
|
enum XML_Error XMLCALL
|
||||||
XML_GetErrorCode(XML_Parser p);
|
XML_GetErrorCode(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1921,7 +1999,8 @@ XML_GetErrorCode(XML_Parser p);
|
|||||||
Return what type of error has occurred.
|
Return what type of error has occurred.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ErrorString">
|
<h4 id="XML_ErrorString">XML_ErrorString</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
const XML_LChar * XMLCALL
|
const XML_LChar * XMLCALL
|
||||||
XML_ErrorString(enum XML_Error code);
|
XML_ErrorString(enum XML_Error code);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1931,7 +2010,8 @@ The code should be one of the enums that can be returned from
|
|||||||
<code><a href= "#XML_GetErrorCode" >XML_GetErrorCode</a></code>.
|
<code><a href= "#XML_GetErrorCode" >XML_GetErrorCode</a></code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetCurrentByteIndex">
|
<h4 id="XML_GetCurrentByteIndex">XML_GetCurrentByteIndex</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Index XMLCALL
|
XML_Index XMLCALL
|
||||||
XML_GetCurrentByteIndex(XML_Parser p);
|
XML_GetCurrentByteIndex(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1942,7 +2022,8 @@ the values returned by <code><a href= "#XML_GetCurrentLineNumber"
|
|||||||
"#XML_GetCurrentColumnNumber" >XML_GetCurrentColumnNumber</a></code>.
|
"#XML_GetCurrentColumnNumber" >XML_GetCurrentColumnNumber</a></code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetCurrentLineNumber">
|
<h4 id="XML_GetCurrentLineNumber">XML_GetCurrentLineNumber</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Size XMLCALL
|
XML_Size XMLCALL
|
||||||
XML_GetCurrentLineNumber(XML_Parser p);
|
XML_GetCurrentLineNumber(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1951,7 +2032,8 @@ Return the line number of the position. The first line is reported as
|
|||||||
<code>1</code>.
|
<code>1</code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetCurrentColumnNumber">
|
<h4 id="XML_GetCurrentColumnNumber">XML_GetCurrentColumnNumber</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_Size XMLCALL
|
XML_Size XMLCALL
|
||||||
XML_GetCurrentColumnNumber(XML_Parser p);
|
XML_GetCurrentColumnNumber(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1960,7 +2042,8 @@ Return the offset, from the beginning of the current line, of
|
|||||||
the position.
|
the position.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetCurrentByteCount">
|
<h4 id="XML_GetCurrentByteCount">XML_GetCurrentByteCount</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
int XMLCALL
|
int XMLCALL
|
||||||
XML_GetCurrentByteCount(XML_Parser p);
|
XML_GetCurrentByteCount(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -1972,7 +2055,8 @@ be used to distinguish empty-element tags from empty elements using
|
|||||||
separate start and end tags).
|
separate start and end tags).
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetInputContext">
|
<h4 id="XML_GetInputContext">XML_GetInputContext</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
const char * XMLCALL
|
const char * XMLCALL
|
||||||
XML_GetInputContext(XML_Parser p,
|
XML_GetInputContext(XML_Parser p,
|
||||||
int *offset,
|
int *offset,
|
||||||
@ -1998,12 +2082,105 @@ parse position may be before the beginning of the buffer.</p>
|
|||||||
return NULL.</p>
|
return NULL.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h3><a name="billion-laughs">Billion Laughs Attack Protection</a></h3>
|
||||||
|
|
||||||
|
<p>The functions in this section configure the built-in
|
||||||
|
protection against various forms of
|
||||||
|
<a href="https://en.wikipedia.org/wiki/Billion_laughs_attack">billion laughs attacks</a>.</p>
|
||||||
|
|
||||||
|
<h4 id="XML_SetBillionLaughsAttackProtectionMaximumAmplification">XML_SetBillionLaughsAttackProtectionMaximumAmplification</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
|
/* Added in Expat 2.4.0. */
|
||||||
|
XML_Bool XMLCALL
|
||||||
|
XML_SetBillionLaughsAttackProtectionMaximumAmplification(XML_Parser p,
|
||||||
|
float maximumAmplificationFactor);
|
||||||
|
</pre>
|
||||||
|
<div class="fcndef">
|
||||||
|
<p>
|
||||||
|
Sets the maximum tolerated amplification factor
|
||||||
|
for protection against
|
||||||
|
<a href="https://en.wikipedia.org/wiki/Billion_laughs_attack">billion laughs attacks</a>
|
||||||
|
(default: <code>100.0</code>)
|
||||||
|
of parser <code>p</code> to <code>maximumAmplificationFactor</code>, and
|
||||||
|
returns <code>XML_TRUE</code> upon success and <code>XML_FALSE</code> upon error.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
The amplification factor is calculated as ..
|
||||||
|
<pre>
|
||||||
|
amplification := (direct + indirect) / direct
|
||||||
|
</pre>
|
||||||
|
.. while parsing, whereas
|
||||||
|
<code>direct</code> is the number of bytes read from the primary document in parsing and
|
||||||
|
<code>indirect</code> is the number of bytes added by expanding entities and reading of external DTD files, combined.
|
||||||
|
|
||||||
|
<p>For a call to <code>XML_SetBillionLaughsAttackProtectionMaximumAmplification</code> to succeed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>parser <code>p</code> must be a non-<code>NULL</code> root parser (without any parent parsers) and</li>
|
||||||
|
<li><code>maximumAmplificationFactor</code> must be non-<code>NaN</code> and greater than or equal to <code>1.0</code>.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Note:</strong>
|
||||||
|
If you ever need to increase this value for non-attack payload,
|
||||||
|
please <a href="https://github.com/libexpat/libexpat/issues">file a bug report</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Note:</strong>
|
||||||
|
Peak amplifications
|
||||||
|
of factor 15,000 for the entire payload and
|
||||||
|
of factor 30,000 in the middle of parsing
|
||||||
|
have been observed with small benign files in practice.
|
||||||
|
|
||||||
|
So if you do reduce the maximum allowed amplification,
|
||||||
|
please make sure that the activation threshold is still big enough
|
||||||
|
to not end up with undesired false positives (i.e. benign files being rejected).
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4 id="XML_SetBillionLaughsAttackProtectionActivationThreshold">XML_SetBillionLaughsAttackProtectionActivationThreshold</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
|
/* Added in Expat 2.4.0. */
|
||||||
|
XML_Bool XMLCALL
|
||||||
|
XML_SetBillionLaughsAttackProtectionActivationThreshold(XML_Parser p,
|
||||||
|
unsigned long long activationThresholdBytes);
|
||||||
|
</pre>
|
||||||
|
<div class="fcndef">
|
||||||
|
<p>
|
||||||
|
Sets number of output bytes (including amplification from entity expansion and reading DTD files)
|
||||||
|
needed to activate protection against
|
||||||
|
<a href="https://en.wikipedia.org/wiki/Billion_laughs_attack">billion laughs attacks</a>
|
||||||
|
(default: <code>8 MiB</code>)
|
||||||
|
of parser <code>p</code> to <code>activationThresholdBytes</code>, and
|
||||||
|
returns <code>XML_TRUE</code> upon success and <code>XML_FALSE</code> upon error.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>For a call to <code>XML_SetBillionLaughsAttackProtectionActivationThreshold</code> to succeed:</p>
|
||||||
|
<ul>
|
||||||
|
<li>parser <code>p</code> must be a non-<code>NULL</code> root parser (without any parent parsers).</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Note:</strong>
|
||||||
|
If you ever need to increase this value for non-attack payload,
|
||||||
|
please <a href="https://github.com/libexpat/libexpat/issues">file a bug report</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Note:</strong>
|
||||||
|
Activation thresholds below 4 MiB are known to break support for
|
||||||
|
<a href="https://en.wikipedia.org/wiki/Darwin_Information_Typing_Architecture">DITA</a> 1.3 payload
|
||||||
|
and are hence not recommended.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h3><a name="miscellaneous">Miscellaneous functions</a></h3>
|
<h3><a name="miscellaneous">Miscellaneous functions</a></h3>
|
||||||
|
|
||||||
<p>The functions in this section either obtain state information from
|
<p>The functions in this section either obtain state information from
|
||||||
the parser or can be used to dynamically set parser options.</p>
|
the parser or can be used to dynamically set parser options.</p>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetUserData">
|
<h4 id="XML_SetUserData">XML_SetUserData</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetUserData(XML_Parser p,
|
XML_SetUserData(XML_Parser p,
|
||||||
void *userData);
|
void *userData);
|
||||||
@ -2018,7 +2195,8 @@ the memory associated with it, then you've probably just leaked
|
|||||||
memory.
|
memory.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetUserData">
|
<h4 id="XML_GetUserData">XML_GetUserData</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void * XMLCALL
|
void * XMLCALL
|
||||||
XML_GetUserData(XML_Parser p);
|
XML_GetUserData(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2027,7 +2205,8 @@ This returns the user data pointer that gets passed to handlers.
|
|||||||
It is actually implemented as a macro.
|
It is actually implemented as a macro.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_UseParserAsHandlerArg">
|
<h4 id="XML_UseParserAsHandlerArg">XML_UseParserAsHandlerArg</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_UseParserAsHandlerArg(XML_Parser p);
|
XML_UseParserAsHandlerArg(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2038,7 +2217,8 @@ using the <code><a href= "#XML_GetUserData"
|
|||||||
>XML_GetUserData</a></code> function.
|
>XML_GetUserData</a></code> function.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetBase">
|
<h4 id="XML_SetBase">XML_SetBase</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Status XMLCALL
|
enum XML_Status XMLCALL
|
||||||
XML_SetBase(XML_Parser p,
|
XML_SetBase(XML_Parser p,
|
||||||
const XML_Char *base);
|
const XML_Char *base);
|
||||||
@ -2050,7 +2230,8 @@ there's no memory to store base, otherwise it's
|
|||||||
<code>XML_STATUS_OK</code>.
|
<code>XML_STATUS_OK</code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetBase">
|
<h4 id="XML_GetBase">XML_GetBase</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
const XML_Char * XMLCALL
|
const XML_Char * XMLCALL
|
||||||
XML_GetBase(XML_Parser p);
|
XML_GetBase(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2058,7 +2239,8 @@ XML_GetBase(XML_Parser p);
|
|||||||
Return the base for resolving relative URIs.
|
Return the base for resolving relative URIs.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetSpecifiedAttributeCount">
|
<h4 id="XML_GetSpecifiedAttributeCount">XML_GetSpecifiedAttributeCount</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
int XMLCALL
|
int XMLCALL
|
||||||
XML_GetSpecifiedAttributeCount(XML_Parser p);
|
XML_GetSpecifiedAttributeCount(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2074,7 +2256,8 @@ call to a start handler. If called inside a start handler, then that
|
|||||||
means the current call.
|
means the current call.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetIdAttributeIndex">
|
<h4 id="XML_GetIdAttributeIndex">XML_GetIdAttributeIndex</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
int XMLCALL
|
int XMLCALL
|
||||||
XML_GetIdAttributeIndex(XML_Parser p);
|
XML_GetIdAttributeIndex(XML_Parser p);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2086,7 +2269,8 @@ attribute. If called inside a start handler, then that means the
|
|||||||
current call.
|
current call.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetAttributeInfo">
|
<h4 id="XML_GetAttributeInfo">XML_GetAttributeInfo</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
const XML_AttrInfo * XMLCALL
|
const XML_AttrInfo * XMLCALL
|
||||||
XML_GetAttributeInfo(XML_Parser parser);
|
XML_GetAttributeInfo(XML_Parser parser);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2107,7 +2291,8 @@ as 1; thus the number of entries in the array is
|
|||||||
<code>XML_GetSpecifiedAttributeCount(parser) / 2</code>.
|
<code>XML_GetSpecifiedAttributeCount(parser) / 2</code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetEncoding">
|
<h4 id="XML_SetEncoding">XML_SetEncoding</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Status XMLCALL
|
enum XML_Status XMLCALL
|
||||||
XML_SetEncoding(XML_Parser p,
|
XML_SetEncoding(XML_Parser p,
|
||||||
const XML_Char *encoding);
|
const XML_Char *encoding);
|
||||||
@ -2122,7 +2307,8 @@ Returns <code>XML_STATUS_OK</code> on success or
|
|||||||
<code>XML_STATUS_ERROR</code> on error.
|
<code>XML_STATUS_ERROR</code> on error.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetParamEntityParsing">
|
<h4 id="XML_SetParamEntityParsing">XML_SetParamEntityParsing</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
int XMLCALL
|
int XMLCALL
|
||||||
XML_SetParamEntityParsing(XML_Parser p,
|
XML_SetParamEntityParsing(XML_Parser p,
|
||||||
enum XML_ParamEntityParsing code);
|
enum XML_ParamEntityParsing code);
|
||||||
@ -2142,7 +2328,8 @@ The choices for <code>code</code> are:
|
|||||||
no effect and will always return 0.
|
no effect and will always return 0.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetHashSalt">
|
<h4 id="XML_SetHashSalt">XML_SetHashSalt</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
int XMLCALL
|
int XMLCALL
|
||||||
XML_SetHashSalt(XML_Parser p,
|
XML_SetHashSalt(XML_Parser p,
|
||||||
unsigned long hash_salt);
|
unsigned long hash_salt);
|
||||||
@ -2161,7 +2348,8 @@ that <code>XML_SetHashSalt</code> has <b>not</b> been called. Consequently
|
|||||||
such a call will have no effect, even if it returns 1.</p>
|
such a call will have no effect, even if it returns 1.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_UseForeignDTD">
|
<h4 id="XML_UseForeignDTD">XML_UseForeignDTD</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
enum XML_Error XMLCALL
|
enum XML_Error XMLCALL
|
||||||
XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);
|
XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2198,7 +2386,8 @@ the document had a DTD with an external subset. This holds true even if
|
|||||||
the external entity reference handler returns without action.</p>
|
the external entity reference handler returns without action.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_SetReturnNSTriplet">
|
<h4 id="XML_SetReturnNSTriplet">XML_SetReturnNSTriplet</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_SetReturnNSTriplet(XML_Parser parser,
|
XML_SetReturnNSTriplet(XML_Parser parser,
|
||||||
int do_nst);
|
int do_nst);
|
||||||
@ -2220,7 +2409,8 @@ default manner, URI then local_name separated by the namespace
|
|||||||
separator.</p>
|
separator.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_DefaultCurrent">
|
<h4 id="XML_DefaultCurrent">XML_DefaultCurrent</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_DefaultCurrent(XML_Parser parser);
|
XML_DefaultCurrent(XML_Parser parser);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2234,7 +2424,8 @@ href="#XML_SetDefaultHandler" >XML_SetDefaultHandler</a></code> or
|
|||||||
not a default handler.
|
not a default handler.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ExpatVersion">
|
<h4 id="XML_ExpatVersion">XML_ExpatVersion</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
XML_LChar * XMLCALL
|
XML_LChar * XMLCALL
|
||||||
XML_ExpatVersion();
|
XML_ExpatVersion();
|
||||||
</pre>
|
</pre>
|
||||||
@ -2242,7 +2433,8 @@ XML_ExpatVersion();
|
|||||||
Return the library version as a string (e.g. <code>"expat_1.95.1"</code>).
|
Return the library version as a string (e.g. <code>"expat_1.95.1"</code>).
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_ExpatVersionInfo">
|
<h4 id="XML_ExpatVersionInfo">XML_ExpatVersionInfo</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
struct XML_Expat_Version XMLCALL
|
struct XML_Expat_Version XMLCALL
|
||||||
XML_ExpatVersionInfo();
|
XML_ExpatVersionInfo();
|
||||||
</pre>
|
</pre>
|
||||||
@ -2266,7 +2458,8 @@ Testing these constants is currently the best way to determine if
|
|||||||
particular parts of the Expat API are available.
|
particular parts of the Expat API are available.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_GetFeatureList">
|
<h4 id="XML_GetFeatureList">XML_GetFeatureList</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
const XML_Feature * XMLCALL
|
const XML_Feature * XMLCALL
|
||||||
XML_GetFeatureList();
|
XML_GetFeatureList();
|
||||||
</pre>
|
</pre>
|
||||||
@ -2327,7 +2520,8 @@ time, the following features have been defined to have values:</p>
|
|||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_FreeContentModel">
|
<h4 id="XML_FreeContentModel">XML_FreeContentModel</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_FreeContentModel(XML_Parser parser, XML_Content *model);
|
XML_FreeContentModel(XML_Parser parser, XML_Content *model);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2346,7 +2540,8 @@ applications. This can be essential when using dynamically loaded
|
|||||||
libraries which use different C standard libraries (this can happen on
|
libraries which use different C standard libraries (this can happen on
|
||||||
Windows, at least).</p>
|
Windows, at least).</p>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_MemMalloc">
|
<h4 id="XML_MemMalloc">XML_MemMalloc</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void * XMLCALL
|
void * XMLCALL
|
||||||
XML_MemMalloc(XML_Parser parser, size_t size);
|
XML_MemMalloc(XML_Parser parser, size_t size);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2358,7 +2553,8 @@ way must be freed using <code><a href="#XML_MemFree"
|
|||||||
>XML_MemFree</a></code>.
|
>XML_MemFree</a></code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_MemRealloc">
|
<h4 id="XML_MemRealloc">XML_MemRealloc</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void * XMLCALL
|
void * XMLCALL
|
||||||
XML_MemRealloc(XML_Parser parser, void *ptr, size_t size);
|
XML_MemRealloc(XML_Parser parser, void *ptr, size_t size);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2377,7 +2573,8 @@ original block. Memory allocated in this way must be freed using
|
|||||||
>XML_MemFree</a></code>.
|
>XML_MemFree</a></code>.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre class="fcndec" id="XML_MemFree">
|
<h4 id="XML_MemFree">XML_MemFree</h4>
|
||||||
|
<pre class="fcndec">
|
||||||
void XMLCALL
|
void XMLCALL
|
||||||
XML_MemFree(XML_Parser parser, void *ptr);
|
XML_MemFree(XML_Parser parser, void *ptr);
|
||||||
</pre>
|
</pre>
|
||||||
@ -2388,9 +2585,12 @@ have been allocated by <code><a href="#XML_MemMalloc"
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
<p><a href="http://validator.w3.org/check/referer"><img
|
|
||||||
src="valid-xhtml10.png" alt="Valid XHTML 1.0!"
|
<div class="footer">
|
||||||
height="31" width="88" class="noborder" /></a></p>
|
Found a bug in the documentation?
|
||||||
|
<a href="https://github.com/libexpat/libexpat/issues">Please file a bug report.</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
134
doc/style.css
134
doc/style.css
@ -1,101 +1,47 @@
|
|||||||
|
/*
|
||||||
|
__ __ _
|
||||||
|
___\ \/ /_ __ __ _| |_
|
||||||
|
/ _ \\ /| '_ \ / _` | __|
|
||||||
|
| __// \| |_) | (_| | |_
|
||||||
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|
|_| XML parser
|
||||||
|
|
||||||
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2000-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Licensed under the MIT license:
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Stop not using half the screen */
|
||||||
body {
|
body {
|
||||||
background-color: white;
|
max-width: none; /* was: 80ch */
|
||||||
border: 0px;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.corner {
|
|
||||||
width: 200px;
|
|
||||||
height: 80px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.banner {
|
|
||||||
background-color: rgb(110,139,61);
|
|
||||||
color: rgb(255,236,176);
|
|
||||||
padding-left: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.banner h1 {
|
|
||||||
font-size: 200%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
padding: 0em 2em 1em 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.releaseno {
|
|
||||||
background-color: rgb(110,139,61);
|
|
||||||
color: rgb(255,236,176);
|
|
||||||
padding-bottom: 0.3em;
|
|
||||||
padding-top: 0.5em;
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noborder {
|
|
||||||
border-width: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg {
|
|
||||||
padding-left: 1em;
|
|
||||||
padding-top: .5em;
|
|
||||||
padding-bottom: .5em;
|
|
||||||
border: solid thin;
|
|
||||||
margin: 1em 0;
|
|
||||||
background-color: tan;
|
|
||||||
margin-left: 2em;
|
|
||||||
margin-right: 10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pseudocode {
|
|
||||||
padding-left: 1em;
|
|
||||||
padding-top: .5em;
|
|
||||||
padding-bottom: .5em;
|
|
||||||
border: solid thin;
|
|
||||||
margin: 1em 0;
|
|
||||||
background-color: rgb(250,220,180);
|
|
||||||
margin-left: 2em;
|
|
||||||
margin-right: 10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.handler {
|
|
||||||
width: 100%;
|
|
||||||
border-top-width: thin;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.handler p {
|
|
||||||
margin-left: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.setter {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.signature {
|
|
||||||
color: navy;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fcndec {
|
|
||||||
width: 100%;
|
|
||||||
border-top-width: thin;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fcndef {
|
|
||||||
margin-left: 2em;
|
|
||||||
margin-bottom: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 2em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.cpp-symbols dt {
|
.cpp-symbols dt {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
}
|
}
|
||||||
.cpp-symbols dd {
|
|
||||||
margin-bottom: 1em;
|
/* Resemble style of <footer> which is not part of xhtml1-strict */
|
||||||
|
.footer {
|
||||||
|
font-size: var(--ok-fs-5);
|
||||||
|
color: var(--ok-tc-1);
|
||||||
}
|
}
|
||||||
|
134
doc/xmlwf.1
134
doc/xmlwf.1
@ -5,7 +5,7 @@
|
|||||||
\\$2 \(la\\$1\(ra\\$3
|
\\$2 \(la\\$1\(ra\\$3
|
||||||
..
|
..
|
||||||
.if \n(.g .mso www.tmac
|
.if \n(.g .mso www.tmac
|
||||||
.TH XMLWF 1 "March 11, 2016" "" ""
|
.TH XMLWF 1 "January 16, 2022" "" ""
|
||||||
.SH NAME
|
.SH NAME
|
||||||
xmlwf \- Determines if an XML document is well-formed
|
xmlwf \- Determines if an XML document is well-formed
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -15,7 +15,27 @@ xmlwf \- Determines if an XML document is well-formed
|
|||||||
\fBxmlwf\fR \kx
|
\fBxmlwf\fR \kx
|
||||||
.if (\nx>(\n(.l/2)) .nr x (\n(.l/5)
|
.if (\nx>(\n(.l/2)) .nr x (\n(.l/5)
|
||||||
'in \n(.iu+\nxu
|
'in \n(.iu+\nxu
|
||||||
[\fB-s\fR] [\fB-n\fR] [\fB-p\fR] [\fB-x\fR] [\fB-e \fIencoding\fB\fR] [\fB-w\fR] [\fB-d \fIoutput-dir\fB\fR] [\fB-c\fR] [\fB-m\fR] [\fB-r\fR] [\fB-t\fR] [\fB-N\fR] [\fB-v\fR] [file ...]
|
[\fIOPTIONS\fR] [\fIFILE\fR ...]
|
||||||
|
'in \n(.iu-\nxu
|
||||||
|
.ad b
|
||||||
|
'hy
|
||||||
|
'nh
|
||||||
|
.fi
|
||||||
|
.ad l
|
||||||
|
\fBxmlwf\fR \kx
|
||||||
|
.if (\nx>(\n(.l/2)) .nr x (\n(.l/5)
|
||||||
|
'in \n(.iu+\nxu
|
||||||
|
\fB-h\fR
|
||||||
|
'in \n(.iu-\nxu
|
||||||
|
.ad b
|
||||||
|
'hy
|
||||||
|
'nh
|
||||||
|
.fi
|
||||||
|
.ad l
|
||||||
|
\fBxmlwf\fR \kx
|
||||||
|
.if (\nx>(\n(.l/2)) .nr x (\n(.l/5)
|
||||||
|
'in \n(.iu+\nxu
|
||||||
|
\fB-v\fR
|
||||||
'in \n(.iu-\nxu
|
'in \n(.iu-\nxu
|
||||||
.ad b
|
.ad b
|
||||||
'hy
|
'hy
|
||||||
@ -34,7 +54,7 @@ following rules:
|
|||||||
\(bu
|
\(bu
|
||||||
The file begins with an XML declaration. For instance,
|
The file begins with an XML declaration. For instance,
|
||||||
\*(T<<?xml version="1.0" standalone="yes"?>\*(T>.
|
\*(T<<?xml version="1.0" standalone="yes"?>\*(T>.
|
||||||
\fINOTE:\fR
|
\fINOTE\fR:
|
||||||
\fBxmlwf\fR does not currently
|
\fBxmlwf\fR does not currently
|
||||||
check for a valid XML declaration.
|
check for a valid XML declaration.
|
||||||
.TP 0.2i
|
.TP 0.2i
|
||||||
@ -62,10 +82,42 @@ it does not check the DTD. However, it does support
|
|||||||
external entities (see the \*(T<\fB\-x\fR\*(T> option).
|
external entities (see the \*(T<\fB\-x\fR\*(T> option).
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
When an option includes an argument, you may specify the argument either
|
When an option includes an argument, you may specify the argument either
|
||||||
separately ("\*(T<\fB\-d\fR\*(T> output") or concatenated with the
|
separately ("\*(T<\fB\-d\fR\*(T> \fIoutput\fR") or concatenated with the
|
||||||
option ("\*(T<\fB\-d\fR\*(T>output"). \fBxmlwf\fR
|
option ("\*(T<\fB\-d\fR\*(T>\fIoutput\fR"). \fBxmlwf\fR
|
||||||
supports both.
|
supports both.
|
||||||
.TP
|
.TP
|
||||||
|
\*(T<\fB\-a\fR\*(T> \fIfactor\fR
|
||||||
|
Sets the maximum tolerated amplification factor
|
||||||
|
for protection against billion laughs attacks (default: 100.0).
|
||||||
|
The amplification factor is calculated as ..
|
||||||
|
|
||||||
|
.nf
|
||||||
|
|
||||||
|
amplification := (direct + indirect) / direct
|
||||||
|
|
||||||
|
.fi
|
||||||
|
|
||||||
|
\&.. while parsing, whereas
|
||||||
|
<direct> is the number of bytes read
|
||||||
|
from the primary document in parsing and
|
||||||
|
<indirect> is the number of bytes
|
||||||
|
added by expanding entities and reading of external DTD files,
|
||||||
|
combined.
|
||||||
|
|
||||||
|
\fINOTE\fR:
|
||||||
|
If you ever need to increase this value for non-attack payload,
|
||||||
|
please file a bug report.
|
||||||
|
.TP
|
||||||
|
\*(T<\fB\-b\fR\*(T> \fIbytes\fR
|
||||||
|
Sets the number of output bytes (including amplification)
|
||||||
|
needed to activate protection against billion laughs attacks
|
||||||
|
(default: 8 MiB).
|
||||||
|
This can be thought of as an "activation threshold".
|
||||||
|
|
||||||
|
\fINOTE\fR:
|
||||||
|
If you ever need to increase this value for non-attack payload,
|
||||||
|
please file a bug report.
|
||||||
|
.TP
|
||||||
\*(T<\fB\-c\fR\*(T>
|
\*(T<\fB\-c\fR\*(T>
|
||||||
If the input file is well-formed and \fBxmlwf\fR
|
If the input file is well-formed and \fBxmlwf\fR
|
||||||
doesn't encounter any errors, the input file is simply copied to
|
doesn't encounter any errors, the input file is simply copied to
|
||||||
@ -73,7 +125,7 @@ the output directory unchanged.
|
|||||||
This implies no namespaces (turns off \*(T<\fB\-n\fR\*(T>) and
|
This implies no namespaces (turns off \*(T<\fB\-n\fR\*(T>) and
|
||||||
requires \*(T<\fB\-d\fR\*(T> to specify an output directory.
|
requires \*(T<\fB\-d\fR\*(T> to specify an output directory.
|
||||||
.TP
|
.TP
|
||||||
\*(T<\fB\-d output\-dir\fR\*(T>
|
\*(T<\fB\-d\fR\*(T> \fIoutput-dir\fR
|
||||||
Specifies a directory to contain transformed
|
Specifies a directory to contain transformed
|
||||||
representations of the input files.
|
representations of the input files.
|
||||||
By default, \*(T<\fB\-d\fR\*(T> outputs a canonical representation
|
By default, \*(T<\fB\-d\fR\*(T> outputs a canonical representation
|
||||||
@ -96,7 +148,7 @@ is treated equivalently to data.
|
|||||||
More on canonical XML can be found at
|
More on canonical XML can be found at
|
||||||
http://www.jclark.com/xml/canonxml.html .
|
http://www.jclark.com/xml/canonxml.html .
|
||||||
.TP
|
.TP
|
||||||
\*(T<\fB\-e encoding\fR\*(T>
|
\*(T<\fB\-e\fR\*(T> \fIencoding\fR
|
||||||
Specifies the character encoding for the document, overriding
|
Specifies the character encoding for the document, overriding
|
||||||
any document encoding declaration. \fBxmlwf\fR
|
any document encoding declaration. \fBxmlwf\fR
|
||||||
supports four built-in encodings:
|
supports four built-in encodings:
|
||||||
@ -106,6 +158,15 @@ supports four built-in encodings:
|
|||||||
\*(T<ISO\-8859\-1\*(T>.
|
\*(T<ISO\-8859\-1\*(T>.
|
||||||
Also see the \*(T<\fB\-w\fR\*(T> option.
|
Also see the \*(T<\fB\-w\fR\*(T> option.
|
||||||
.TP
|
.TP
|
||||||
|
\*(T<\fB\-k\fR\*(T>
|
||||||
|
When processing multiple files, \fBxmlwf\fR
|
||||||
|
by default halts after the the first file with an error.
|
||||||
|
This tells \fBxmlwf\fR to report the error
|
||||||
|
but to keep processing.
|
||||||
|
This can be useful, for example, when testing a filter that converts
|
||||||
|
many files to XML and you want to quickly find out which conversions
|
||||||
|
failed.
|
||||||
|
.TP
|
||||||
\*(T<\fB\-m\fR\*(T>
|
\*(T<\fB\-m\fR\*(T>
|
||||||
Outputs some strange sort of XML file that completely
|
Outputs some strange sort of XML file that completely
|
||||||
describes the input file, including character positions.
|
describes the input file, including character positions.
|
||||||
@ -121,7 +182,7 @@ This matches the example output used by the formal XML test cases.
|
|||||||
Requires \*(T<\fB\-d\fR\*(T> to specify an output file.
|
Requires \*(T<\fB\-d\fR\*(T> to specify an output file.
|
||||||
.TP
|
.TP
|
||||||
\*(T<\fB\-p\fR\*(T>
|
\*(T<\fB\-p\fR\*(T>
|
||||||
Tells xmlwf to process external DTDs and parameter
|
Tells \fBxmlwf\fR to process external DTDs and parameter
|
||||||
entities.
|
entities.
|
||||||
|
|
||||||
Normally \fBxmlwf\fR never parses parameter
|
Normally \fBxmlwf\fR never parses parameter
|
||||||
@ -165,7 +226,7 @@ then exits.
|
|||||||
Enables support for Windows code pages.
|
Enables support for Windows code pages.
|
||||||
Normally, \fBxmlwf\fR will throw an error if it
|
Normally, \fBxmlwf\fR will throw an error if it
|
||||||
runs across an encoding that it is not equipped to handle itself. With
|
runs across an encoding that it is not equipped to handle itself. With
|
||||||
\*(T<\fB\-w\fR\*(T>, xmlwf will try to use a Windows code
|
\*(T<\fB\-w\fR\*(T>, \fBxmlwf\fR will try to use a Windows code
|
||||||
page. See also \*(T<\fB\-e\fR\*(T>.
|
page. See also \*(T<\fB\-e\fR\*(T>.
|
||||||
.TP
|
.TP
|
||||||
\*(T<\fB\-x\fR\*(T>
|
\*(T<\fB\-x\fR\*(T>
|
||||||
@ -210,18 +271,33 @@ will run \fBxmlwf\fR on the file
|
|||||||
Older versions of \fBxmlwf\fR do not support
|
Older versions of \fBxmlwf\fR do not support
|
||||||
reading from standard input.
|
reading from standard input.
|
||||||
.SH OUTPUT
|
.SH OUTPUT
|
||||||
If an input file is not well-formed,
|
\fBxmlwf\fR outputs nothing for files which are problem-free.
|
||||||
\fBxmlwf\fR prints a single line describing
|
If any input file is not well-formed, or if the output for any
|
||||||
the problem to standard output. If a file is well formed,
|
input file cannot be opened, \fBxmlwf\fR prints a single
|
||||||
\fBxmlwf\fR outputs nothing.
|
line describing the problem to standard output.
|
||||||
Note that the result code is \fInot\fR set.
|
|
||||||
.SH BUGS
|
|
||||||
\fBxmlwf\fR returns a 0 - noerr result,
|
|
||||||
even if the file is not well-formed. There is no good way for
|
|
||||||
a program to use \fBxmlwf\fR to quickly
|
|
||||||
check a file -- it must parse \fBxmlwf\fR's
|
|
||||||
standard output.
|
|
||||||
.PP
|
.PP
|
||||||
|
If the \*(T<\fB\-k\fR\*(T> option is not provided, \fBxmlwf\fR
|
||||||
|
halts upon encountering a well-formedness or output-file error.
|
||||||
|
If \*(T<\fB\-k\fR\*(T> is provided, \fBxmlwf\fR continues
|
||||||
|
processing the remaining input files, describing problems found with any of them.
|
||||||
|
.SH "EXIT STATUS"
|
||||||
|
For option \*(T<\fB\-v\fR\*(T> or \*(T<\fB\-h\fR\*(T>, \fBxmlwf\fR always exits with status code 0. For other cases, the following exit status codes are returned:
|
||||||
|
.TP
|
||||||
|
\*(T<\fB0\fR\*(T>
|
||||||
|
The input files are well-formed and the output (if requested) was written successfully.
|
||||||
|
.TP
|
||||||
|
\*(T<\fB1\fR\*(T>
|
||||||
|
An internal error occurred.
|
||||||
|
.TP
|
||||||
|
\*(T<\fB2\fR\*(T>
|
||||||
|
One or more input files were not well-formed or could not be parsed.
|
||||||
|
.TP
|
||||||
|
\*(T<\fB3\fR\*(T>
|
||||||
|
If using the \*(T<\fB\-d\fR\*(T> option, an error occurred opening an output file.
|
||||||
|
.TP
|
||||||
|
\*(T<\fB4\fR\*(T>
|
||||||
|
There was a command-line argument error in how \fBxmlwf\fR was invoked.
|
||||||
|
.SH BUGS
|
||||||
The errors should go to standard error, not standard output.
|
The errors should go to standard error, not standard output.
|
||||||
.PP
|
.PP
|
||||||
There should be a way to get \*(T<\fB\-d\fR\*(T> to send its
|
There should be a way to get \*(T<\fB\-d\fR\*(T> to send its
|
||||||
@ -232,24 +308,16 @@ I have no idea why anyone would want to use the
|
|||||||
\*(T<\fB\-d\fR\*(T>, \*(T<\fB\-c\fR\*(T>, and
|
\*(T<\fB\-d\fR\*(T>, \*(T<\fB\-c\fR\*(T>, and
|
||||||
\*(T<\fB\-m\fR\*(T> options. If someone could explain it to
|
\*(T<\fB\-m\fR\*(T> options. If someone could explain it to
|
||||||
me, I'd like to add this information to this manpage.
|
me, I'd like to add this information to this manpage.
|
||||||
.SH ALTERNATIVES
|
|
||||||
Here are some XML validators on the web:
|
|
||||||
|
|
||||||
.nf
|
|
||||||
|
|
||||||
http://www.hcrc.ed.ac.uk/~richard/xml\-check.html
|
|
||||||
http://www.stg.brown.edu/service/xmlvalid/
|
|
||||||
http://www.scripting.com/frontier5/xml/code/xmlValidator.html
|
|
||||||
http://www.xml.com/pub/a/tools/ruwf/check.html
|
|
||||||
.fi
|
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.nf
|
.nf
|
||||||
|
|
||||||
The Expat home page: http://www.libexpat.org/
|
The Expat home page: https://libexpat.github.io/
|
||||||
The W3 XML specification: http://www.w3.org/TR/REC\-xml
|
The W3 XML 1.0 specification (fourth edition): https://www.w3.org/TR/2006/REC\-xml\-20060816/
|
||||||
|
Billion laughs attack: https://en.wikipedia.org/wiki/Billion_laughs_attack
|
||||||
.fi
|
.fi
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
This manual page was written by Scott Bronson <\*(T<bronson@rinspin.com\*(T>> for
|
This manual page was originally written by Scott Bronson <\*(T<bronson@rinspin.com\*(T>>
|
||||||
|
in December 2001 for
|
||||||
the Debian GNU/Linux system (but may be used by others). Permission is
|
the Debian GNU/Linux system (but may be used by others). Permission is
|
||||||
granted to copy, distribute and/or modify this document under
|
granted to copy, distribute and/or modify this document under
|
||||||
the terms of the GNU Free Documentation
|
the terms of the GNU Free Documentation
|
||||||
|
208
doc/xmlwf.xml
208
doc/xmlwf.xml
@ -1,11 +1,28 @@
|
|||||||
<!DOCTYPE refentry [
|
<!--
|
||||||
<!-- Fill in your name for FIRSTNAME and SURNAME. -->
|
__ __ _
|
||||||
|
___\ \/ /_ __ __ _| |_
|
||||||
|
/ _ \\ /| '_ \ / _` | __|
|
||||||
|
| __// \| |_) | (_| | |_
|
||||||
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|
|_| XML parser
|
||||||
|
|
||||||
|
Copyright (c) 2001 Scott Bronson <bronson@rinspin.com>
|
||||||
|
Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2009 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2016 Ardo van Rangelrooij <ardo@debian.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2020 Joe Orton <jorton@redhat.com>
|
||||||
|
Copyright (c) 2021 Tim Bray <tbray@textuality.com>
|
||||||
|
Unlike most of Expat,
|
||||||
|
this file is copyrighted under the GNU Free Documentation License 1.1.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
||||||
<!ENTITY dhfirstname "<firstname>Scott</firstname>">
|
<!ENTITY dhfirstname "<firstname>Scott</firstname>">
|
||||||
<!ENTITY dhsurname "<surname>Bronson</surname>">
|
<!ENTITY dhsurname "<surname>Bronson</surname>">
|
||||||
<!-- Please adjust the date whenever revising the manpage. -->
|
<!-- Please adjust the date whenever revising the manpage. -->
|
||||||
<!ENTITY dhdate "<date>March 11, 2016</date>">
|
<!ENTITY dhdate "<date>January 16, 2022</date>">
|
||||||
<!-- SECTION should be 1-8, maybe w/ subsection other parameters are
|
|
||||||
allowed: see man(7), man(1). -->
|
|
||||||
<!ENTITY dhsection "<manvolnum>1</manvolnum>">
|
<!ENTITY dhsection "<manvolnum>1</manvolnum>">
|
||||||
<!ENTITY dhemail "<email>bronson@rinspin.com</email>">
|
<!ENTITY dhemail "<email>bronson@rinspin.com</email>">
|
||||||
<!ENTITY dhusername "Scott Bronson">
|
<!ENTITY dhusername "Scott Bronson">
|
||||||
@ -44,25 +61,16 @@
|
|||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>&dhpackage;</command>
|
<command>&dhpackage;</command>
|
||||||
<arg><option>-s</option></arg>
|
<arg><replaceable>OPTIONS</replaceable></arg>
|
||||||
<arg><option>-n</option></arg>
|
<arg><replaceable>FILE</replaceable> ...</arg>
|
||||||
<arg><option>-p</option></arg>
|
</cmdsynopsis>
|
||||||
<arg><option>-x</option></arg>
|
<cmdsynopsis>
|
||||||
|
<command>&dhpackage;</command>
|
||||||
<arg><option>-e <replaceable>encoding</replaceable></option></arg>
|
<arg choice="plain"><option>-h</option></arg>
|
||||||
<arg><option>-w</option></arg>
|
</cmdsynopsis>
|
||||||
|
<cmdsynopsis>
|
||||||
<arg><option>-d <replaceable>output-dir</replaceable></option></arg>
|
<command>&dhpackage;</command>
|
||||||
<arg><option>-c</option></arg>
|
<arg choice="plain"><option>-v</option></arg>
|
||||||
<arg><option>-m</option></arg>
|
|
||||||
|
|
||||||
<arg><option>-r</option></arg>
|
|
||||||
<arg><option>-t</option></arg>
|
|
||||||
<arg><option>-N</option></arg>
|
|
||||||
|
|
||||||
<arg><option>-v</option></arg>
|
|
||||||
|
|
||||||
<arg>file ...</arg>
|
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
|
|
||||||
@ -95,7 +103,7 @@
|
|||||||
<listitem><para>
|
<listitem><para>
|
||||||
The file begins with an XML declaration. For instance,
|
The file begins with an XML declaration. For instance,
|
||||||
<literal><?xml version="1.0" standalone="yes"?></literal>.
|
<literal><?xml version="1.0" standalone="yes"?></literal>.
|
||||||
<emphasis>NOTE:</emphasis>
|
<emphasis>NOTE</emphasis>:
|
||||||
<command>&dhpackage;</command> does not currently
|
<command>&dhpackage;</command> does not currently
|
||||||
check for a valid XML declaration.
|
check for a valid XML declaration.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
@ -132,13 +140,57 @@
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
When an option includes an argument, you may specify the argument either
|
When an option includes an argument, you may specify the argument either
|
||||||
separately ("<option>-d</option> output") or concatenated with the
|
separately ("<option>-d</option> <replaceable>output</replaceable>") or concatenated with the
|
||||||
option ("<option>-d</option>output"). <command>&dhpackage;</command>
|
option ("<option>-d</option><replaceable>output</replaceable>"). <command>&dhpackage;</command>
|
||||||
supports both.
|
supports both.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-a</option> <replaceable>factor</replaceable></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Sets the maximum tolerated amplification factor
|
||||||
|
for protection against billion laughs attacks (default: 100.0).
|
||||||
|
The amplification factor is calculated as ..
|
||||||
|
</para>
|
||||||
|
<literallayout>
|
||||||
|
amplification := (direct + indirect) / direct
|
||||||
|
</literallayout>
|
||||||
|
<para>
|
||||||
|
.. while parsing, whereas
|
||||||
|
<direct> is the number of bytes read
|
||||||
|
from the primary document in parsing and
|
||||||
|
<indirect> is the number of bytes
|
||||||
|
added by expanding entities and reading of external DTD files,
|
||||||
|
combined.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<emphasis>NOTE</emphasis>:
|
||||||
|
If you ever need to increase this value for non-attack payload,
|
||||||
|
please file a bug report.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-b</option> <replaceable>bytes</replaceable></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Sets the number of output bytes (including amplification)
|
||||||
|
needed to activate protection against billion laughs attacks
|
||||||
|
(default: 8 MiB).
|
||||||
|
This can be thought of as an "activation threshold".
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
<emphasis>NOTE</emphasis>:
|
||||||
|
If you ever need to increase this value for non-attack payload,
|
||||||
|
please file a bug report.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-c</option></term>
|
<term><option>-c</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -153,7 +205,7 @@ supports both.
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-d output-dir</option></term>
|
<term><option>-d</option> <replaceable>output-dir</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Specifies a directory to contain transformed
|
Specifies a directory to contain transformed
|
||||||
@ -184,7 +236,7 @@ supports both.
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-e encoding</option></term>
|
<term><option>-e</option> <replaceable>encoding</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Specifies the character encoding for the document, overriding
|
Specifies the character encoding for the document, overriding
|
||||||
@ -199,6 +251,21 @@ supports both.
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-k</option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When processing multiple files, <command>&dhpackage;</command>
|
||||||
|
by default halts after the the first file with an error.
|
||||||
|
This tells <command>&dhpackage;</command> to report the error
|
||||||
|
but to keep processing.
|
||||||
|
This can be useful, for example, when testing a filter that converts
|
||||||
|
many files to XML and you want to quickly find out which conversions
|
||||||
|
failed.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-m</option></term>
|
<term><option>-m</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -235,7 +302,7 @@ supports both.
|
|||||||
<term><option>-p</option></term>
|
<term><option>-p</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Tells xmlwf to process external DTDs and parameter
|
Tells <command>&dhpackage;</command> to process external DTDs and parameter
|
||||||
entities.
|
entities.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -311,7 +378,7 @@ supports both.
|
|||||||
Enables support for Windows code pages.
|
Enables support for Windows code pages.
|
||||||
Normally, <command>&dhpackage;</command> will throw an error if it
|
Normally, <command>&dhpackage;</command> will throw an error if it
|
||||||
runs across an encoding that it is not equipped to handle itself. With
|
runs across an encoding that it is not equipped to handle itself. With
|
||||||
<option>-w</option>, &dhpackage; will try to use a Windows code
|
<option>-w</option>, <command>&dhpackage;</command> will try to use a Windows code
|
||||||
page. See also <option>-e</option>.
|
page. See also <option>-e</option>.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -379,23 +446,55 @@ supports both.
|
|||||||
<refsect1>
|
<refsect1>
|
||||||
<title>OUTPUT</title>
|
<title>OUTPUT</title>
|
||||||
<para>
|
<para>
|
||||||
If an input file is not well-formed,
|
<command>&dhpackage;</command> outputs nothing for files which are problem-free.
|
||||||
<command>&dhpackage;</command> prints a single line describing
|
If any input file is not well-formed, or if the output for any
|
||||||
the problem to standard output. If a file is well formed,
|
input file cannot be opened, <command>&dhpackage;</command> prints a single
|
||||||
<command>&dhpackage;</command> outputs nothing.
|
line describing the problem to standard output.
|
||||||
Note that the result code is <emphasis>not</emphasis> set.
|
</para>
|
||||||
|
<para>
|
||||||
|
If the <option>-k</option> option is not provided, <command>&dhpackage;</command>
|
||||||
|
halts upon encountering a well-formedness or output-file error.
|
||||||
|
If <option>-k</option> is provided, <command>&dhpackage;</command> continues
|
||||||
|
processing the remaining input files, describing problems found with any of them.
|
||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>BUGS</title>
|
<title>EXIT STATUS</title>
|
||||||
<para>
|
<para>For option <option>-v</option> or <option>-h</option>, <command>&dhpackage;</command> always exits with status code 0. For other cases, the following exit status codes are returned:
|
||||||
<command>&dhpackage;</command> returns a 0 - noerr result,
|
<variablelist>
|
||||||
even if the file is not well-formed. There is no good way for
|
<varlistentry>
|
||||||
a program to use <command>&dhpackage;</command> to quickly
|
<term><option>0</option></term>
|
||||||
check a file -- it must parse <command>&dhpackage;</command>'s
|
<listitem><para>The input files are well-formed and the output (if requested) was written successfully.</para>
|
||||||
standard output.
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>1</option></term>
|
||||||
|
<listitem><para>An internal error occurred.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>2</option></term>
|
||||||
|
<listitem><para>One or more input files were not well-formed or could not be parsed.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>3</option></term>
|
||||||
|
<listitem><para>If using the <option>-d</option> option, an error occurred opening an output file.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>4</option></term>
|
||||||
|
<listitem><para>There was a command-line argument error in how <command>&dhpackage;</command> was invoked.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
</para>
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>BUGS</title>
|
||||||
<para>
|
<para>
|
||||||
The errors should go to standard error, not standard output.
|
The errors should go to standard error, not standard output.
|
||||||
</para>
|
</para>
|
||||||
@ -412,28 +511,14 @@ supports both.
|
|||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
|
||||||
<title>ALTERNATIVES</title>
|
|
||||||
<para>
|
|
||||||
Here are some XML validators on the web:
|
|
||||||
|
|
||||||
<literallayout>
|
|
||||||
http://www.hcrc.ed.ac.uk/~richard/xml-check.html
|
|
||||||
http://www.stg.brown.edu/service/xmlvalid/
|
|
||||||
http://www.scripting.com/frontier5/xml/code/xmlValidator.html
|
|
||||||
http://www.xml.com/pub/a/tools/ruwf/check.html
|
|
||||||
</literallayout>
|
|
||||||
|
|
||||||
</para>
|
|
||||||
</refsect1>
|
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>SEE ALSO</title>
|
<title>SEE ALSO</title>
|
||||||
<para>
|
<para>
|
||||||
|
|
||||||
<literallayout>
|
<literallayout>
|
||||||
The Expat home page: http://www.libexpat.org/
|
The Expat home page: https://libexpat.github.io/
|
||||||
The W3 XML specification: http://www.w3.org/TR/REC-xml
|
The W3 XML 1.0 specification (fourth edition): https://www.w3.org/TR/2006/REC-xml-20060816/
|
||||||
|
Billion laughs attack: https://en.wikipedia.org/wiki/Billion_laughs_attack
|
||||||
</literallayout>
|
</literallayout>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
@ -442,7 +527,8 @@ The W3 XML specification: http://www.w3.org/TR/REC-xml
|
|||||||
<refsect1>
|
<refsect1>
|
||||||
<title>AUTHOR</title>
|
<title>AUTHOR</title>
|
||||||
<para>
|
<para>
|
||||||
This manual page was written by &dhusername; &dhemail; for
|
This manual page was originally written by &dhusername; &dhemail;
|
||||||
|
in December 2001 for
|
||||||
the &debian; system (but may be used by others). Permission is
|
the &debian; system (but may be used by others). Permission is
|
||||||
granted to copy, distribute and/or modify this document under
|
granted to copy, distribute and/or modify this document under
|
||||||
the terms of the <acronym>GNU</acronym> Free Documentation
|
the terms of the <acronym>GNU</acronym> Free Documentation
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -28,7 +29,7 @@
|
|||||||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(srcdir)/../lib
|
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||||
|
|
||||||
noinst_PROGRAMS = elements outline
|
noinst_PROGRAMS = elements outline
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -210,14 +211,16 @@ am__define_uniq_tagged_files = \
|
|||||||
unique=`for i in $$list; do \
|
unique=`for i in $$list; do \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
done | $(am__uniquify_input)`
|
done | $(am__uniquify_input)`
|
||||||
ETAGS = etags
|
|
||||||
CTAGS = ctags
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
||||||
$(top_srcdir)/conftools/depcomp
|
$(top_srcdir)/conftools/depcomp
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -227,8 +230,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -244,7 +248,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -257,6 +269,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -286,6 +300,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -296,6 +313,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -333,6 +351,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -341,7 +360,6 @@ target_alias = @target_alias@
|
|||||||
top_build_prefix = @top_build_prefix@
|
top_build_prefix = @top_build_prefix@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
AM_CPPFLAGS = -I$(srcdir)/../lib
|
|
||||||
elements_SOURCES = elements.c
|
elements_SOURCES = elements.c
|
||||||
elements_LDADD = ../lib/libexpat.la
|
elements_LDADD = ../lib/libexpat.la
|
||||||
outline_SOURCES = outline.c
|
outline_SOURCES = outline.c
|
||||||
@ -490,7 +508,6 @@ cscopelist-am: $(am__tagged_files)
|
|||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
|
@ -11,7 +11,12 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2001-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2004-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2005-2007 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2019 Zhongyuan Zhou <zhouzhongyuan@huawei.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -8,8 +8,12 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2001-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005-2007 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -30,15 +30,15 @@
|
|||||||
/* Define to 1 if you have the `bsd' library (-lbsd). */
|
/* Define to 1 if you have the `bsd' library (-lbsd). */
|
||||||
#undef HAVE_LIBBSD
|
#undef HAVE_LIBBSD
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
|
||||||
#undef HAVE_MEMORY_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have a working `mmap' system call. */
|
/* Define to 1 if you have a working `mmap' system call. */
|
||||||
#undef HAVE_MMAP
|
#undef HAVE_MMAP
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
#undef HAVE_STDINT_H
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdio.h> header file. */
|
||||||
|
#undef HAVE_STDIO_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
#undef HAVE_STDLIB_H
|
#undef HAVE_STDLIB_H
|
||||||
|
|
||||||
@ -87,7 +87,9 @@
|
|||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
/* Define to 1 if all of the C90 standard headers exist (not just the ones
|
||||||
|
required in a freestanding environment). This macro is provided for
|
||||||
|
backward compatibility; new code need not use it. */
|
||||||
#undef STDC_HEADERS
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 Expat development team
|
# Copyright (c) 2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
64
fuzz/xml_parse_fuzzer.c
Normal file
64
fuzz/xml_parse_fuzzer.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "expat.h"
|
||||||
|
#include "siphash.h"
|
||||||
|
|
||||||
|
// Macros to convert preprocessor macros to string literals. See
|
||||||
|
// https://gcc.gnu.org/onlinedocs/gcc-3.4.3/cpp/Stringification.html
|
||||||
|
#define xstr(s) str(s)
|
||||||
|
#define str(s) #s
|
||||||
|
|
||||||
|
// The encoder type that we wish to fuzz should come from the compile-time
|
||||||
|
// definition `ENCODING_FOR_FUZZING`. This allows us to have a separate fuzzer
|
||||||
|
// binary for
|
||||||
|
#ifndef ENCODING_FOR_FUZZING
|
||||||
|
# error "ENCODING_FOR_FUZZING was not provided to this fuzz target."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 16-byte deterministic hash key.
|
||||||
|
static unsigned char hash_key[16] = "FUZZING IS FUN!";
|
||||||
|
|
||||||
|
static void XMLCALL
|
||||||
|
start(void *userData, const XML_Char *name, const XML_Char **atts) {
|
||||||
|
(void)userData;
|
||||||
|
(void)name;
|
||||||
|
(void)atts;
|
||||||
|
}
|
||||||
|
static void XMLCALL
|
||||||
|
end(void *userData, const XML_Char *name) {
|
||||||
|
(void)userData;
|
||||||
|
(void)name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||||
|
XML_Parser p = XML_ParserCreate(xstr(ENCODING_FOR_FUZZING));
|
||||||
|
assert(p);
|
||||||
|
|
||||||
|
// Set the hash salt using siphash to generate a deterministic hash.
|
||||||
|
struct sipkey *key = sip_keyof(hash_key);
|
||||||
|
XML_SetHashSalt(p, (unsigned long)siphash24(data, size, key));
|
||||||
|
|
||||||
|
XML_SetElementHandler(p, start, end);
|
||||||
|
XML_Parse(p, (const XML_Char *)data, size, 0);
|
||||||
|
XML_Parse(p, (const XML_Char *)data, size, 1);
|
||||||
|
XML_ParserFree(p);
|
||||||
|
return 0;
|
||||||
|
}
|
71
fuzz/xml_parsebuffer_fuzzer.c
Normal file
71
fuzz/xml_parsebuffer_fuzzer.c
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "expat.h"
|
||||||
|
#include "siphash.h"
|
||||||
|
|
||||||
|
// Macros to convert preprocessor macros to string literals. See
|
||||||
|
// https://gcc.gnu.org/onlinedocs/gcc-3.4.3/cpp/Stringification.html
|
||||||
|
#define xstr(s) str(s)
|
||||||
|
#define str(s) #s
|
||||||
|
|
||||||
|
// The encoder type that we wish to fuzz should come from the compile-time
|
||||||
|
// definition `ENCODING_FOR_FUZZING`. This allows us to have a separate fuzzer
|
||||||
|
// binary for
|
||||||
|
#ifndef ENCODING_FOR_FUZZING
|
||||||
|
# error "ENCODING_FOR_FUZZING was not provided to this fuzz target."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 16-byte deterministic hash key.
|
||||||
|
static unsigned char hash_key[16] = "FUZZING IS FUN!";
|
||||||
|
|
||||||
|
static void XMLCALL
|
||||||
|
start(void *userData, const XML_Char *name, const XML_Char **atts) {
|
||||||
|
(void)userData;
|
||||||
|
(void)name;
|
||||||
|
(void)atts;
|
||||||
|
}
|
||||||
|
static void XMLCALL
|
||||||
|
end(void *userData, const XML_Char *name) {
|
||||||
|
(void)userData;
|
||||||
|
(void)name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||||
|
if (size == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
XML_Parser p = XML_ParserCreate(xstr(ENCODING_FOR_FUZZING));
|
||||||
|
assert(p);
|
||||||
|
XML_SetElementHandler(p, start, end);
|
||||||
|
|
||||||
|
// Set the hash salt using siphash to generate a deterministic hash.
|
||||||
|
struct sipkey *key = sip_keyof(hash_key);
|
||||||
|
XML_SetHashSalt(p, (unsigned long)siphash24(data, size, key));
|
||||||
|
|
||||||
|
void *buf = XML_GetBuffer(p, size);
|
||||||
|
assert(buf);
|
||||||
|
|
||||||
|
memcpy(buf, data, size);
|
||||||
|
XML_ParseBuffer(p, size, size == 0);
|
||||||
|
XML_ParserFree(p);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -6,7 +6,9 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Tomasz Kłoczko <kloczek@fedoraproject.org>
|
||||||
|
# Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -34,16 +36,26 @@ include_HEADERS = \
|
|||||||
expat_external.h
|
expat_external.h
|
||||||
|
|
||||||
lib_LTLIBRARIES = libexpat.la
|
lib_LTLIBRARIES = libexpat.la
|
||||||
|
noinst_LTLIBRARIES = libexpatinternal.la
|
||||||
|
|
||||||
libexpat_la_LDFLAGS = \
|
libexpat_la_LDFLAGS = \
|
||||||
|
@AM_LDFLAGS@ \
|
||||||
|
@LIBM@ \
|
||||||
-no-undefined \
|
-no-undefined \
|
||||||
-version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@
|
-version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@
|
||||||
|
|
||||||
libexpat_la_SOURCES = \
|
libexpat_la_SOURCES =
|
||||||
|
|
||||||
|
# This layer of indirection allows
|
||||||
|
# the test suite to access internal symbols
|
||||||
|
# despite compiling with -fvisibility=hidden
|
||||||
|
libexpatinternal_la_SOURCES = \
|
||||||
xmlparse.c \
|
xmlparse.c \
|
||||||
xmltok.c \
|
xmltok.c \
|
||||||
xmlrole.c
|
xmlrole.c
|
||||||
|
|
||||||
|
libexpat_la_LIBADD = libexpatinternal.la
|
||||||
|
|
||||||
doc_DATA = \
|
doc_DATA = \
|
||||||
../AUTHORS \
|
../AUTHORS \
|
||||||
../Changes
|
../Changes
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,9 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Tomasz Kłoczko <kloczek@fedoraproject.org>
|
||||||
|
# Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -171,9 +173,9 @@ am__uninstall_files_from_dir = { \
|
|||||||
}
|
}
|
||||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \
|
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \
|
||||||
"$(DESTDIR)$(includedir)"
|
"$(DESTDIR)$(includedir)"
|
||||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
|
||||||
libexpat_la_LIBADD =
|
libexpat_la_DEPENDENCIES = libexpatinternal.la
|
||||||
am_libexpat_la_OBJECTS = xmlparse.lo xmltok.lo xmlrole.lo
|
am_libexpat_la_OBJECTS =
|
||||||
libexpat_la_OBJECTS = $(am_libexpat_la_OBJECTS)
|
libexpat_la_OBJECTS = $(am_libexpat_la_OBJECTS)
|
||||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||||
@ -182,6 +184,9 @@ am__v_lt_1 =
|
|||||||
libexpat_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
libexpat_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||||
$(libexpat_la_LDFLAGS) $(LDFLAGS) -o $@
|
$(libexpat_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
|
libexpatinternal_la_LIBADD =
|
||||||
|
am_libexpatinternal_la_OBJECTS = xmlparse.lo xmltok.lo xmlrole.lo
|
||||||
|
libexpatinternal_la_OBJECTS = $(am_libexpatinternal_la_OBJECTS)
|
||||||
AM_V_P = $(am__v_P_@AM_V@)
|
AM_V_P = $(am__v_P_@AM_V@)
|
||||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||||
am__v_P_0 = false
|
am__v_P_0 = false
|
||||||
@ -218,8 +223,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
|||||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||||
am__v_CCLD_1 =
|
am__v_CCLD_1 =
|
||||||
SOURCES = $(libexpat_la_SOURCES)
|
SOURCES = $(libexpat_la_SOURCES) $(libexpatinternal_la_SOURCES)
|
||||||
DIST_SOURCES = $(libexpat_la_SOURCES)
|
DIST_SOURCES = $(libexpat_la_SOURCES) $(libexpatinternal_la_SOURCES)
|
||||||
am__can_run_installinfo = \
|
am__can_run_installinfo = \
|
||||||
case $$AM_UPDATE_INFO_DIR in \
|
case $$AM_UPDATE_INFO_DIR in \
|
||||||
n|no|NO) false;; \
|
n|no|NO) false;; \
|
||||||
@ -244,14 +249,16 @@ am__define_uniq_tagged_files = \
|
|||||||
unique=`for i in $$list; do \
|
unique=`for i in $$list; do \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
done | $(am__uniquify_input)`
|
done | $(am__uniquify_input)`
|
||||||
ETAGS = etags
|
|
||||||
CTAGS = ctags
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
||||||
$(top_srcdir)/conftools/depcomp
|
$(top_srcdir)/conftools/depcomp
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -261,8 +268,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -278,7 +286,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -291,6 +307,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -320,6 +338,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -330,6 +351,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -367,6 +389,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -381,15 +404,24 @@ include_HEADERS = \
|
|||||||
expat_external.h
|
expat_external.h
|
||||||
|
|
||||||
lib_LTLIBRARIES = libexpat.la
|
lib_LTLIBRARIES = libexpat.la
|
||||||
|
noinst_LTLIBRARIES = libexpatinternal.la
|
||||||
libexpat_la_LDFLAGS = \
|
libexpat_la_LDFLAGS = \
|
||||||
|
@AM_LDFLAGS@ \
|
||||||
|
@LIBM@ \
|
||||||
-no-undefined \
|
-no-undefined \
|
||||||
-version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@
|
-version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@
|
||||||
|
|
||||||
libexpat_la_SOURCES = \
|
libexpat_la_SOURCES =
|
||||||
|
|
||||||
|
# This layer of indirection allows
|
||||||
|
# the test suite to access internal symbols
|
||||||
|
# despite compiling with -fvisibility=hidden
|
||||||
|
libexpatinternal_la_SOURCES = \
|
||||||
xmlparse.c \
|
xmlparse.c \
|
||||||
xmltok.c \
|
xmltok.c \
|
||||||
xmlrole.c
|
xmlrole.c
|
||||||
|
|
||||||
|
libexpat_la_LIBADD = libexpatinternal.la
|
||||||
doc_DATA = \
|
doc_DATA = \
|
||||||
../AUTHORS \
|
../AUTHORS \
|
||||||
../Changes
|
../Changes
|
||||||
@ -483,9 +515,23 @@ clean-libLTLIBRARIES:
|
|||||||
rm -f $${locs}; \
|
rm -f $${locs}; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clean-noinstLTLIBRARIES:
|
||||||
|
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
|
||||||
|
@list='$(noinst_LTLIBRARIES)'; \
|
||||||
|
locs=`for p in $$list; do echo $$p; done | \
|
||||||
|
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
|
||||||
|
sort -u`; \
|
||||||
|
test -z "$$locs" || { \
|
||||||
|
echo rm -f $${locs}; \
|
||||||
|
rm -f $${locs}; \
|
||||||
|
}
|
||||||
|
|
||||||
libexpat.la: $(libexpat_la_OBJECTS) $(libexpat_la_DEPENDENCIES) $(EXTRA_libexpat_la_DEPENDENCIES)
|
libexpat.la: $(libexpat_la_OBJECTS) $(libexpat_la_DEPENDENCIES) $(EXTRA_libexpat_la_DEPENDENCIES)
|
||||||
$(AM_V_CCLD)$(libexpat_la_LINK) -rpath $(libdir) $(libexpat_la_OBJECTS) $(libexpat_la_LIBADD) $(LIBS)
|
$(AM_V_CCLD)$(libexpat_la_LINK) -rpath $(libdir) $(libexpat_la_OBJECTS) $(libexpat_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
|
libexpatinternal.la: $(libexpatinternal_la_OBJECTS) $(libexpatinternal_la_DEPENDENCIES) $(EXTRA_libexpatinternal_la_DEPENDENCIES)
|
||||||
|
$(AM_V_CCLD)$(LINK) $(libexpatinternal_la_OBJECTS) $(libexpatinternal_la_LIBADD) $(LIBS)
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.$(OBJEXT)
|
-rm -f *.$(OBJEXT)
|
||||||
|
|
||||||
@ -622,7 +668,6 @@ cscopelist-am: $(am__tagged_files)
|
|||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
@ -696,7 +741,7 @@ maintainer-clean-generic:
|
|||||||
clean: clean-am
|
clean: clean-am
|
||||||
|
|
||||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||||
mostlyclean-am
|
clean-noinstLTLIBRARIES mostlyclean-am
|
||||||
|
|
||||||
distclean: distclean-am
|
distclean: distclean-am
|
||||||
-rm -f ./$(DEPDIR)/xmlparse.Plo
|
-rm -f ./$(DEPDIR)/xmlparse.Plo
|
||||||
@ -773,16 +818,17 @@ uninstall-am: uninstall-docDATA uninstall-includeHEADERS \
|
|||||||
.MAKE: install-am install-data-am install-strip
|
.MAKE: install-am install-data-am install-strip
|
||||||
|
|
||||||
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
|
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
|
||||||
clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \
|
clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||||
ctags ctags-am distclean distclean-compile distclean-generic \
|
clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
|
||||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
distclean-compile distclean-generic distclean-libtool \
|
||||||
html-am info info-am install install-am install-data \
|
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||||
install-data-am install-data-hook install-docDATA install-dvi \
|
install install-am install-data install-data-am \
|
||||||
install-dvi-am install-exec install-exec-am install-html \
|
install-data-hook install-docDATA install-dvi install-dvi-am \
|
||||||
install-html-am install-includeHEADERS install-info \
|
install-exec install-exec-am install-html install-html-am \
|
||||||
install-info-am install-libLTLIBRARIES install-man install-pdf \
|
install-includeHEADERS install-info install-info-am \
|
||||||
install-pdf-am install-ps install-ps-am install-strip \
|
install-libLTLIBRARIES install-man install-pdf install-pdf-am \
|
||||||
installcheck installcheck-am installdirs maintainer-clean \
|
install-ps install-ps-am install-strip installcheck \
|
||||||
|
installcheck-am installdirs maintainer-clean \
|
||||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||||
tags tags-am uninstall uninstall-am uninstall-docDATA \
|
tags tags-am uninstall uninstall-am uninstall-docDATA \
|
||||||
|
@ -6,8 +6,11 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1999-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2007 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
44
lib/expat.h
44
lib/expat.h
@ -7,7 +7,14 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2000-2005 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2016 Cristian Rodríguez <crrodriguez@opensuse.org>
|
||||||
|
Copyright (c) 2016 Thomas Beutlich <tc@tbeu.de>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -115,7 +122,11 @@ enum XML_Error {
|
|||||||
XML_ERROR_RESERVED_PREFIX_XMLNS,
|
XML_ERROR_RESERVED_PREFIX_XMLNS,
|
||||||
XML_ERROR_RESERVED_NAMESPACE_URI,
|
XML_ERROR_RESERVED_NAMESPACE_URI,
|
||||||
/* Added in 2.2.1. */
|
/* Added in 2.2.1. */
|
||||||
XML_ERROR_INVALID_ARGUMENT
|
XML_ERROR_INVALID_ARGUMENT,
|
||||||
|
/* Added in 2.3.0. */
|
||||||
|
XML_ERROR_NO_BUFFER,
|
||||||
|
/* Added in 2.4.0. */
|
||||||
|
XML_ERROR_AMPLIFICATION_LIMIT_BREACH
|
||||||
};
|
};
|
||||||
|
|
||||||
enum XML_Content_Type {
|
enum XML_Content_Type {
|
||||||
@ -318,7 +329,7 @@ typedef void(XMLCALL *XML_EndDoctypeDeclHandler)(void *userData);
|
|||||||
|
|
||||||
For internal entities (<!ENTITY foo "bar">), value will
|
For internal entities (<!ENTITY foo "bar">), value will
|
||||||
be non-NULL and systemId, publicID, and notationName will be NULL.
|
be non-NULL and systemId, publicID, and notationName will be NULL.
|
||||||
The value string is NOT nul-terminated; the length is provided in
|
The value string is NOT null-terminated; the length is provided in
|
||||||
the value_length argument. Since it is legal to have zero-length
|
the value_length argument. Since it is legal to have zero-length
|
||||||
values, do not use this argument to test for internal entities.
|
values, do not use this argument to test for internal entities.
|
||||||
|
|
||||||
@ -513,7 +524,7 @@ typedef struct {
|
|||||||
Otherwise it must return XML_STATUS_ERROR.
|
Otherwise it must return XML_STATUS_ERROR.
|
||||||
|
|
||||||
If info does not describe a suitable encoding, then the parser will
|
If info does not describe a suitable encoding, then the parser will
|
||||||
return an XML_UNKNOWN_ENCODING error.
|
return an XML_ERROR_UNKNOWN_ENCODING error.
|
||||||
*/
|
*/
|
||||||
typedef int(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData,
|
typedef int(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData,
|
||||||
const XML_Char *name,
|
const XML_Char *name,
|
||||||
@ -707,7 +718,7 @@ XML_GetBase(XML_Parser parser);
|
|||||||
/* Returns the number of the attribute/value pairs passed in last call
|
/* Returns the number of the attribute/value pairs passed in last call
|
||||||
to the XML_StartElementHandler that were specified in the start-tag
|
to the XML_StartElementHandler that were specified in the start-tag
|
||||||
rather than defaulted. Each attribute/value pair counts as 2; thus
|
rather than defaulted. Each attribute/value pair counts as 2; thus
|
||||||
this correspondds to an index into the atts array passed to the
|
this corresponds to an index into the atts array passed to the
|
||||||
XML_StartElementHandler. Returns -1 if parser == NULL.
|
XML_StartElementHandler. Returns -1 if parser == NULL.
|
||||||
*/
|
*/
|
||||||
XMLPARSEAPI(int)
|
XMLPARSEAPI(int)
|
||||||
@ -716,7 +727,7 @@ XML_GetSpecifiedAttributeCount(XML_Parser parser);
|
|||||||
/* Returns the index of the ID attribute passed in the last call to
|
/* Returns the index of the ID attribute passed in the last call to
|
||||||
XML_StartElementHandler, or -1 if there is no ID attribute or
|
XML_StartElementHandler, or -1 if there is no ID attribute or
|
||||||
parser == NULL. Each attribute/value pair counts as 2; thus this
|
parser == NULL. Each attribute/value pair counts as 2; thus this
|
||||||
correspondds to an index into the atts array passed to the
|
corresponds to an index into the atts array passed to the
|
||||||
XML_StartElementHandler.
|
XML_StartElementHandler.
|
||||||
*/
|
*/
|
||||||
XMLPARSEAPI(int)
|
XMLPARSEAPI(int)
|
||||||
@ -997,7 +1008,10 @@ enum XML_FeatureEnum {
|
|||||||
XML_FEATURE_SIZEOF_XML_LCHAR,
|
XML_FEATURE_SIZEOF_XML_LCHAR,
|
||||||
XML_FEATURE_NS,
|
XML_FEATURE_NS,
|
||||||
XML_FEATURE_LARGE_SIZE,
|
XML_FEATURE_LARGE_SIZE,
|
||||||
XML_FEATURE_ATTR_INFO
|
XML_FEATURE_ATTR_INFO,
|
||||||
|
/* Added in Expat 2.4.0. */
|
||||||
|
XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT,
|
||||||
|
XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT
|
||||||
/* Additional features must be added to the end of this enum. */
|
/* Additional features must be added to the end of this enum. */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1010,12 +1024,24 @@ typedef struct {
|
|||||||
XMLPARSEAPI(const XML_Feature *)
|
XMLPARSEAPI(const XML_Feature *)
|
||||||
XML_GetFeatureList(void);
|
XML_GetFeatureList(void);
|
||||||
|
|
||||||
|
#ifdef XML_DTD
|
||||||
|
/* Added in Expat 2.4.0. */
|
||||||
|
XMLPARSEAPI(XML_Bool)
|
||||||
|
XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
XML_Parser parser, float maximumAmplificationFactor);
|
||||||
|
|
||||||
|
/* Added in Expat 2.4.0. */
|
||||||
|
XMLPARSEAPI(XML_Bool)
|
||||||
|
XML_SetBillionLaughsAttackProtectionActivationThreshold(
|
||||||
|
XML_Parser parser, unsigned long long activationThresholdBytes);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Expat follows the semantic versioning convention.
|
/* Expat follows the semantic versioning convention.
|
||||||
See http://semver.org.
|
See http://semver.org.
|
||||||
*/
|
*/
|
||||||
#define XML_MAJOR_VERSION 2
|
#define XML_MAJOR_VERSION 2
|
||||||
#define XML_MINOR_VERSION 2
|
#define XML_MINOR_VERSION 4
|
||||||
#define XML_MICRO_VERSION 9
|
#define XML_MICRO_VERSION 3
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,14 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2000-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016 Cristian Rodríguez <crrodriguez@opensuse.org>
|
||||||
|
Copyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2018 Yury Gribov <tetra2005@gmail.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -25,8 +25,12 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2018 Yury Gribov <tetra2005@gmail.com>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -101,23 +105,59 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <limits.h> // ULONG_MAX
|
||||||
|
|
||||||
|
#if defined(_WIN32) && ! defined(__USE_MINGW_ANSI_STDIO)
|
||||||
|
# define EXPAT_FMT_ULL(midpart) "%" midpart "I64u"
|
||||||
|
# if defined(_WIN64) // Note: modifiers "td" and "zu" do not work for MinGW
|
||||||
|
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "I64d"
|
||||||
|
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "I64u"
|
||||||
|
# else
|
||||||
|
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "d"
|
||||||
|
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "u"
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define EXPAT_FMT_ULL(midpart) "%" midpart "llu"
|
||||||
|
# if ! defined(ULONG_MAX)
|
||||||
|
# error Compiler did not define ULONG_MAX for us
|
||||||
|
# elif ULONG_MAX == 18446744073709551615u // 2^64-1
|
||||||
|
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "ld"
|
||||||
|
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "lu"
|
||||||
|
# else
|
||||||
|
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "d"
|
||||||
|
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "u"
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef UNUSED_P
|
#ifndef UNUSED_P
|
||||||
# define UNUSED_P(p) (void)p
|
# define UNUSED_P(p) (void)p
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* NOTE BEGIN If you ever patch these defaults to greater values
|
||||||
|
for non-attack XML payload in your environment,
|
||||||
|
please file a bug report with libexpat. Thank you!
|
||||||
|
*/
|
||||||
|
#define EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT \
|
||||||
|
100.0f
|
||||||
|
#define EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT \
|
||||||
|
8388608 // 8 MiB, 2^23
|
||||||
|
/* NOTE END */
|
||||||
|
|
||||||
|
#include "expat.h" // so we can use type XML_Parser below
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XML_ENABLE_VISIBILITY
|
void _INTERNAL_trim_to_complete_utf8_characters(const char *from,
|
||||||
# if XML_ENABLE_VISIBILITY
|
|
||||||
__attribute__((visibility("default")))
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
void
|
|
||||||
_INTERNAL_trim_to_complete_utf8_characters(const char *from,
|
|
||||||
const char **fromLimRef);
|
const char **fromLimRef);
|
||||||
|
|
||||||
|
#if defined(XML_DTD)
|
||||||
|
unsigned long long testingAccountingGetCountBytesDirect(XML_Parser parser);
|
||||||
|
unsigned long long testingAccountingGetCountBytesIndirect(XML_Parser parser);
|
||||||
|
const char *unsignedCharToPrintable(unsigned char c);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -1,143 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 2016 - 2017, Steve Holme, <steve_holme@hotmail.com>.
|
|
||||||
* Copyright (C) 2017, Expat development team
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
* Licensed under the MIT license:
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* 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 OF
|
|
||||||
* THIRD PARTY RIGHTS. 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.
|
|
||||||
*
|
|
||||||
* Except as contained in this notice, the name of a copyright holder shall
|
|
||||||
* not be used in advertising or otherwise to promote the sale, use or other
|
|
||||||
* dealings in this Software without prior written authorization of the
|
|
||||||
* copyright holder.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
|
|
||||||
|
|
||||||
HMODULE _Expat_LoadLibrary(LPCTSTR filename);
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined(LOAD_WITH_ALTERED_SEARCH_PATH)
|
|
||||||
#define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(LOAD_LIBRARY_SEARCH_SYSTEM32)
|
|
||||||
#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We use our own typedef here since some headers might lack these */
|
|
||||||
typedef HMODULE (APIENTRY *LOADLIBRARYEX_FN)(LPCTSTR, HANDLE, DWORD);
|
|
||||||
|
|
||||||
/* See function definitions in winbase.h */
|
|
||||||
#ifdef UNICODE
|
|
||||||
# ifdef _WIN32_WCE
|
|
||||||
# define LOADLIBARYEX L"LoadLibraryExW"
|
|
||||||
# else
|
|
||||||
# define LOADLIBARYEX "LoadLibraryExW"
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# define LOADLIBARYEX "LoadLibraryExA"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* _Expat_LoadLibrary()
|
|
||||||
*
|
|
||||||
* This is used to dynamically load DLLs using the most secure method available
|
|
||||||
* for the version of Windows that we are running on.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* filename [in] - The filename or full path of the DLL to load. If only the
|
|
||||||
* filename is passed then the DLL will be loaded from the
|
|
||||||
* Windows system directory.
|
|
||||||
*
|
|
||||||
* Returns the handle of the module on success; otherwise NULL.
|
|
||||||
*/
|
|
||||||
HMODULE _Expat_LoadLibrary(LPCTSTR filename)
|
|
||||||
{
|
|
||||||
HMODULE hModule = NULL;
|
|
||||||
LOADLIBRARYEX_FN pLoadLibraryEx = NULL;
|
|
||||||
|
|
||||||
/* Get a handle to kernel32 so we can access it's functions at runtime */
|
|
||||||
HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32"));
|
|
||||||
if(!hKernel32)
|
|
||||||
return NULL; /* LCOV_EXCL_LINE */
|
|
||||||
|
|
||||||
/* Attempt to find LoadLibraryEx() which is only available on Windows 2000
|
|
||||||
and above */
|
|
||||||
pLoadLibraryEx = (LOADLIBRARYEX_FN) GetProcAddress(hKernel32, LOADLIBARYEX);
|
|
||||||
|
|
||||||
/* Detect if there's already a path in the filename and load the library if
|
|
||||||
there is. Note: Both back slashes and forward slashes have been supported
|
|
||||||
since the earlier days of DOS at an API level although they are not
|
|
||||||
supported by command prompt */
|
|
||||||
if(_tcspbrk(filename, TEXT("\\/"))) {
|
|
||||||
/** !checksrc! disable BANNEDFUNC 1 **/
|
|
||||||
hModule = pLoadLibraryEx ?
|
|
||||||
pLoadLibraryEx(filename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH) :
|
|
||||||
LoadLibrary(filename);
|
|
||||||
}
|
|
||||||
/* Detect if KB2533623 is installed, as LOAD_LIBARY_SEARCH_SYSTEM32 is only
|
|
||||||
supported on Windows Vista, Windows Server 2008, Windows 7 and Windows
|
|
||||||
Server 2008 R2 with this patch or natively on Windows 8 and above */
|
|
||||||
else if(pLoadLibraryEx && GetProcAddress(hKernel32, "AddDllDirectory")) {
|
|
||||||
/* Load the DLL from the Windows system directory */
|
|
||||||
hModule = pLoadLibraryEx(filename, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Attempt to get the Windows system path */
|
|
||||||
UINT systemdirlen = GetSystemDirectory(NULL, 0);
|
|
||||||
if(systemdirlen) {
|
|
||||||
/* Allocate space for the full DLL path (Room for the null terminator
|
|
||||||
is included in systemdirlen) */
|
|
||||||
size_t filenamelen = _tcslen(filename);
|
|
||||||
TCHAR *path = malloc(sizeof(TCHAR) * (systemdirlen + 1 + filenamelen));
|
|
||||||
if(path && GetSystemDirectory(path, systemdirlen)) {
|
|
||||||
/* Calculate the full DLL path */
|
|
||||||
_tcscpy(path + _tcslen(path), TEXT("\\"));
|
|
||||||
_tcscpy(path + _tcslen(path), filename);
|
|
||||||
|
|
||||||
/* Load the DLL from the Windows system directory */
|
|
||||||
/** !checksrc! disable BANNEDFUNC 1 **/
|
|
||||||
hModule = pLoadLibraryEx ?
|
|
||||||
pLoadLibraryEx(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH) :
|
|
||||||
LoadLibrary(path);
|
|
||||||
|
|
||||||
}
|
|
||||||
free(path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return hModule;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* defined(_WIN32) */
|
|
||||||
|
|
||||||
/* ISO C requires a translation unit to contain at least one declaration
|
|
||||||
[-Wempty-translation-unit] */
|
|
||||||
typedef int _TRANSLATION_UNIT_LOAD_LIBRARY_C_NOT_EMTPY;
|
|
||||||
|
|
||||||
#endif /* defined(_WIN32) */
|
|
@ -6,8 +6,8 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -11,6 +11,9 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* HISTORY:
|
* HISTORY:
|
||||||
*
|
*
|
||||||
|
* 2020-10-03 (Sebastian Pipping)
|
||||||
|
* - Drop support for Visual Studio 9.0/2008 and earlier
|
||||||
|
*
|
||||||
* 2019-08-03 (Sebastian Pipping)
|
* 2019-08-03 (Sebastian Pipping)
|
||||||
* - Mark part of sip24_valid as to be excluded from clang-format
|
* - Mark part of sip24_valid as to be excluded from clang-format
|
||||||
* - Re-format code using clang-format 9
|
* - Re-format code using clang-format 9
|
||||||
@ -96,15 +99,7 @@
|
|||||||
#define SIPHASH_H
|
#define SIPHASH_H
|
||||||
|
|
||||||
#include <stddef.h> /* size_t */
|
#include <stddef.h> /* size_t */
|
||||||
|
|
||||||
#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600)
|
|
||||||
/* For vs2003/7.1 up to vs2008/9.0; _MSC_VER 1600 is vs2010/10.0 */
|
|
||||||
typedef unsigned __int8 uint8_t;
|
|
||||||
typedef unsigned __int32 uint32_t;
|
|
||||||
typedef unsigned __int64 uint64_t;
|
|
||||||
#else
|
|
||||||
#include <stdint.h> /* uint64_t uint32_t uint8_t */
|
#include <stdint.h> /* uint64_t uint32_t uint8_t */
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Workaround to not require a C++11 compiler for using ULL suffix
|
* Workaround to not require a C++11 compiler for using ULL suffix
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
1435
lib/xmlparse.c
1435
lib/xmlparse.c
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,15 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005-2009 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
|
Copyright (c) 2021 Dong-hee Na <donghee.na@python.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,15 +38,13 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <expat_config.h>
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include "winconfig.h"
|
# include "winconfig.h"
|
||||||
#else
|
|
||||||
# ifdef HAVE_EXPAT_CONFIG_H
|
|
||||||
# include <expat_config.h>
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* ndef _WIN32 */
|
|
||||||
|
|
||||||
#include "expat_external.h"
|
#include "expat_external.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
@ -1220,6 +1226,8 @@ common(PROLOG_STATE *state, int tok) {
|
|||||||
#ifdef XML_DTD
|
#ifdef XML_DTD
|
||||||
if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
|
if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
|
||||||
return XML_ROLE_INNER_PARAM_ENTITY_REF;
|
return XML_ROLE_INNER_PARAM_ENTITY_REF;
|
||||||
|
#else
|
||||||
|
UNUSED_P(tok);
|
||||||
#endif
|
#endif
|
||||||
state->handler = error;
|
state->handler = error;
|
||||||
return XML_ROLE_ERROR;
|
return XML_ROLE_ERROR;
|
||||||
|
@ -7,7 +7,10 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
39
lib/xmltok.c
39
lib/xmltok.c
@ -7,7 +7,20 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2001-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2005-2009 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2016 Pascal Cuoq <cuoq@trust-in-soft.com>
|
||||||
|
Copyright (c) 2016 Don Lewis <truckman@apache.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2017 Alexander Bluhm <alexander.bluhm@gmx.net>
|
||||||
|
Copyright (c) 2017 Benbuck Nason <bnason@netflix.com>
|
||||||
|
Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
|
Copyright (c) 2021 Dong-hee Na <donghee.na@python.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,25 +43,15 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <expat_config.h>
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h> /* memcpy */
|
#include <string.h> /* memcpy */
|
||||||
|
|
||||||
#if defined(_MSC_VER) && (_MSC_VER <= 1700)
|
|
||||||
/* for vs2012/11.0/1700 and earlier Visual Studio compilers */
|
|
||||||
# define bool int
|
|
||||||
# define false 0
|
|
||||||
# define true 1
|
|
||||||
#else
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include "winconfig.h"
|
# include "winconfig.h"
|
||||||
#else
|
|
||||||
# ifdef HAVE_EXPAT_CONFIG_H
|
|
||||||
# include <expat_config.h>
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* ndef _WIN32 */
|
|
||||||
|
|
||||||
#include "expat_external.h"
|
#include "expat_external.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
@ -269,8 +272,14 @@ sb_byteToAscii(const ENCODING *enc, const char *p) {
|
|||||||
|
|
||||||
#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
|
#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
|
||||||
#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
|
#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
|
||||||
|
#ifdef XML_MIN_SIZE
|
||||||
|
# define IS_INVALID_CHAR(enc, p, n) \
|
||||||
|
(AS_NORMAL_ENCODING(enc)->isInvalid##n \
|
||||||
|
&& AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
|
||||||
|
#else
|
||||||
# define IS_INVALID_CHAR(enc, p, n) \
|
# define IS_INVALID_CHAR(enc, p, n) \
|
||||||
(AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
|
(AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef XML_MIN_SIZE
|
#ifdef XML_MIN_SIZE
|
||||||
# define IS_NAME_CHAR_MINBPC(enc, p) \
|
# define IS_NAME_CHAR_MINBPC(enc, p) \
|
||||||
@ -589,13 +598,13 @@ static const struct normal_encoding ascii_encoding
|
|||||||
static int PTRFASTCALL
|
static int PTRFASTCALL
|
||||||
unicode_byte_type(char hi, char lo) {
|
unicode_byte_type(char hi, char lo) {
|
||||||
switch ((unsigned char)hi) {
|
switch ((unsigned char)hi) {
|
||||||
/* 0xD800–0xDBFF first 16-bit code unit or high surrogate (W1) */
|
/* 0xD800-0xDBFF first 16-bit code unit or high surrogate (W1) */
|
||||||
case 0xD8:
|
case 0xD8:
|
||||||
case 0xD9:
|
case 0xD9:
|
||||||
case 0xDA:
|
case 0xDA:
|
||||||
case 0xDB:
|
case 0xDB:
|
||||||
return BT_LEAD4;
|
return BT_LEAD4;
|
||||||
/* 0xDC00–0xDFFF second 16-bit code unit or low surrogate (W2) */
|
/* 0xDC00-0xDFFF second 16-bit code unit or low surrogate (W2) */
|
||||||
case 0xDC:
|
case 0xDC:
|
||||||
case 0xDD:
|
case 0xDD:
|
||||||
case 0xDE:
|
case 0xDE:
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2005 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* This file is included!
|
/* This file is included (from xmltok.c, 1-3 times depending on XML_MIN_SIZE)!
|
||||||
__ __ _
|
__ __ _
|
||||||
___\ \/ /_ __ __ _| |_
|
___\ \/ /_ __ __ _| |_
|
||||||
/ _ \\ /| '_ \ / _` | __|
|
/ _ \\ /| '_ \ / _` | __|
|
||||||
@ -7,7 +7,15 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2018 Benjamin Peterson <benjamin@python.org>
|
||||||
|
Copyright (c) 2018 Anton Maklakov <antmak.pub@gmail.com>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
|
Copyright (c) 2020 Boris Kolpackov <boris@codesynthesis.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -32,7 +40,7 @@
|
|||||||
|
|
||||||
#ifdef XML_TOK_IMPL_C
|
#ifdef XML_TOK_IMPL_C
|
||||||
|
|
||||||
# ifndef IS_INVALID_CHAR
|
# ifndef IS_INVALID_CHAR // i.e. for UTF-16 and XML_MIN_SIZE not defined
|
||||||
# define IS_INVALID_CHAR(enc, ptr, n) (0)
|
# define IS_INVALID_CHAR(enc, ptr, n) (0)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@ -1768,13 +1776,14 @@ PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end,
|
|||||||
# define LEAD_CASE(n) \
|
# define LEAD_CASE(n) \
|
||||||
case BT_LEAD##n: \
|
case BT_LEAD##n: \
|
||||||
ptr += n; \
|
ptr += n; \
|
||||||
|
pos->columnNumber++; \
|
||||||
break;
|
break;
|
||||||
LEAD_CASE(2)
|
LEAD_CASE(2)
|
||||||
LEAD_CASE(3)
|
LEAD_CASE(3)
|
||||||
LEAD_CASE(4)
|
LEAD_CASE(4)
|
||||||
# undef LEAD_CASE
|
# undef LEAD_CASE
|
||||||
case BT_LF:
|
case BT_LF:
|
||||||
pos->columnNumber = (XML_Size)-1;
|
pos->columnNumber = 0;
|
||||||
pos->lineNumber++;
|
pos->lineNumber++;
|
||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
break;
|
break;
|
||||||
@ -1783,13 +1792,13 @@ PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end,
|
|||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
|
if (HAS_CHAR(enc, ptr, end) && BYTE_TYPE(enc, ptr) == BT_LF)
|
||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
pos->columnNumber = (XML_Size)-1;
|
pos->columnNumber = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
|
pos->columnNumber++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pos->columnNumber++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -89,7 +93,7 @@ NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
|
|||||||
static const ENCODING *
|
static const ENCODING *
|
||||||
NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) {
|
NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) {
|
||||||
# define ENCODING_MAX 128
|
# define ENCODING_MAX 128
|
||||||
char buf[ENCODING_MAX];
|
char buf[ENCODING_MAX] = "";
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
int i;
|
int i;
|
||||||
XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
|
XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
|
||||||
|
39
run.sh.in
39
run.sh.in
@ -1,11 +1,46 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
# Copyright (C) 2017 Expat development team
|
# __ __ _
|
||||||
# Licensed under the MIT license
|
# ___\ \/ /_ __ __ _| |_
|
||||||
|
# / _ \\ /| '_ \ / _` | __|
|
||||||
|
# | __// \| |_) | (_| | |_
|
||||||
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
|
# |_| XML parser
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-2022 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Licensed under the MIT license:
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
case "@host@" in
|
case "@host@" in
|
||||||
*-mingw*)
|
*-mingw*)
|
||||||
|
case "$(uname -o)" in
|
||||||
|
Cygwin|Msys)
|
||||||
|
# Windows binary on Windows host
|
||||||
|
exec "$@"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Windows binary on non-Windows host
|
||||||
exec wine "$@"
|
exec wine "$@"
|
||||||
;;
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
exec "$@"
|
exec "$@"
|
||||||
;;
|
;;
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2019 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
# Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,7 +32,7 @@
|
|||||||
|
|
||||||
SUBDIRS = . benchmark
|
SUBDIRS = . benchmark
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(srcdir)/../lib
|
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||||
|
|
||||||
noinst_LIBRARIES = libruntests.a
|
noinst_LIBRARIES = libruntests.a
|
||||||
|
|
||||||
@ -52,8 +54,11 @@ runtests_SOURCES = \
|
|||||||
runtestspp_SOURCES = \
|
runtestspp_SOURCES = \
|
||||||
runtestspp.cpp
|
runtestspp.cpp
|
||||||
|
|
||||||
runtests_LDADD = libruntests.a ../lib/libexpat.la
|
runtests_LDADD = libruntests.a ../lib/libexpatinternal.la
|
||||||
runtestspp_LDADD = libruntests.a ../lib/libexpat.la
|
runtestspp_LDADD = libruntests.a ../lib/libexpatinternal.la
|
||||||
|
|
||||||
|
runtests_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||||
|
runtestspp_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
chardata.h \
|
chardata.h \
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,9 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
# Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -154,14 +156,20 @@ am_libruntests_a_OBJECTS = chardata.$(OBJEXT) structdata.$(OBJEXT) \
|
|||||||
libruntests_a_OBJECTS = $(am_libruntests_a_OBJECTS)
|
libruntests_a_OBJECTS = $(am_libruntests_a_OBJECTS)
|
||||||
am_runtests_OBJECTS = runtests.$(OBJEXT)
|
am_runtests_OBJECTS = runtests.$(OBJEXT)
|
||||||
runtests_OBJECTS = $(am_runtests_OBJECTS)
|
runtests_OBJECTS = $(am_runtests_OBJECTS)
|
||||||
runtests_DEPENDENCIES = libruntests.a ../lib/libexpat.la
|
runtests_DEPENDENCIES = libruntests.a ../lib/libexpatinternal.la
|
||||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||||
am__v_lt_0 = --silent
|
am__v_lt_0 = --silent
|
||||||
am__v_lt_1 =
|
am__v_lt_1 =
|
||||||
|
runtests_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||||
|
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||||
|
$(runtests_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
am_runtestspp_OBJECTS = runtestspp.$(OBJEXT)
|
am_runtestspp_OBJECTS = runtestspp.$(OBJEXT)
|
||||||
runtestspp_OBJECTS = $(am_runtestspp_OBJECTS)
|
runtestspp_OBJECTS = $(am_runtestspp_OBJECTS)
|
||||||
runtestspp_DEPENDENCIES = libruntests.a ../lib/libexpat.la
|
runtestspp_DEPENDENCIES = libruntests.a ../lib/libexpatinternal.la
|
||||||
|
runtestspp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
|
||||||
|
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
|
||||||
|
$(CXXFLAGS) $(runtestspp_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
AM_V_P = $(am__v_P_@AM_V@)
|
AM_V_P = $(am__v_P_@AM_V@)
|
||||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||||
am__v_P_0 = false
|
am__v_P_0 = false
|
||||||
@ -259,8 +267,6 @@ am__define_uniq_tagged_files = \
|
|||||||
unique=`for i in $$list; do \
|
unique=`for i in $$list; do \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
done | $(am__uniquify_input)`
|
done | $(am__uniquify_input)`
|
||||||
ETAGS = etags
|
|
||||||
CTAGS = ctags
|
|
||||||
am__tty_colors_dummy = \
|
am__tty_colors_dummy = \
|
||||||
mgn= red= grn= lgn= blu= brg= std=; \
|
mgn= red= grn= lgn= blu= brg= std=; \
|
||||||
am__color_tests=no
|
am__color_tests=no
|
||||||
@ -443,6 +449,7 @@ am__set_TESTS_bases = \
|
|||||||
bases='$(TEST_LOGS)'; \
|
bases='$(TEST_LOGS)'; \
|
||||||
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
|
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
|
||||||
bases=`echo $$bases`
|
bases=`echo $$bases`
|
||||||
|
AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
|
||||||
RECHECK_LOGS = $(TEST_LOGS)
|
RECHECK_LOGS = $(TEST_LOGS)
|
||||||
TEST_SUITE_LOG = test-suite.log
|
TEST_SUITE_LOG = test-suite.log
|
||||||
TEST_EXTENSIONS = @EXEEXT@ .test
|
TEST_EXTENSIONS = @EXEEXT@ .test
|
||||||
@ -495,7 +502,11 @@ am__relativize = \
|
|||||||
reldir="$$dir2"
|
reldir="$$dir2"
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -505,8 +516,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -522,7 +534,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -535,6 +555,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -564,6 +586,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -574,6 +599,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -611,6 +637,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -620,7 +647,6 @@ top_build_prefix = @top_build_prefix@
|
|||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
SUBDIRS = . benchmark
|
SUBDIRS = . benchmark
|
||||||
AM_CPPFLAGS = -I$(srcdir)/../lib
|
|
||||||
noinst_LIBRARIES = libruntests.a
|
noinst_LIBRARIES = libruntests.a
|
||||||
|
|
||||||
# To support MinGW and Non-MinGW at the same time:
|
# To support MinGW and Non-MinGW at the same time:
|
||||||
@ -637,8 +663,10 @@ runtests_SOURCES = \
|
|||||||
runtestspp_SOURCES = \
|
runtestspp_SOURCES = \
|
||||||
runtestspp.cpp
|
runtestspp.cpp
|
||||||
|
|
||||||
runtests_LDADD = libruntests.a ../lib/libexpat.la
|
runtests_LDADD = libruntests.a ../lib/libexpatinternal.la
|
||||||
runtestspp_LDADD = libruntests.a ../lib/libexpat.la
|
runtestspp_LDADD = libruntests.a ../lib/libexpatinternal.la
|
||||||
|
runtests_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||||
|
runtestspp_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
chardata.h \
|
chardata.h \
|
||||||
structdata.h \
|
structdata.h \
|
||||||
@ -702,11 +730,11 @@ libruntests.a: $(libruntests_a_OBJECTS) $(libruntests_a_DEPENDENCIES) $(EXTRA_li
|
|||||||
|
|
||||||
runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES)
|
runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES)
|
||||||
@rm -f runtests$(EXEEXT)
|
@rm -f runtests$(EXEEXT)
|
||||||
$(AM_V_CCLD)$(LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS)
|
$(AM_V_CCLD)$(runtests_LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS)
|
||||||
|
|
||||||
runtestspp$(EXEEXT): $(runtestspp_OBJECTS) $(runtestspp_DEPENDENCIES) $(EXTRA_runtestspp_DEPENDENCIES)
|
runtestspp$(EXEEXT): $(runtestspp_OBJECTS) $(runtestspp_DEPENDENCIES) $(EXTRA_runtestspp_DEPENDENCIES)
|
||||||
@rm -f runtestspp$(EXEEXT)
|
@rm -f runtestspp$(EXEEXT)
|
||||||
$(AM_V_CXXLD)$(CXXLINK) $(runtestspp_OBJECTS) $(runtestspp_LDADD) $(LIBS)
|
$(AM_V_CXXLD)$(runtestspp_LINK) $(runtestspp_OBJECTS) $(runtestspp_LDADD) $(LIBS)
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.$(OBJEXT)
|
-rm -f *.$(OBJEXT)
|
||||||
@ -981,7 +1009,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
|
|||||||
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
|
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
|
||||||
fi; \
|
fi; \
|
||||||
echo "$${col}$$br$${std}"; \
|
echo "$${col}$$br$${std}"; \
|
||||||
echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
|
echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
|
||||||
echo "$${col}$$br$${std}"; \
|
echo "$${col}$$br$${std}"; \
|
||||||
create_testsuite_report --maybe-color; \
|
create_testsuite_report --maybe-color; \
|
||||||
echo "$$col$$br$$std"; \
|
echo "$$col$$br$$std"; \
|
||||||
@ -1043,7 +1071,6 @@ runtestspp.log: runtestspp$(EXEEXT)
|
|||||||
@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
|
@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
|
||||||
@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
|
@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
|
||||||
@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
|
@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -28,7 +29,7 @@
|
|||||||
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(srcdir)/../../lib
|
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../../lib
|
||||||
|
|
||||||
noinst_PROGRAMS = benchmark
|
noinst_PROGRAMS = benchmark
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2020 Jeffrey Walton <noloader@gmail.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -207,14 +208,16 @@ am__define_uniq_tagged_files = \
|
|||||||
unique=`for i in $$list; do \
|
unique=`for i in $$list; do \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
done | $(am__uniquify_input)`
|
done | $(am__uniquify_input)`
|
||||||
ETAGS = etags
|
|
||||||
CTAGS = ctags
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
||||||
$(top_srcdir)/conftools/depcomp
|
$(top_srcdir)/conftools/depcomp
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../../lib
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -224,8 +227,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -241,7 +245,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -254,6 +266,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -283,6 +297,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -293,6 +310,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -330,6 +348,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -338,7 +357,6 @@ target_alias = @target_alias@
|
|||||||
top_build_prefix = @top_build_prefix@
|
top_build_prefix = @top_build_prefix@
|
||||||
top_builddir = @top_builddir@
|
top_builddir = @top_builddir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
AM_CPPFLAGS = -I$(srcdir)/../../lib
|
|
||||||
benchmark_SOURCES = benchmark.c
|
benchmark_SOURCES = benchmark.c
|
||||||
benchmark_LDADD = ../../lib/libexpat.la
|
benchmark_LDADD = ../../lib/libexpat.la
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
@ -483,7 +501,6 @@ cscopelist-am: $(am__tagged_files)
|
|||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2003-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2005-2007 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 2013
|
|
||||||
VisualStudioVersion = 12.0.40629.0
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benchmark", "benchmark.vcxproj", "{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Template|Win32 = Template|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}.Template|Win32.ActiveCfg = Template|Win32
|
|
||||||
{FF89BA66-62C4-49EC-9189-1E7B603A1FD6}.Template|Win32.Build.0 = Template|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
@ -6,8 +6,12 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2002-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016 Gilles Espinasse <g.esp@free.fr>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,9 +34,7 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_EXPAT_CONFIG_H
|
|
||||||
#include <expat_config.h>
|
#include <expat_config.h>
|
||||||
#endif
|
|
||||||
#include "minicheck.h"
|
#include "minicheck.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -7,8 +7,9 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2002-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -10,8 +10,11 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2004-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2016-2020 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -141,11 +144,18 @@ _check_set_test_info(char const *function, char const *filename, int lineno) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_failure(SRunner *runner, int verbosity) {
|
handle_success(int verbosity) {
|
||||||
runner->nfailures++;
|
|
||||||
if (verbosity >= CK_VERBOSE) {
|
if (verbosity >= CK_VERBOSE) {
|
||||||
printf("%s:%d: %s\n", _check_current_filename, _check_current_lineno,
|
printf("PASS: %s\n", _check_current_function);
|
||||||
_check_current_function);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_failure(SRunner *runner, int verbosity, const char *phase_info) {
|
||||||
|
runner->nfailures++;
|
||||||
|
if (verbosity != CK_SILENT) {
|
||||||
|
printf("FAIL: %s (%s at %s:%d)\n", _check_current_function, phase_info,
|
||||||
|
_check_current_filename, _check_current_lineno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,14 +174,14 @@ srunner_run_all(SRunner *runner, int verbosity) {
|
|||||||
if (tc->setup != NULL) {
|
if (tc->setup != NULL) {
|
||||||
/* setup */
|
/* setup */
|
||||||
if (setjmp(env)) {
|
if (setjmp(env)) {
|
||||||
add_failure(runner, verbosity);
|
handle_failure(runner, verbosity, "during setup");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tc->setup();
|
tc->setup();
|
||||||
}
|
}
|
||||||
/* test */
|
/* test */
|
||||||
if (setjmp(env)) {
|
if (setjmp(env)) {
|
||||||
add_failure(runner, verbosity);
|
handle_failure(runner, verbosity, "during actual test");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
(tc->tests[i])();
|
(tc->tests[i])();
|
||||||
@ -179,15 +189,17 @@ srunner_run_all(SRunner *runner, int verbosity) {
|
|||||||
/* teardown */
|
/* teardown */
|
||||||
if (tc->teardown != NULL) {
|
if (tc->teardown != NULL) {
|
||||||
if (setjmp(env)) {
|
if (setjmp(env)) {
|
||||||
add_failure(runner, verbosity);
|
handle_failure(runner, verbosity, "during teardown");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tc->teardown();
|
tc->teardown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handle_success(verbosity);
|
||||||
}
|
}
|
||||||
tc = tc->next_tcase;
|
tc = tc->next_tcase;
|
||||||
}
|
}
|
||||||
if (verbosity) {
|
if (verbosity != CK_SILENT) {
|
||||||
int passed = runner->nchecks - runner->nfailures;
|
int passed = runner->nchecks - runner->nfailures;
|
||||||
double percentage = ((double)passed) / runner->nchecks;
|
double percentage = ((double)passed) / runner->nchecks;
|
||||||
int display = (int)(percentage * 100);
|
int display = (int)(percentage * 100);
|
||||||
@ -203,8 +215,8 @@ _fail_unless(int condition, const char *file, int line, const char *msg) {
|
|||||||
it is.
|
it is.
|
||||||
*/
|
*/
|
||||||
UNUSED_P(condition);
|
UNUSED_P(condition);
|
||||||
UNUSED_P(file);
|
_check_current_filename = file;
|
||||||
UNUSED_P(line);
|
_check_current_lineno = line;
|
||||||
if (msg != NULL) {
|
if (msg != NULL) {
|
||||||
const int has_newline = (msg[strlen(msg) - 1] == '\n');
|
const int has_newline = (msg[strlen(msg) - 1] == '\n');
|
||||||
fprintf(stderr, "ERROR: %s%s", msg, has_newline ? "" : "\n");
|
fprintf(stderr, "ERROR: %s%s", msg, has_newline ? "" : "\n");
|
||||||
|
@ -12,8 +12,9 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2004-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2006-2012 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
625
tests/runtests.c
625
tests/runtests.c
@ -6,8 +6,18 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005-2007 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017-2018 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||||
|
Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
|
||||||
|
Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
|
Copyright (c) 2020 Tim Gates <tim.gates@iress.com>
|
||||||
|
Copyright (c) 2021 Dong-hee Na <donghee.na@python.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,14 +40,12 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <expat_config.h>
|
||||||
|
|
||||||
#if defined(NDEBUG)
|
#if defined(NDEBUG)
|
||||||
# undef NDEBUG /* because test suite relies on assert(...) at the moment */
|
# undef NDEBUG /* because test suite relies on assert(...) at the moment */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_EXPAT_CONFIG_H
|
|
||||||
# include <expat_config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -45,34 +53,17 @@
|
|||||||
#include <stddef.h> /* ptrdiff_t */
|
#include <stddef.h> /* ptrdiff_t */
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
#if defined(_WIN32) && defined(_MSC_VER) && (_MSC_VER < 1600)
|
|
||||||
/* For vs2003/7.1 up to vs2008/9.0; _MSC_VER 1600 is vs2010/10.0 */
|
|
||||||
# if defined(_WIN64)
|
|
||||||
typedef __int64 intptr_t;
|
|
||||||
# else
|
|
||||||
typedef __int32 intptr_t;
|
|
||||||
# endif
|
|
||||||
typedef unsigned __int64 uint64_t;
|
|
||||||
#else
|
|
||||||
#include <stdint.h> /* intptr_t uint64_t */
|
#include <stdint.h> /* intptr_t uint64_t */
|
||||||
#endif
|
#include <math.h> /* NAN, INFINITY, isnan */
|
||||||
|
|
||||||
#if ! defined(__cplusplus)
|
#if ! defined(__cplusplus)
|
||||||
# if defined(_MSC_VER) && (_MSC_VER <= 1700)
|
|
||||||
/* for vs2012/11.0/1700 and earlier Visual Studio compilers */
|
|
||||||
# define bool int
|
|
||||||
# define false 0
|
|
||||||
# define true 1
|
|
||||||
# else
|
|
||||||
# include <stdbool.h>
|
# include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "expat.h"
|
#include "expat.h"
|
||||||
#include "chardata.h"
|
#include "chardata.h"
|
||||||
#include "structdata.h"
|
#include "structdata.h"
|
||||||
#include "internal.h" /* for UNUSED_P only */
|
#include "internal.h"
|
||||||
#include "minicheck.h"
|
#include "minicheck.h"
|
||||||
#include "memcheck.h"
|
#include "memcheck.h"
|
||||||
#include "siphash.h"
|
#include "siphash.h"
|
||||||
@ -108,6 +99,16 @@ typedef unsigned __int64 uint64_t;
|
|||||||
|
|
||||||
static XML_Parser g_parser = NULL;
|
static XML_Parser g_parser = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
tcase_add_test__ifdef_xml_dtd(TCase *tc, tcase_test_function test) {
|
||||||
|
#ifdef XML_DTD
|
||||||
|
tcase_add_test(tc, test);
|
||||||
|
#else
|
||||||
|
UNUSED_P(tc);
|
||||||
|
UNUSED_P(test);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
basic_setup(void) {
|
basic_setup(void) {
|
||||||
g_parser = XML_ParserCreate(NULL);
|
g_parser = XML_ParserCreate(NULL);
|
||||||
@ -1769,7 +1770,7 @@ START_TEST(test_not_standalone_handler_accept) {
|
|||||||
XML_SetNotStandaloneHandler(g_parser, accept_not_standalone_handler);
|
XML_SetNotStandaloneHandler(g_parser, accept_not_standalone_handler);
|
||||||
run_ext_character_check(text, &test_data, XCS(""));
|
run_ext_character_check(text, &test_data, XCS(""));
|
||||||
|
|
||||||
/* Repeat wtihout the external entity handler */
|
/* Repeat without the external entity handler */
|
||||||
XML_ParserReset(g_parser, NULL);
|
XML_ParserReset(g_parser, NULL);
|
||||||
XML_SetNotStandaloneHandler(g_parser, accept_not_standalone_handler);
|
XML_SetNotStandaloneHandler(g_parser, accept_not_standalone_handler);
|
||||||
run_character_check(text, XCS(""));
|
run_character_check(text, XCS(""));
|
||||||
@ -7049,17 +7050,39 @@ END_TEST
|
|||||||
/* Test that too many colons are rejected */
|
/* Test that too many colons are rejected */
|
||||||
START_TEST(test_ns_double_colon) {
|
START_TEST(test_ns_double_colon) {
|
||||||
const char *text = "<foo:e xmlns:foo='http://example.org/' foo:a:b='bar' />";
|
const char *text = "<foo:e xmlns:foo='http://example.org/' foo:a:b='bar' />";
|
||||||
|
const enum XML_Status status
|
||||||
expect_failure(text, XML_ERROR_INVALID_TOKEN,
|
= _XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE);
|
||||||
"Double colon in attribute name not faulted");
|
#ifdef XML_NS
|
||||||
|
if ((status == XML_STATUS_OK)
|
||||||
|
|| (XML_GetErrorCode(g_parser) != XML_ERROR_INVALID_TOKEN)) {
|
||||||
|
fail("Double colon in attribute name not faulted"
|
||||||
|
" (despite active namespace support)");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (status != XML_STATUS_OK) {
|
||||||
|
fail("Double colon in attribute name faulted"
|
||||||
|
" (despite inactive namespace support");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
START_TEST(test_ns_double_colon_element) {
|
START_TEST(test_ns_double_colon_element) {
|
||||||
const char *text = "<foo:bar:e xmlns:foo='http://example.org/' />";
|
const char *text = "<foo:bar:e xmlns:foo='http://example.org/' />";
|
||||||
|
const enum XML_Status status
|
||||||
expect_failure(text, XML_ERROR_INVALID_TOKEN,
|
= _XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE);
|
||||||
"Double colon in element name not faulted");
|
#ifdef XML_NS
|
||||||
|
if ((status == XML_STATUS_OK)
|
||||||
|
|| (XML_GetErrorCode(g_parser) != XML_ERROR_INVALID_TOKEN)) {
|
||||||
|
fail("Double colon in element name not faulted"
|
||||||
|
" (despite active namespace support)");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (status != XML_STATUS_OK) {
|
||||||
|
fail("Double colon in element name faulted"
|
||||||
|
" (despite inactive namespace support");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
@ -7329,7 +7352,7 @@ START_TEST(test_misc_version) {
|
|||||||
fail("Version mismatch");
|
fail("Version mismatch");
|
||||||
|
|
||||||
#if ! defined(XML_UNICODE) || defined(XML_UNICODE_WCHAR_T)
|
#if ! defined(XML_UNICODE) || defined(XML_UNICODE_WCHAR_T)
|
||||||
if (xcstrcmp(version_text, XCS("expat_2.2.9"))) /* needs bump on releases */
|
if (xcstrcmp(version_text, XCS("expat_2.4.3"))) /* needs bump on releases */
|
||||||
fail("XML_*_VERSION in expat.h out of sync?\n");
|
fail("XML_*_VERSION in expat.h out of sync?\n");
|
||||||
#else
|
#else
|
||||||
/* If we have XML_UNICODE defined but not XML_UNICODE_WCHAR_T
|
/* If we have XML_UNICODE defined but not XML_UNICODE_WCHAR_T
|
||||||
@ -7480,7 +7503,6 @@ START_TEST(test_misc_stop_during_end_handler_issue_240_2) {
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
#ifdef XML_DTD
|
|
||||||
START_TEST(test_misc_deny_internal_entity_closing_doctype_issue_317) {
|
START_TEST(test_misc_deny_internal_entity_closing_doctype_issue_317) {
|
||||||
const char *const inputOne = "<!DOCTYPE d [\n"
|
const char *const inputOne = "<!DOCTYPE d [\n"
|
||||||
"<!ENTITY % e ']><d/>'>\n"
|
"<!ENTITY % e ']><d/>'>\n"
|
||||||
@ -7541,7 +7563,6 @@ START_TEST(test_misc_deny_internal_entity_closing_doctype_issue_317) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
alloc_setup(void) {
|
alloc_setup(void) {
|
||||||
@ -9817,6 +9838,15 @@ START_TEST(test_nsalloc_parse_buffer) {
|
|||||||
|
|
||||||
/* Try a parse before the start of the world */
|
/* Try a parse before the start of the world */
|
||||||
/* (Exercises new code path) */
|
/* (Exercises new code path) */
|
||||||
|
if (XML_ParseBuffer(g_parser, 0, XML_FALSE) != XML_STATUS_ERROR)
|
||||||
|
fail("Pre-init XML_ParseBuffer not faulted");
|
||||||
|
if (XML_GetErrorCode(g_parser) != XML_ERROR_NO_BUFFER)
|
||||||
|
fail("Pre-init XML_ParseBuffer faulted for wrong reason");
|
||||||
|
|
||||||
|
buffer = XML_GetBuffer(g_parser, 1 /* any small number greater than 0 */);
|
||||||
|
if (buffer == NULL)
|
||||||
|
fail("Could not acquire parse buffer");
|
||||||
|
|
||||||
allocation_count = 0;
|
allocation_count = 0;
|
||||||
if (XML_ParseBuffer(g_parser, 0, XML_FALSE) != XML_STATUS_ERROR)
|
if (XML_ParseBuffer(g_parser, 0, XML_FALSE) != XML_STATUS_ERROR)
|
||||||
fail("Pre-init XML_ParseBuffer not faulted");
|
fail("Pre-init XML_ParseBuffer not faulted");
|
||||||
@ -11197,6 +11227,389 @@ START_TEST(test_nsalloc_prefixed_element) {
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
#if defined(XML_DTD)
|
||||||
|
typedef enum XML_Status (*XmlParseFunction)(XML_Parser, const char *, int, int);
|
||||||
|
|
||||||
|
struct AccountingTestCase {
|
||||||
|
const char *primaryText;
|
||||||
|
const char *firstExternalText; /* often NULL */
|
||||||
|
const char *secondExternalText; /* often NULL */
|
||||||
|
const unsigned long long expectedCountBytesIndirectExtra;
|
||||||
|
XML_Bool singleBytesWanted;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
accounting_external_entity_ref_handler(XML_Parser parser,
|
||||||
|
const XML_Char *context,
|
||||||
|
const XML_Char *base,
|
||||||
|
const XML_Char *systemId,
|
||||||
|
const XML_Char *publicId) {
|
||||||
|
UNUSED_P(context);
|
||||||
|
UNUSED_P(base);
|
||||||
|
UNUSED_P(publicId);
|
||||||
|
|
||||||
|
const struct AccountingTestCase *const testCase
|
||||||
|
= (const struct AccountingTestCase *)XML_GetUserData(parser);
|
||||||
|
|
||||||
|
const char *externalText = NULL;
|
||||||
|
if (xcstrcmp(systemId, XCS("first.ent")) == 0) {
|
||||||
|
externalText = testCase->firstExternalText;
|
||||||
|
} else if (xcstrcmp(systemId, XCS("second.ent")) == 0) {
|
||||||
|
externalText = testCase->secondExternalText;
|
||||||
|
} else {
|
||||||
|
assert(! "systemId is neither \"first.ent\" nor \"second.ent\"");
|
||||||
|
}
|
||||||
|
assert(externalText);
|
||||||
|
|
||||||
|
XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0);
|
||||||
|
assert(entParser);
|
||||||
|
|
||||||
|
const XmlParseFunction xmlParseFunction
|
||||||
|
= testCase->singleBytesWanted ? _XML_Parse_SINGLE_BYTES : XML_Parse;
|
||||||
|
|
||||||
|
const enum XML_Status status = xmlParseFunction(
|
||||||
|
entParser, externalText, (int)strlen(externalText), XML_TRUE);
|
||||||
|
|
||||||
|
XML_ParserFree(entParser);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(test_accounting_precision) {
|
||||||
|
const XML_Bool filled_later = XML_TRUE; /* value is arbitrary */
|
||||||
|
struct AccountingTestCase cases[] = {
|
||||||
|
{"<e/>", NULL, NULL, 0, 0},
|
||||||
|
{"<e></e>", NULL, NULL, 0, 0},
|
||||||
|
|
||||||
|
/* Attributes */
|
||||||
|
{"<e k1=\"v2\" k2=\"v2\"/>", NULL, NULL, 0, filled_later},
|
||||||
|
{"<e k1=\"v2\" k2=\"v2\"></e>", NULL, NULL, 0, 0},
|
||||||
|
{"<p:e xmlns:p=\"https://domain.invalid/\" />", NULL, NULL, 0,
|
||||||
|
filled_later},
|
||||||
|
{"<e k=\"&'><"\" />", NULL, NULL,
|
||||||
|
sizeof(XML_Char) * 5 /* number of predefined entites */, filled_later},
|
||||||
|
{"<e1 xmlns='https://example.org/'>\n"
|
||||||
|
" <e2 xmlns=''/>\n"
|
||||||
|
"</e1>",
|
||||||
|
NULL, NULL, 0, filled_later},
|
||||||
|
|
||||||
|
/* Text */
|
||||||
|
{"<e>text</e>", NULL, NULL, 0, filled_later},
|
||||||
|
{"<e1><e2>text1<e3/>text2</e2></e1>", NULL, NULL, 0, filled_later},
|
||||||
|
{"<e>&'><"</e>", NULL, NULL,
|
||||||
|
sizeof(XML_Char) * 5 /* number of predefined entites */, filled_later},
|
||||||
|
{"<e>A)</e>", NULL, NULL, 0, filled_later},
|
||||||
|
|
||||||
|
/* Prolog */
|
||||||
|
{"<?xml version=\"1.0\"?><root/>", NULL, NULL, 0, filled_later},
|
||||||
|
|
||||||
|
/* Whitespace */
|
||||||
|
{" <e1> <e2> </e2> </e1> ", NULL, NULL, 0, filled_later},
|
||||||
|
{"<e1 ><e2 /></e1 >", NULL, NULL, 0, filled_later},
|
||||||
|
{"<e1><e2 k = \"v\"/><e3 k = 'v'/></e1>", NULL, NULL, 0, filled_later},
|
||||||
|
|
||||||
|
/* Comments */
|
||||||
|
{"<!-- Comment --><e><!-- Comment --></e>", NULL, NULL, 0, filled_later},
|
||||||
|
|
||||||
|
/* Processing instructions */
|
||||||
|
{"<?xml-stylesheet type=\"text/xsl\" href=\"https://domain.invalid/\" media=\"all\"?><e/>",
|
||||||
|
NULL, NULL, 0, filled_later},
|
||||||
|
{"<?pi0?><?pi1 ?><?pi2 ?><!DOCTYPE r SYSTEM 'first.ent'><r/>",
|
||||||
|
"<?pi3?><!ENTITY % e1 SYSTEM 'second.ent'><?pi4?>%e1;<?pi5?>", "<?pi6?>",
|
||||||
|
0, filled_later},
|
||||||
|
|
||||||
|
/* CDATA */
|
||||||
|
{"<e><![CDATA[one two three]]></e>", NULL, NULL, 0, filled_later},
|
||||||
|
/* The following is the essence of this OSS-Fuzz finding:
|
||||||
|
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34302
|
||||||
|
https://oss-fuzz.com/testcase-detail/4860575394955264
|
||||||
|
*/
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
"<!ENTITY e \"111<![CDATA[2 <= 2]]>333\">\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r>&e;</r>\n",
|
||||||
|
NULL, NULL, sizeof(XML_Char) * strlen("111<![CDATA[2 <= 2]]>333"),
|
||||||
|
filled_later},
|
||||||
|
|
||||||
|
/* Conditional sections */
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
"<!ENTITY % draft 'INCLUDE'>\n"
|
||||||
|
"<!ENTITY % final 'IGNORE'>\n"
|
||||||
|
"<!ENTITY % import SYSTEM \"first.ent\">\n"
|
||||||
|
"%import;\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r/>\n",
|
||||||
|
"<![%draft;[<!--1-->]]>\n"
|
||||||
|
"<![%final;[<!--22-->]]>",
|
||||||
|
NULL, sizeof(XML_Char) * (strlen("INCLUDE") + strlen("IGNORE")),
|
||||||
|
filled_later},
|
||||||
|
|
||||||
|
/* General entities */
|
||||||
|
{"<!DOCTYPE root [\n"
|
||||||
|
"<!ENTITY nine \"123456789\">\n"
|
||||||
|
"]>\n"
|
||||||
|
"<root>&nine;</root>",
|
||||||
|
NULL, NULL, sizeof(XML_Char) * strlen("123456789"), filled_later},
|
||||||
|
{"<!DOCTYPE root [\n"
|
||||||
|
"<!ENTITY nine \"123456789\">\n"
|
||||||
|
"]>\n"
|
||||||
|
"<root k1=\"&nine;\"/>",
|
||||||
|
NULL, NULL, sizeof(XML_Char) * strlen("123456789"), filled_later},
|
||||||
|
{"<!DOCTYPE root [\n"
|
||||||
|
"<!ENTITY nine \"123456789\">\n"
|
||||||
|
"<!ENTITY nine2 \"&nine;&nine;\">\n"
|
||||||
|
"]>\n"
|
||||||
|
"<root>&nine2;&nine2;&nine2;</root>",
|
||||||
|
NULL, NULL,
|
||||||
|
sizeof(XML_Char) * 3 /* calls to &nine2; */ * 2 /* calls to &nine; */
|
||||||
|
* (strlen("&nine;") + strlen("123456789")),
|
||||||
|
filled_later},
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
" <!ENTITY five SYSTEM 'first.ent'>\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r>&five;</r>",
|
||||||
|
"12345", NULL, 0, filled_later},
|
||||||
|
|
||||||
|
/* Parameter entities */
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
"<!ENTITY % comment \"<!---->\">\n"
|
||||||
|
"%comment;\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r/>",
|
||||||
|
NULL, NULL, sizeof(XML_Char) * strlen("<!---->"), filled_later},
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
"<!ENTITY % ninedef \"<!ENTITY nine "123456789">\">\n"
|
||||||
|
"%ninedef;\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r>&nine;</r>",
|
||||||
|
NULL, NULL,
|
||||||
|
sizeof(XML_Char)
|
||||||
|
* (strlen("<!ENTITY nine \"123456789\">") + strlen("123456789")),
|
||||||
|
filled_later},
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
"<!ENTITY % comment \"<!--1-->\">\n"
|
||||||
|
"<!ENTITY % comment2 \"%comment;<!--22-->%comment;\">\n"
|
||||||
|
"%comment2;\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r/>\n",
|
||||||
|
NULL, NULL,
|
||||||
|
sizeof(XML_Char)
|
||||||
|
* (strlen("%comment;<!--22-->%comment;") + 2 * strlen("<!--1-->")),
|
||||||
|
filled_later},
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
" <!ENTITY % five \"12345\">\n"
|
||||||
|
" <!ENTITY % five2def \"<!ENTITY five2 "[%five;][%five;]]]]">\">\n"
|
||||||
|
" %five2def;\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r>&five2;</r>",
|
||||||
|
NULL, NULL, /* from "%five2def;": */
|
||||||
|
sizeof(XML_Char)
|
||||||
|
* (strlen("<!ENTITY five2 \"[%five;][%five;]]]]\">")
|
||||||
|
+ 2 /* calls to "%five;" */ * strlen("12345")
|
||||||
|
+ /* from "&five2;": */ strlen("[12345][12345]]]]")),
|
||||||
|
filled_later},
|
||||||
|
{"<!DOCTYPE r SYSTEM \"first.ent\">\n"
|
||||||
|
"<r/>",
|
||||||
|
"<!ENTITY % comment '<!--1-->'>\n"
|
||||||
|
"<!ENTITY % comment2 '<!--22-->%comment;<!--22-->%comment;<!--22-->'>\n"
|
||||||
|
"%comment2;",
|
||||||
|
NULL,
|
||||||
|
sizeof(XML_Char)
|
||||||
|
* (strlen("<!--22-->%comment;<!--22-->%comment;<!--22-->")
|
||||||
|
+ 2 /* calls to "%comment;" */ * strlen("<!---->")),
|
||||||
|
filled_later},
|
||||||
|
{"<!DOCTYPE r SYSTEM 'first.ent'>\n"
|
||||||
|
"<r/>",
|
||||||
|
"<!ENTITY % e1 PUBLIC 'foo' 'second.ent'>\n"
|
||||||
|
"<!ENTITY % e2 '<!--22-->%e1;<!--22-->'>\n"
|
||||||
|
"%e2;\n",
|
||||||
|
"<!--1-->", sizeof(XML_Char) * strlen("<!--22--><!--1--><!--22-->"),
|
||||||
|
filled_later},
|
||||||
|
{
|
||||||
|
"<!DOCTYPE r SYSTEM 'first.ent'>\n"
|
||||||
|
"<r/>",
|
||||||
|
"<!ENTITY % e1 SYSTEM 'second.ent'>\n"
|
||||||
|
"<!ENTITY % e2 '%e1;'>",
|
||||||
|
"<?xml version='1.0' encoding='utf-8'?>\n"
|
||||||
|
"hello\n"
|
||||||
|
"xml" /* without trailing newline! */,
|
||||||
|
0,
|
||||||
|
filled_later,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<!DOCTYPE r SYSTEM 'first.ent'>\n"
|
||||||
|
"<r/>",
|
||||||
|
"<!ENTITY % e1 SYSTEM 'second.ent'>\n"
|
||||||
|
"<!ENTITY % e2 '%e1;'>",
|
||||||
|
"<?xml version='1.0' encoding='utf-8'?>\n"
|
||||||
|
"hello\n"
|
||||||
|
"xml\n" /* with trailing newline! */,
|
||||||
|
0,
|
||||||
|
filled_later,
|
||||||
|
},
|
||||||
|
{"<!DOCTYPE doc SYSTEM 'first.ent'>\n"
|
||||||
|
"<doc></doc>\n",
|
||||||
|
"<!ELEMENT doc EMPTY>\n"
|
||||||
|
"<!ENTITY % e1 SYSTEM 'second.ent'>\n"
|
||||||
|
"<!ENTITY % e2 '%e1;'>\n"
|
||||||
|
"%e1;\n",
|
||||||
|
"\xEF\xBB\xBF<!ATTLIST doc a1 CDATA 'value'>" /* UTF-8 BOM */,
|
||||||
|
strlen("\xEF\xBB\xBF<!ATTLIST doc a1 CDATA 'value'>"), filled_later},
|
||||||
|
{"<!DOCTYPE r [\n"
|
||||||
|
" <!ENTITY five SYSTEM 'first.ent'>\n"
|
||||||
|
"]>\n"
|
||||||
|
"<r>&five;</r>",
|
||||||
|
"\xEF\xBB\xBF" /* UTF-8 BOM */, NULL, 0, filled_later},
|
||||||
|
};
|
||||||
|
|
||||||
|
const size_t countCases = sizeof(cases) / sizeof(cases[0]);
|
||||||
|
size_t u = 0;
|
||||||
|
for (; u < countCases; u++) {
|
||||||
|
size_t v = 0;
|
||||||
|
for (; v < 2; v++) {
|
||||||
|
const XML_Bool singleBytesWanted = (v == 0) ? XML_FALSE : XML_TRUE;
|
||||||
|
const unsigned long long expectedCountBytesDirect
|
||||||
|
= strlen(cases[u].primaryText);
|
||||||
|
const unsigned long long expectedCountBytesIndirect
|
||||||
|
= (cases[u].firstExternalText ? strlen(cases[u].firstExternalText)
|
||||||
|
: 0)
|
||||||
|
+ (cases[u].secondExternalText ? strlen(cases[u].secondExternalText)
|
||||||
|
: 0)
|
||||||
|
+ cases[u].expectedCountBytesIndirectExtra;
|
||||||
|
|
||||||
|
XML_Parser parser = XML_ParserCreate(NULL);
|
||||||
|
XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||||
|
if (cases[u].firstExternalText) {
|
||||||
|
XML_SetExternalEntityRefHandler(parser,
|
||||||
|
accounting_external_entity_ref_handler);
|
||||||
|
XML_SetUserData(parser, (void *)&cases[u]);
|
||||||
|
cases[u].singleBytesWanted = singleBytesWanted;
|
||||||
|
}
|
||||||
|
|
||||||
|
const XmlParseFunction xmlParseFunction
|
||||||
|
= singleBytesWanted ? _XML_Parse_SINGLE_BYTES : XML_Parse;
|
||||||
|
|
||||||
|
enum XML_Status status
|
||||||
|
= xmlParseFunction(parser, cases[u].primaryText,
|
||||||
|
(int)strlen(cases[u].primaryText), XML_TRUE);
|
||||||
|
if (status != XML_STATUS_OK) {
|
||||||
|
_xml_failure(parser, __FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
const unsigned long long actualCountBytesDirect
|
||||||
|
= testingAccountingGetCountBytesDirect(parser);
|
||||||
|
const unsigned long long actualCountBytesIndirect
|
||||||
|
= testingAccountingGetCountBytesIndirect(parser);
|
||||||
|
|
||||||
|
XML_ParserFree(parser);
|
||||||
|
|
||||||
|
if (actualCountBytesDirect != expectedCountBytesDirect) {
|
||||||
|
fprintf(
|
||||||
|
stderr,
|
||||||
|
"Document " EXPAT_FMT_SIZE_T("") " of " EXPAT_FMT_SIZE_T("") ", %s: Expected " EXPAT_FMT_ULL(
|
||||||
|
"") " count direct bytes, got " EXPAT_FMT_ULL("") " instead.\n",
|
||||||
|
u + 1, countCases, singleBytesWanted ? "single bytes" : "chunks",
|
||||||
|
expectedCountBytesDirect, actualCountBytesDirect);
|
||||||
|
fail("Count of direct bytes is off");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actualCountBytesIndirect != expectedCountBytesIndirect) {
|
||||||
|
fprintf(
|
||||||
|
stderr,
|
||||||
|
"Document " EXPAT_FMT_SIZE_T("") " of " EXPAT_FMT_SIZE_T("") ", %s: Expected " EXPAT_FMT_ULL(
|
||||||
|
"") " count indirect bytes, got " EXPAT_FMT_ULL("") " instead.\n",
|
||||||
|
u + 1, countCases, singleBytesWanted ? "single bytes" : "chunks",
|
||||||
|
expectedCountBytesIndirect, actualCountBytesIndirect);
|
||||||
|
fail("Count of indirect bytes is off");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_billion_laughs_attack_protection_api) {
|
||||||
|
XML_Parser parserWithoutParent = XML_ParserCreate(NULL);
|
||||||
|
XML_Parser parserWithParent
|
||||||
|
= XML_ExternalEntityParserCreate(parserWithoutParent, NULL, NULL);
|
||||||
|
if (parserWithoutParent == NULL)
|
||||||
|
fail("parserWithoutParent is NULL");
|
||||||
|
if (parserWithParent == NULL)
|
||||||
|
fail("parserWithParent is NULL");
|
||||||
|
|
||||||
|
// XML_SetBillionLaughsAttackProtectionMaximumAmplification, error cases
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(NULL, 123.0f)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with NULL parser is NOT supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(parserWithParent,
|
||||||
|
123.0f)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with non-root parser is NOT supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parserWithoutParent, NAN)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with NaN limit is NOT supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parserWithoutParent, -1.0f)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with negative limit is NOT supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parserWithoutParent, 0.9f)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with positive limit <1.0 is NOT supposed to succeed");
|
||||||
|
|
||||||
|
// XML_SetBillionLaughsAttackProtectionMaximumAmplification, success cases
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parserWithoutParent, 1.0f)
|
||||||
|
== XML_FALSE)
|
||||||
|
fail("Call with positive limit >=1.0 is supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parserWithoutParent, 123456.789f)
|
||||||
|
== XML_FALSE)
|
||||||
|
fail("Call with positive limit >=1.0 is supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parserWithoutParent, INFINITY)
|
||||||
|
== XML_FALSE)
|
||||||
|
fail("Call with positive limit >=1.0 is supposed to succeed");
|
||||||
|
|
||||||
|
// XML_SetBillionLaughsAttackProtectionActivationThreshold, error cases
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionActivationThreshold(NULL, 123)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with NULL parser is NOT supposed to succeed");
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionActivationThreshold(parserWithParent,
|
||||||
|
123)
|
||||||
|
== XML_TRUE)
|
||||||
|
fail("Call with non-root parser is NOT supposed to succeed");
|
||||||
|
|
||||||
|
// XML_SetBillionLaughsAttackProtectionActivationThreshold, success cases
|
||||||
|
if (XML_SetBillionLaughsAttackProtectionActivationThreshold(
|
||||||
|
parserWithoutParent, 123)
|
||||||
|
== XML_FALSE)
|
||||||
|
fail("Call with non-NULL parentless parser is supposed to succeed");
|
||||||
|
|
||||||
|
XML_ParserFree(parserWithParent);
|
||||||
|
XML_ParserFree(parserWithoutParent);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_helper_unsigned_char_to_printable) {
|
||||||
|
// Smoke test
|
||||||
|
unsigned char uc = 0;
|
||||||
|
for (; uc < (unsigned char)-1; uc++) {
|
||||||
|
const char *const printable = unsignedCharToPrintable(uc);
|
||||||
|
if (printable == NULL)
|
||||||
|
fail("unsignedCharToPrintable returned NULL");
|
||||||
|
if (strlen(printable) < (size_t)1)
|
||||||
|
fail("unsignedCharToPrintable returned empty string");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Two concrete samples
|
||||||
|
if (strcmp(unsignedCharToPrintable('A'), "A") != 0)
|
||||||
|
fail("unsignedCharToPrintable result mistaken");
|
||||||
|
if (strcmp(unsignedCharToPrintable('\\'), "\\\\") != 0)
|
||||||
|
fail("unsignedCharToPrintable result mistaken");
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
#endif // defined(XML_DTD)
|
||||||
|
|
||||||
static Suite *
|
static Suite *
|
||||||
make_suite(void) {
|
make_suite(void) {
|
||||||
Suite *s = suite_create("basic");
|
Suite *s = suite_create("basic");
|
||||||
@ -11205,6 +11618,9 @@ make_suite(void) {
|
|||||||
TCase *tc_misc = tcase_create("miscellaneous tests");
|
TCase *tc_misc = tcase_create("miscellaneous tests");
|
||||||
TCase *tc_alloc = tcase_create("allocation tests");
|
TCase *tc_alloc = tcase_create("allocation tests");
|
||||||
TCase *tc_nsalloc = tcase_create("namespace allocation tests");
|
TCase *tc_nsalloc = tcase_create("namespace allocation tests");
|
||||||
|
#if defined(XML_DTD)
|
||||||
|
TCase *tc_accounting = tcase_create("accounting tests");
|
||||||
|
#endif
|
||||||
|
|
||||||
suite_add_tcase(s, tc_basic);
|
suite_add_tcase(s, tc_basic);
|
||||||
tcase_add_checked_fixture(tc_basic, basic_setup, basic_teardown);
|
tcase_add_checked_fixture(tc_basic, basic_setup, basic_teardown);
|
||||||
@ -11259,13 +11675,14 @@ make_suite(void) {
|
|||||||
test_wfc_undeclared_entity_with_external_subset_standalone);
|
test_wfc_undeclared_entity_with_external_subset_standalone);
|
||||||
tcase_add_test(tc_basic, test_entity_with_external_subset_unless_standalone);
|
tcase_add_test(tc_basic, test_entity_with_external_subset_unless_standalone);
|
||||||
tcase_add_test(tc_basic, test_wfc_no_recursive_entity_refs);
|
tcase_add_test(tc_basic, test_wfc_no_recursive_entity_refs);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_set_encoding);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_set_encoding);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_no_handler);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_no_handler);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_set_bom);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_set_bom);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_bad_encoding);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_bad_encoding);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_bad_encoding_2);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_bad_encoding_2);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_invalid_parse);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_invalid_parse);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_invalid_suspended_parse);
|
tcase_add_test__ifdef_xml_dtd(tc_basic,
|
||||||
|
test_ext_entity_invalid_suspended_parse);
|
||||||
tcase_add_test(tc_basic, test_dtd_default_handling);
|
tcase_add_test(tc_basic, test_dtd_default_handling);
|
||||||
tcase_add_test(tc_basic, test_dtd_attr_handling);
|
tcase_add_test(tc_basic, test_dtd_attr_handling);
|
||||||
tcase_add_test(tc_basic, test_empty_ns_without_namespaces);
|
tcase_add_test(tc_basic, test_empty_ns_without_namespaces);
|
||||||
@ -11277,25 +11694,22 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_good_cdata_utf16);
|
tcase_add_test(tc_basic, test_good_cdata_utf16);
|
||||||
tcase_add_test(tc_basic, test_good_cdata_utf16_le);
|
tcase_add_test(tc_basic, test_good_cdata_utf16_le);
|
||||||
tcase_add_test(tc_basic, test_long_cdata_utf16);
|
tcase_add_test(tc_basic, test_long_cdata_utf16);
|
||||||
#ifndef XML_MIN_SIZE /* FIXME workaround -DXML_MIN_SIZE + ASan (issue #332) */
|
|
||||||
tcase_add_test(tc_basic, test_multichar_cdata_utf16);
|
tcase_add_test(tc_basic, test_multichar_cdata_utf16);
|
||||||
#endif
|
|
||||||
tcase_add_test(tc_basic, test_utf16_bad_surrogate_pair);
|
tcase_add_test(tc_basic, test_utf16_bad_surrogate_pair);
|
||||||
tcase_add_test(tc_basic, test_bad_cdata);
|
tcase_add_test(tc_basic, test_bad_cdata);
|
||||||
#ifndef XML_MIN_SIZE /* FIXME workaround -DXML_MIN_SIZE + ASan (issue #332) */
|
|
||||||
tcase_add_test(tc_basic, test_bad_cdata_utf16);
|
tcase_add_test(tc_basic, test_bad_cdata_utf16);
|
||||||
#endif
|
|
||||||
tcase_add_test(tc_basic, test_stop_parser_between_cdata_calls);
|
tcase_add_test(tc_basic, test_stop_parser_between_cdata_calls);
|
||||||
tcase_add_test(tc_basic, test_suspend_parser_between_cdata_calls);
|
tcase_add_test(tc_basic, test_suspend_parser_between_cdata_calls);
|
||||||
tcase_add_test(tc_basic, test_memory_allocation);
|
tcase_add_test(tc_basic, test_memory_allocation);
|
||||||
tcase_add_test(tc_basic, test_default_current);
|
tcase_add_test(tc_basic, test_default_current);
|
||||||
tcase_add_test(tc_basic, test_dtd_elements);
|
tcase_add_test(tc_basic, test_dtd_elements);
|
||||||
tcase_add_test(tc_basic, test_set_foreign_dtd);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_set_foreign_dtd);
|
||||||
tcase_add_test(tc_basic, test_foreign_dtd_not_standalone);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_foreign_dtd_not_standalone);
|
||||||
tcase_add_test(tc_basic, test_invalid_foreign_dtd);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_invalid_foreign_dtd);
|
||||||
tcase_add_test(tc_basic, test_foreign_dtd_with_doctype);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_foreign_dtd_with_doctype);
|
||||||
tcase_add_test(tc_basic, test_foreign_dtd_without_external_subset);
|
tcase_add_test__ifdef_xml_dtd(tc_basic,
|
||||||
tcase_add_test(tc_basic, test_empty_foreign_dtd);
|
test_foreign_dtd_without_external_subset);
|
||||||
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_empty_foreign_dtd);
|
||||||
tcase_add_test(tc_basic, test_set_base);
|
tcase_add_test(tc_basic, test_set_base);
|
||||||
tcase_add_test(tc_basic, test_attributes);
|
tcase_add_test(tc_basic, test_attributes);
|
||||||
tcase_add_test(tc_basic, test_reset_in_entity);
|
tcase_add_test(tc_basic, test_reset_in_entity);
|
||||||
@ -11312,8 +11726,8 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_trailing_rsqb);
|
tcase_add_test(tc_basic, test_trailing_rsqb);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_trailing_rsqb);
|
tcase_add_test(tc_basic, test_ext_entity_trailing_rsqb);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_good_cdata);
|
tcase_add_test(tc_basic, test_ext_entity_good_cdata);
|
||||||
tcase_add_test(tc_basic, test_user_parameters);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_user_parameters);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_ref_parameter);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_ref_parameter);
|
||||||
tcase_add_test(tc_basic, test_empty_parse);
|
tcase_add_test(tc_basic, test_empty_parse);
|
||||||
tcase_add_test(tc_basic, test_get_buffer_1);
|
tcase_add_test(tc_basic, test_get_buffer_1);
|
||||||
tcase_add_test(tc_basic, test_get_buffer_2);
|
tcase_add_test(tc_basic, test_get_buffer_2);
|
||||||
@ -11321,25 +11735,26 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_byte_info_at_error);
|
tcase_add_test(tc_basic, test_byte_info_at_error);
|
||||||
tcase_add_test(tc_basic, test_byte_info_at_cdata);
|
tcase_add_test(tc_basic, test_byte_info_at_cdata);
|
||||||
tcase_add_test(tc_basic, test_predefined_entities);
|
tcase_add_test(tc_basic, test_predefined_entities);
|
||||||
tcase_add_test(tc_basic, test_invalid_tag_in_dtd);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_invalid_tag_in_dtd);
|
||||||
tcase_add_test(tc_basic, test_not_predefined_entities);
|
tcase_add_test(tc_basic, test_not_predefined_entities);
|
||||||
tcase_add_test(tc_basic, test_ignore_section);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section);
|
||||||
tcase_add_test(tc_basic, test_ignore_section_utf16);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section_utf16);
|
||||||
tcase_add_test(tc_basic, test_ignore_section_utf16_be);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ignore_section_utf16_be);
|
||||||
tcase_add_test(tc_basic, test_bad_ignore_section);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_bad_ignore_section);
|
||||||
tcase_add_test(tc_basic, test_external_entity_values);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_external_entity_values);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_not_standalone);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_not_standalone);
|
||||||
tcase_add_test(tc_basic, test_ext_entity_value_abort);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_value_abort);
|
||||||
tcase_add_test(tc_basic, test_bad_public_doctype);
|
tcase_add_test(tc_basic, test_bad_public_doctype);
|
||||||
tcase_add_test(tc_basic, test_attribute_enum_value);
|
tcase_add_test(tc_basic, test_attribute_enum_value);
|
||||||
tcase_add_test(tc_basic, test_predefined_entity_redefinition);
|
tcase_add_test(tc_basic, test_predefined_entity_redefinition);
|
||||||
tcase_add_test(tc_basic, test_dtd_stop_processing);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_dtd_stop_processing);
|
||||||
tcase_add_test(tc_basic, test_public_notation_no_sysid);
|
tcase_add_test(tc_basic, test_public_notation_no_sysid);
|
||||||
tcase_add_test(tc_basic, test_nested_groups);
|
tcase_add_test(tc_basic, test_nested_groups);
|
||||||
tcase_add_test(tc_basic, test_group_choice);
|
tcase_add_test(tc_basic, test_group_choice);
|
||||||
tcase_add_test(tc_basic, test_standalone_parameter_entity);
|
tcase_add_test(tc_basic, test_standalone_parameter_entity);
|
||||||
tcase_add_test(tc_basic, test_skipped_parameter_entity);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_skipped_parameter_entity);
|
||||||
tcase_add_test(tc_basic, test_recursive_external_parameter_entity);
|
tcase_add_test__ifdef_xml_dtd(tc_basic,
|
||||||
|
test_recursive_external_parameter_entity);
|
||||||
tcase_add_test(tc_basic, test_undefined_ext_entity_in_external_dtd);
|
tcase_add_test(tc_basic, test_undefined_ext_entity_in_external_dtd);
|
||||||
tcase_add_test(tc_basic, test_suspend_xdecl);
|
tcase_add_test(tc_basic, test_suspend_xdecl);
|
||||||
tcase_add_test(tc_basic, test_abort_epilog);
|
tcase_add_test(tc_basic, test_abort_epilog);
|
||||||
@ -11349,9 +11764,9 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_unfinished_epilog);
|
tcase_add_test(tc_basic, test_unfinished_epilog);
|
||||||
tcase_add_test(tc_basic, test_partial_char_in_epilog);
|
tcase_add_test(tc_basic, test_partial_char_in_epilog);
|
||||||
tcase_add_test(tc_basic, test_hash_collision);
|
tcase_add_test(tc_basic, test_hash_collision);
|
||||||
tcase_add_test(tc_basic, test_suspend_resume_internal_entity);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_suspend_resume_internal_entity);
|
||||||
tcase_add_test(tc_basic, test_resume_entity_with_syntax_error);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_resume_entity_with_syntax_error);
|
||||||
tcase_add_test(tc_basic, test_suspend_resume_parameter_entity);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_suspend_resume_parameter_entity);
|
||||||
tcase_add_test(tc_basic, test_restart_on_error);
|
tcase_add_test(tc_basic, test_restart_on_error);
|
||||||
tcase_add_test(tc_basic, test_reject_lt_in_attribute_value);
|
tcase_add_test(tc_basic, test_reject_lt_in_attribute_value);
|
||||||
tcase_add_test(tc_basic, test_reject_unfinished_param_in_att_value);
|
tcase_add_test(tc_basic, test_reject_unfinished_param_in_att_value);
|
||||||
@ -11360,7 +11775,7 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_skipped_external_entity);
|
tcase_add_test(tc_basic, test_skipped_external_entity);
|
||||||
tcase_add_test(tc_basic, test_skipped_null_loaded_ext_entity);
|
tcase_add_test(tc_basic, test_skipped_null_loaded_ext_entity);
|
||||||
tcase_add_test(tc_basic, test_skipped_unloaded_ext_entity);
|
tcase_add_test(tc_basic, test_skipped_unloaded_ext_entity);
|
||||||
tcase_add_test(tc_basic, test_param_entity_with_trailing_cr);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_param_entity_with_trailing_cr);
|
||||||
tcase_add_test(tc_basic, test_invalid_character_entity);
|
tcase_add_test(tc_basic, test_invalid_character_entity);
|
||||||
tcase_add_test(tc_basic, test_invalid_character_entity_2);
|
tcase_add_test(tc_basic, test_invalid_character_entity_2);
|
||||||
tcase_add_test(tc_basic, test_invalid_character_entity_3);
|
tcase_add_test(tc_basic, test_invalid_character_entity_3);
|
||||||
@ -11403,7 +11818,7 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_utf16_attribute);
|
tcase_add_test(tc_basic, test_utf16_attribute);
|
||||||
tcase_add_test(tc_basic, test_utf16_second_attr);
|
tcase_add_test(tc_basic, test_utf16_second_attr);
|
||||||
tcase_add_test(tc_basic, test_attr_after_solidus);
|
tcase_add_test(tc_basic, test_attr_after_solidus);
|
||||||
tcase_add_test(tc_basic, test_utf16_pe);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_utf16_pe);
|
||||||
tcase_add_test(tc_basic, test_bad_attr_desc_keyword);
|
tcase_add_test(tc_basic, test_bad_attr_desc_keyword);
|
||||||
tcase_add_test(tc_basic, test_bad_attr_desc_keyword_utf16);
|
tcase_add_test(tc_basic, test_bad_attr_desc_keyword_utf16);
|
||||||
tcase_add_test(tc_basic, test_bad_doctype);
|
tcase_add_test(tc_basic, test_bad_doctype);
|
||||||
@ -11411,11 +11826,11 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_basic, test_bad_doctype_plus);
|
tcase_add_test(tc_basic, test_bad_doctype_plus);
|
||||||
tcase_add_test(tc_basic, test_bad_doctype_star);
|
tcase_add_test(tc_basic, test_bad_doctype_star);
|
||||||
tcase_add_test(tc_basic, test_bad_doctype_query);
|
tcase_add_test(tc_basic, test_bad_doctype_query);
|
||||||
tcase_add_test(tc_basic, test_unknown_encoding_bad_ignore);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_unknown_encoding_bad_ignore);
|
||||||
tcase_add_test(tc_basic, test_entity_in_utf16_be_attr);
|
tcase_add_test(tc_basic, test_entity_in_utf16_be_attr);
|
||||||
tcase_add_test(tc_basic, test_entity_in_utf16_le_attr);
|
tcase_add_test(tc_basic, test_entity_in_utf16_le_attr);
|
||||||
tcase_add_test(tc_basic, test_entity_public_utf16_be);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_entity_public_utf16_be);
|
||||||
tcase_add_test(tc_basic, test_entity_public_utf16_le);
|
tcase_add_test__ifdef_xml_dtd(tc_basic, test_entity_public_utf16_le);
|
||||||
tcase_add_test(tc_basic, test_short_doctype);
|
tcase_add_test(tc_basic, test_short_doctype);
|
||||||
tcase_add_test(tc_basic, test_short_doctype_2);
|
tcase_add_test(tc_basic, test_short_doctype_2);
|
||||||
tcase_add_test(tc_basic, test_short_doctype_3);
|
tcase_add_test(tc_basic, test_short_doctype_3);
|
||||||
@ -11434,7 +11849,8 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_namespace, test_ns_tagname_overwrite);
|
tcase_add_test(tc_namespace, test_ns_tagname_overwrite);
|
||||||
tcase_add_test(tc_namespace, test_ns_tagname_overwrite_triplet);
|
tcase_add_test(tc_namespace, test_ns_tagname_overwrite_triplet);
|
||||||
tcase_add_test(tc_namespace, test_start_ns_clears_start_element);
|
tcase_add_test(tc_namespace, test_start_ns_clears_start_element);
|
||||||
tcase_add_test(tc_namespace, test_default_ns_from_ext_subset_and_ext_ge);
|
tcase_add_test__ifdef_xml_dtd(tc_namespace,
|
||||||
|
test_default_ns_from_ext_subset_and_ext_ge);
|
||||||
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_1);
|
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_1);
|
||||||
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_2);
|
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_2);
|
||||||
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_3);
|
tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_3);
|
||||||
@ -11475,10 +11891,8 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_misc, test_misc_utf16le);
|
tcase_add_test(tc_misc, test_misc_utf16le);
|
||||||
tcase_add_test(tc_misc, test_misc_stop_during_end_handler_issue_240_1);
|
tcase_add_test(tc_misc, test_misc_stop_during_end_handler_issue_240_1);
|
||||||
tcase_add_test(tc_misc, test_misc_stop_during_end_handler_issue_240_2);
|
tcase_add_test(tc_misc, test_misc_stop_during_end_handler_issue_240_2);
|
||||||
#ifdef XML_DTD
|
tcase_add_test__ifdef_xml_dtd(
|
||||||
tcase_add_test(tc_misc,
|
tc_misc, test_misc_deny_internal_entity_closing_doctype_issue_317);
|
||||||
test_misc_deny_internal_entity_closing_doctype_issue_317);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
suite_add_tcase(s, tc_alloc);
|
suite_add_tcase(s, tc_alloc);
|
||||||
tcase_add_checked_fixture(tc_alloc, alloc_setup, alloc_teardown);
|
tcase_add_checked_fixture(tc_alloc, alloc_setup, alloc_teardown);
|
||||||
@ -11489,45 +11903,49 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_alloc, test_alloc_parse_pi_3);
|
tcase_add_test(tc_alloc, test_alloc_parse_pi_3);
|
||||||
tcase_add_test(tc_alloc, test_alloc_parse_comment);
|
tcase_add_test(tc_alloc, test_alloc_parse_comment);
|
||||||
tcase_add_test(tc_alloc, test_alloc_parse_comment_2);
|
tcase_add_test(tc_alloc, test_alloc_parse_comment_2);
|
||||||
tcase_add_test(tc_alloc, test_alloc_create_external_parser);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_create_external_parser);
|
||||||
tcase_add_test(tc_alloc, test_alloc_run_external_parser);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_run_external_parser);
|
||||||
tcase_add_test(tc_alloc, test_alloc_dtd_copy_default_atts);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_dtd_copy_default_atts);
|
||||||
tcase_add_test(tc_alloc, test_alloc_external_entity);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_external_entity);
|
||||||
tcase_add_test(tc_alloc, test_alloc_ext_entity_set_encoding);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_ext_entity_set_encoding);
|
||||||
tcase_add_test(tc_alloc, test_alloc_internal_entity);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_internal_entity);
|
||||||
tcase_add_test(tc_alloc, test_alloc_dtd_default_handling);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_dtd_default_handling);
|
||||||
tcase_add_test(tc_alloc, test_alloc_explicit_encoding);
|
tcase_add_test(tc_alloc, test_alloc_explicit_encoding);
|
||||||
tcase_add_test(tc_alloc, test_alloc_set_base);
|
tcase_add_test(tc_alloc, test_alloc_set_base);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_buffer);
|
tcase_add_test(tc_alloc, test_alloc_realloc_buffer);
|
||||||
tcase_add_test(tc_alloc, test_alloc_ext_entity_realloc_buffer);
|
tcase_add_test(tc_alloc, test_alloc_ext_entity_realloc_buffer);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_many_attributes);
|
tcase_add_test(tc_alloc, test_alloc_realloc_many_attributes);
|
||||||
tcase_add_test(tc_alloc, test_alloc_public_entity_value);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_public_entity_value);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_subst_public_entity_value);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc,
|
||||||
|
test_alloc_realloc_subst_public_entity_value);
|
||||||
tcase_add_test(tc_alloc, test_alloc_parse_public_doctype);
|
tcase_add_test(tc_alloc, test_alloc_parse_public_doctype);
|
||||||
tcase_add_test(tc_alloc, test_alloc_parse_public_doctype_long_name);
|
tcase_add_test(tc_alloc, test_alloc_parse_public_doctype_long_name);
|
||||||
tcase_add_test(tc_alloc, test_alloc_set_foreign_dtd);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_set_foreign_dtd);
|
||||||
tcase_add_test(tc_alloc, test_alloc_attribute_enum_value);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_attribute_enum_value);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_attribute_enum_value);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc,
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_implied_attribute);
|
test_alloc_realloc_attribute_enum_value);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_default_attribute);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_realloc_implied_attribute);
|
||||||
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_realloc_default_attribute);
|
||||||
tcase_add_test(tc_alloc, test_alloc_notation);
|
tcase_add_test(tc_alloc, test_alloc_notation);
|
||||||
tcase_add_test(tc_alloc, test_alloc_public_notation);
|
tcase_add_test(tc_alloc, test_alloc_public_notation);
|
||||||
tcase_add_test(tc_alloc, test_alloc_system_notation);
|
tcase_add_test(tc_alloc, test_alloc_system_notation);
|
||||||
tcase_add_test(tc_alloc, test_alloc_nested_groups);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_nested_groups);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_nested_groups);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_realloc_nested_groups);
|
||||||
tcase_add_test(tc_alloc, test_alloc_large_group);
|
tcase_add_test(tc_alloc, test_alloc_large_group);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_group_choice);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_realloc_group_choice);
|
||||||
tcase_add_test(tc_alloc, test_alloc_pi_in_epilog);
|
tcase_add_test(tc_alloc, test_alloc_pi_in_epilog);
|
||||||
tcase_add_test(tc_alloc, test_alloc_comment_in_epilog);
|
tcase_add_test(tc_alloc, test_alloc_comment_in_epilog);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_long_attribute_value);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc,
|
||||||
|
test_alloc_realloc_long_attribute_value);
|
||||||
tcase_add_test(tc_alloc, test_alloc_attribute_whitespace);
|
tcase_add_test(tc_alloc, test_alloc_attribute_whitespace);
|
||||||
tcase_add_test(tc_alloc, test_alloc_attribute_predefined_entity);
|
tcase_add_test(tc_alloc, test_alloc_attribute_predefined_entity);
|
||||||
tcase_add_test(tc_alloc, test_alloc_long_attr_default_with_char_ref);
|
tcase_add_test(tc_alloc, test_alloc_long_attr_default_with_char_ref);
|
||||||
tcase_add_test(tc_alloc, test_alloc_long_attr_value);
|
tcase_add_test(tc_alloc, test_alloc_long_attr_value);
|
||||||
tcase_add_test(tc_alloc, test_alloc_nested_entities);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_nested_entities);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_param_entity_newline);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc,
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_ce_extends_pe);
|
test_alloc_realloc_param_entity_newline);
|
||||||
tcase_add_test(tc_alloc, test_alloc_realloc_attributes);
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_realloc_ce_extends_pe);
|
||||||
|
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_realloc_attributes);
|
||||||
tcase_add_test(tc_alloc, test_alloc_long_doc_name);
|
tcase_add_test(tc_alloc, test_alloc_long_doc_name);
|
||||||
tcase_add_test(tc_alloc, test_alloc_long_base);
|
tcase_add_test(tc_alloc, test_alloc_long_base);
|
||||||
tcase_add_test(tc_alloc, test_alloc_long_public_id);
|
tcase_add_test(tc_alloc, test_alloc_long_public_id);
|
||||||
@ -11563,6 +11981,13 @@ make_suite(void) {
|
|||||||
tcase_add_test(tc_nsalloc, test_nsalloc_long_systemid_in_ext);
|
tcase_add_test(tc_nsalloc, test_nsalloc_long_systemid_in_ext);
|
||||||
tcase_add_test(tc_nsalloc, test_nsalloc_prefixed_element);
|
tcase_add_test(tc_nsalloc, test_nsalloc_prefixed_element);
|
||||||
|
|
||||||
|
#if defined(XML_DTD)
|
||||||
|
suite_add_tcase(s, tc_accounting);
|
||||||
|
tcase_add_test(tc_accounting, test_accounting_precision);
|
||||||
|
tcase_add_test(tc_accounting, test_billion_laughs_attack_protection_api);
|
||||||
|
tcase_add_test(tc_accounting, test_helper_unsigned_char_to_printable);
|
||||||
|
#endif
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 2013
|
|
||||||
VisualStudioVersion = 12.0.40629.0
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "runtests", "runtests.vcxproj", "{63D6D820-B526-4A5F-9605-9B8551FAC591}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Template|Win32 = Template|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{63D6D820-B526-4A5F-9605-9B8551FAC591}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{63D6D820-B526-4A5F-9605-9B8551FAC591}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{63D6D820-B526-4A5F-9605-9B8551FAC591}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{63D6D820-B526-4A5F-9605-9B8551FAC591}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{63D6D820-B526-4A5F-9605-9B8551FAC591}.Template|Win32.ActiveCfg = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
@ -9,8 +9,8 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2005 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,9 +30,7 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_EXPAT_CONFIG_H
|
|
||||||
#include "expat_config.h"
|
#include "expat_config.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
\___/_/\_\ .__/ \__,_|\__|
|
\___/_/\_\ .__/ \__,_|\__|
|
||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Copyright (c) 2000-2017 Expat development team
|
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
# Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -1,24 +1,55 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
# EXPAT TEST SCRIPT FOR W3C XML TEST SUITE
|
# EXPAT TEST SCRIPT FOR W3C XML TEST SUITE
|
||||||
|
#
|
||||||
# This script can be used to exercise Expat against the
|
# This script can be used to exercise Expat against the
|
||||||
# w3c.org xml test suite, available from
|
# w3c.org xml test suite, available from
|
||||||
# http://www.w3.org/XML/Test/xmlts20020606.zip.
|
# http://www.w3.org/XML/Test/xmlts20020606.zip.
|
||||||
|
#
|
||||||
# To run this script, first set XMLWF below so that xmlwf can be
|
# To run this script, first set XMLWF below so that xmlwf can be
|
||||||
# found, then set the output directory with OUTPUT.
|
# found, then set the output directory with OUTPUT.
|
||||||
|
#
|
||||||
# The script lists all test cases where Expat shows a discrepancy
|
# The script lists all test cases where Expat shows a discrepancy
|
||||||
# from the expected result. Test cases where only the canonical
|
# from the expected result. Test cases where only the canonical
|
||||||
# output differs are prefixed with "Output differs:", and a diff file
|
# output differs are prefixed with "Output differs:", and a diff file
|
||||||
# is generated in the appropriate subdirectory under $OUTPUT.
|
# is generated in the appropriate subdirectory under $OUTPUT.
|
||||||
|
#
|
||||||
# If there are output files provided, the script will use
|
# If there are output files provided, the script will use
|
||||||
# output from xmlwf and compare the desired output against it.
|
# output from xmlwf and compare the desired output against it.
|
||||||
# However, one has to take into account that the canonical output
|
# However, one has to take into account that the canonical output
|
||||||
# produced by xmlwf conforms to an older definition of canonical XML
|
# produced by xmlwf conforms to an older definition of canonical XML
|
||||||
# and does not generate notation declarations.
|
# and does not generate notation declarations.
|
||||||
|
#
|
||||||
|
# __ __ _
|
||||||
|
# ___\ \/ /_ __ __ _| |_
|
||||||
|
# / _ \\ /| '_ \ / _` | __|
|
||||||
|
# | __// \| |_) | (_| | |_
|
||||||
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
|
# |_| XML parser
|
||||||
|
#
|
||||||
|
# Copyright (c) 2002-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
# Copyright (c) 2002 Karl Waclawek <karl@waclawek.net>
|
||||||
|
# Copyright (c) 2008-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
# Licensed under the MIT license:
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -37,12 +37,13 @@ xmlwf_SOURCES = \
|
|||||||
codepage.c \
|
codepage.c \
|
||||||
@FILEMAP@.c
|
@FILEMAP@.c
|
||||||
|
|
||||||
xmlwf_CPPFLAGS = -I$(srcdir)/../lib
|
xmlwf_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||||
|
xmlwf_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||||
|
|
||||||
if MINGW
|
if MINGW
|
||||||
if UNICODE
|
if UNICODE
|
||||||
xmlwf_CPPFLAGS += -mwindows
|
xmlwf_CPPFLAGS += -mwindows
|
||||||
xmlwf_LDFLAGS = -municode
|
xmlwf_LDFLAGS += -municode
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Makefile.in generated by automake 1.16.1 from Makefile.am.
|
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
@ -22,7 +22,7 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Expat development team
|
# Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -120,6 +120,7 @@ build_triplet = @build@
|
|||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
bin_PROGRAMS = xmlwf$(EXEEXT)
|
bin_PROGRAMS = xmlwf$(EXEEXT)
|
||||||
@MINGW_TRUE@@UNICODE_TRUE@am__append_1 = -mwindows
|
@MINGW_TRUE@@UNICODE_TRUE@am__append_1 = -mwindows
|
||||||
|
@MINGW_TRUE@@UNICODE_TRUE@am__append_2 = -municode
|
||||||
subdir = xmlwf
|
subdir = xmlwf
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||||
@ -215,14 +216,16 @@ am__define_uniq_tagged_files = \
|
|||||||
unique=`for i in $$list; do \
|
unique=`for i in $$list; do \
|
||||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
done | $(am__uniquify_input)`
|
done | $(am__uniquify_input)`
|
||||||
ETAGS = etags
|
|
||||||
CTAGS = ctags
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
||||||
$(top_srcdir)/conftools/depcomp
|
$(top_srcdir)/conftools/depcomp
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
|
AM_CFLAGS = @AM_CFLAGS@
|
||||||
|
AM_CPPFLAGS = @AM_CPPFLAGS@
|
||||||
|
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
|
AM_LDFLAGS = @AM_LDFLAGS@
|
||||||
AR = @AR@
|
AR = @AR@
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
@ -232,8 +235,9 @@ AWK = @AWK@
|
|||||||
CC = @CC@
|
CC = @CC@
|
||||||
CCDEPMODE = @CCDEPMODE@
|
CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
CSCOPE = @CSCOPE@
|
||||||
|
CTAGS = @CTAGS@
|
||||||
CXX = @CXX@
|
CXX = @CXX@
|
||||||
CXXCPP = @CXXCPP@
|
CXXCPP = @CXXCPP@
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
CXXDEPMODE = @CXXDEPMODE@
|
||||||
@ -249,7 +253,15 @@ ECHO_C = @ECHO_C@
|
|||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
|
ETAGS = @ETAGS@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
EXPAT_ATTR_INFO = @EXPAT_ATTR_INFO@
|
||||||
|
EXPAT_CHAR_TYPE = @EXPAT_CHAR_TYPE@
|
||||||
|
EXPAT_CONTEXT_BYTES = @EXPAT_CONTEXT_BYTES@
|
||||||
|
EXPAT_DTD = @EXPAT_DTD@
|
||||||
|
EXPAT_LARGE_SIZE = @EXPAT_LARGE_SIZE@
|
||||||
|
EXPAT_MIN_SIZE = @EXPAT_MIN_SIZE@
|
||||||
|
EXPAT_NS = @EXPAT_NS@
|
||||||
FGREP = @FGREP@
|
FGREP = @FGREP@
|
||||||
FILEMAP = @FILEMAP@
|
FILEMAP = @FILEMAP@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
@ -262,6 +274,8 @@ LD = @LD@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBAGE = @LIBAGE@
|
LIBAGE = @LIBAGE@
|
||||||
LIBCURRENT = @LIBCURRENT@
|
LIBCURRENT = @LIBCURRENT@
|
||||||
|
LIBDIR_BASENAME = @LIBDIR_BASENAME@
|
||||||
|
LIBM = @LIBM@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
LIBREVISION = @LIBREVISION@
|
LIBREVISION = @LIBREVISION@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
@ -291,6 +305,9 @@ RANLIB = @RANLIB@
|
|||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
SO_MAJOR = @SO_MAJOR@
|
||||||
|
SO_MINOR = @SO_MINOR@
|
||||||
|
SO_PATCH = @SO_PATCH@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
@ -301,6 +318,7 @@ ac_ct_AR = @ac_ct_AR@
|
|||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||||
|
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
@ -338,6 +356,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -353,8 +372,8 @@ xmlwf_SOURCES = \
|
|||||||
codepage.c \
|
codepage.c \
|
||||||
@FILEMAP@.c
|
@FILEMAP@.c
|
||||||
|
|
||||||
xmlwf_CPPFLAGS = -I$(srcdir)/../lib $(am__append_1)
|
xmlwf_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib $(am__append_1)
|
||||||
@MINGW_TRUE@@UNICODE_TRUE@xmlwf_LDFLAGS = -municode
|
xmlwf_LDFLAGS = @AM_LDFLAGS@ @LIBM@ $(am__append_2)
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
codepage.h \
|
codepage.h \
|
||||||
ct.c \
|
ct.c \
|
||||||
@ -605,7 +624,6 @@ cscopelist-am: $(am__tagged_files)
|
|||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(BUILT_SOURCES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||||
|
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -38,9 +42,11 @@
|
|||||||
# define WIN32_LEAN_AND_MEAN 1
|
# define WIN32_LEAN_AND_MEAN 1
|
||||||
|
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
|
#endif /* defined(_WIN32) */
|
||||||
|
|
||||||
int
|
int
|
||||||
codepageMap(int cp, int *map) {
|
codepageMap(int cp, int *map) {
|
||||||
|
#if defined(_WIN32)
|
||||||
int i;
|
int i;
|
||||||
CPINFO info;
|
CPINFO info;
|
||||||
if (! GetCPInfo(cp, &info) || info.MaxCharSize > 2)
|
if (! GetCPInfo(cp, &info) || info.MaxCharSize > 2)
|
||||||
@ -68,32 +74,25 @@ codepageMap(int cp, int *map) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
#else
|
||||||
|
UNUSED_P(cp);
|
||||||
|
UNUSED_P(map);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
codepageConvert(int cp, const char *p) {
|
codepageConvert(int cp, const char *p) {
|
||||||
|
#if defined(_WIN32)
|
||||||
unsigned short c;
|
unsigned short c;
|
||||||
if (MultiByteToWideChar(cp, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, p, 2, &c,
|
if (MultiByteToWideChar(cp, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, p, 2, &c,
|
||||||
1)
|
1)
|
||||||
== 1)
|
== 1)
|
||||||
return c;
|
return c;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
#else
|
||||||
|
|
||||||
#else /* not _WIN32 */
|
|
||||||
|
|
||||||
int
|
|
||||||
codepageMap(int cp, int *map) {
|
|
||||||
UNUSED_P(cp);
|
|
||||||
UNUSED_P(map);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
codepageConvert(int cp, const char *p) {
|
|
||||||
UNUSED_P(cp);
|
UNUSED_P(cp);
|
||||||
UNUSED_P(p);
|
UNUSED_P(p);
|
||||||
return -1;
|
return -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* not _WIN32 */
|
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,12 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2001-2004 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2009 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2017 Franek Korta <fkorta@gmail.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2001-2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,14 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2004-2006 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2005-2007 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
|
Copyright (c) 2021 Dong-hee Na <donghee.na@python.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,6 +37,8 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <expat_config.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
@ -38,9 +47,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include "winconfig.h"
|
# include "winconfig.h"
|
||||||
#elif defined(HAVE_EXPAT_CONFIG_H)
|
#endif
|
||||||
# include <expat_config.h>
|
|
||||||
#endif /* ndef _WIN32 */
|
|
||||||
|
|
||||||
#include "expat.h"
|
#include "expat.h"
|
||||||
#include "internal.h" /* for UNUSED_P only */
|
#include "internal.h" /* for UNUSED_P only */
|
||||||
@ -176,7 +183,7 @@ externalEntityRefFilemap(XML_Parser parser, const XML_Char *context,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
processStream(const XML_Char *filename, XML_Parser parser) {
|
processStream(const XML_Char *filename, XML_Parser parser) {
|
||||||
/* passing NULL for filename means read intput from stdin */
|
/* passing NULL for filename means read input from stdin */
|
||||||
int fd = 0; /* 0 is the fileno for stdin */
|
int fd = 0; /* 0 is the fileno for stdin */
|
||||||
|
|
||||||
if (filename != NULL) {
|
if (filename != NULL) {
|
||||||
|
@ -7,7 +7,10 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2005 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2016-2019 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2018 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2002 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2017 Sebastian Pipping <sebastian@pipping.org>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -54,6 +55,8 @@
|
|||||||
# define tmain wmain
|
# define tmain wmain
|
||||||
# define tremove _wremove
|
# define tremove _wremove
|
||||||
# define tchar wchar_t
|
# define tchar wchar_t
|
||||||
|
# define tcstof wcstof
|
||||||
|
# define tcstoull wcstoull
|
||||||
#else /* not XML_UNICODE */
|
#else /* not XML_UNICODE */
|
||||||
# define T(x) x
|
# define T(x) x
|
||||||
# define ftprintf fprintf
|
# define ftprintf fprintf
|
||||||
@ -71,4 +74,6 @@
|
|||||||
# define tmain main
|
# define tmain main
|
||||||
# define tremove remove
|
# define tremove remove
|
||||||
# define tchar char
|
# define tchar char
|
||||||
|
# define tcstof strtof
|
||||||
|
# define tcstoull strtoull
|
||||||
#endif /* not XML_UNICODE */
|
#endif /* not XML_UNICODE */
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
__ __ _
|
|
||||||
___\ \/ /_ __ __ _| |_
|
|
||||||
/ _ \\ /| '_ \ / _` | __|
|
|
||||||
| __// \| |_) | (_| | |_
|
|
||||||
\___/_/\_\ .__/ \__,_|\__|
|
|
||||||
|_| XML parser
|
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
|
||||||
Copyright (c) 2000-2017 Expat development team
|
|
||||||
Licensed under the MIT license:
|
|
||||||
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int XML_URLInit();
|
|
||||||
void XML_URLUninit();
|
|
||||||
int XML_ProcessURL(XML_Parser parser,
|
|
||||||
const XML_Char *url,
|
|
||||||
unsigned flags);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
186
xmlwf/xmlwf.c
186
xmlwf/xmlwf.c
@ -7,7 +7,16 @@
|
|||||||
|_| XML parser
|
|_| XML parser
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 2000-2017 Expat development team
|
Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net>
|
||||||
|
Copyright (c) 2001-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||||
|
Copyright (c) 2004-2009 Karl Waclawek <karl@waclawek.net>
|
||||||
|
Copyright (c) 2005-2007 Steven Solie <ssolie@users.sourceforge.net>
|
||||||
|
Copyright (c) 2016-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||||
|
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||||
|
Copyright (c) 2020 Joe Orton <jorton@redhat.com>
|
||||||
|
Copyright (c) 2020 Kleber Tarcísio <klebertarcisio@yahoo.com.br>
|
||||||
|
Copyright (c) 2021 Tim Bray <tbray@textuality.com>
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -30,11 +39,15 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <expat_config.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <math.h> /* for isnan */
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "expat.h"
|
#include "expat.h"
|
||||||
#include "codepage.h"
|
#include "codepage.h"
|
||||||
@ -50,6 +63,14 @@
|
|||||||
# include <wchar.h>
|
# include <wchar.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum ExitCode {
|
||||||
|
XMLWF_EXIT_SUCCESS = 0,
|
||||||
|
XMLWF_EXIT_INTERNAL_ERROR = 1,
|
||||||
|
XMLWF_EXIT_NOT_WELLFORMED = 2,
|
||||||
|
XMLWF_EXIT_OUTPUT_ERROR = 3,
|
||||||
|
XMLWF_EXIT_USAGE_ERROR = 4,
|
||||||
|
};
|
||||||
|
|
||||||
/* Structures for handler user data */
|
/* Structures for handler user data */
|
||||||
typedef struct NotationList {
|
typedef struct NotationList {
|
||||||
struct NotationList *next;
|
struct NotationList *next;
|
||||||
@ -322,6 +343,13 @@ freeNotations(XmlwfUserData *data) {
|
|||||||
data->notationListHead = NULL;
|
data->notationListHead = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cleanupUserData(XmlwfUserData *userData) {
|
||||||
|
free((void *)userData->currentDoctypeName);
|
||||||
|
userData->currentDoctypeName = NULL;
|
||||||
|
freeNotations(userData);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xcscmp(const XML_Char *xs, const XML_Char *xt) {
|
xcscmp(const XML_Char *xs, const XML_Char *xt) {
|
||||||
while (*xs != 0 && *xt != 0) {
|
while (*xs != 0 && *xt != 0) {
|
||||||
@ -848,16 +876,19 @@ usage(const XML_Char *prog, int rc) {
|
|||||||
stderr,
|
stderr,
|
||||||
/* Generated with:
|
/* Generated with:
|
||||||
* $ xmlwf/xmlwf_helpgen.sh
|
* $ xmlwf/xmlwf_helpgen.sh
|
||||||
|
* To update, change xmlwf/xmlwf_helpgen.py, then paste the output of
|
||||||
|
* xmlwf/xmlwf_helpgen.sh in here.
|
||||||
*/
|
*/
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
T("usage: %s [-s] [-n] [-p] [-x] [-e ENCODING] [-w] [-r] [-d DIRECTORY]\n")
|
T("usage:\n")
|
||||||
T(" [-c | -m | -t] [-N]\n")
|
T(" %s [OPTIONS] [FILE ...]\n")
|
||||||
T(" [FILE [FILE ...]]\n")
|
T(" %s -h\n")
|
||||||
|
T(" %s -v\n")
|
||||||
T("\n")
|
T("\n")
|
||||||
T("xmlwf - Determines if an XML document is well-formed\n")
|
T("xmlwf - Determines if an XML document is well-formed\n")
|
||||||
T("\n")
|
T("\n")
|
||||||
T("positional arguments:\n")
|
T("positional arguments:\n")
|
||||||
T(" FILE files to process (default: STDIN)\n")
|
T(" FILE file to process (default: STDIN)\n")
|
||||||
T("\n")
|
T("\n")
|
||||||
T("input control arguments:\n")
|
T("input control arguments:\n")
|
||||||
T(" -s print an error if the document is not [s]tandalone\n")
|
T(" -s print an error if the document is not [s]tandalone\n")
|
||||||
@ -867,6 +898,7 @@ usage(const XML_Char *prog, int rc) {
|
|||||||
T(" -e ENCODING override any in-document [e]ncoding declaration\n")
|
T(" -e ENCODING override any in-document [e]ncoding declaration\n")
|
||||||
T(" -w enable support for [W]indows code pages\n")
|
T(" -w enable support for [W]indows code pages\n")
|
||||||
T(" -r disable memory-mapping and use normal file [r]ead IO calls instead\n")
|
T(" -r disable memory-mapping and use normal file [r]ead IO calls instead\n")
|
||||||
|
T(" -k when processing multiple files, [k]eep processing after first file with error\n")
|
||||||
T("\n")
|
T("\n")
|
||||||
T("output control arguments:\n")
|
T("output control arguments:\n")
|
||||||
T(" -d DIRECTORY output [d]estination directory\n")
|
T(" -d DIRECTORY output [d]estination directory\n")
|
||||||
@ -875,14 +907,27 @@ usage(const XML_Char *prog, int rc) {
|
|||||||
T(" -t write no XML output for [t]iming of plain parsing\n")
|
T(" -t write no XML output for [t]iming of plain parsing\n")
|
||||||
T(" -N enable adding doctype and [n]otation declarations\n")
|
T(" -N enable adding doctype and [n]otation declarations\n")
|
||||||
T("\n")
|
T("\n")
|
||||||
|
T("billion laughs attack protection:\n")
|
||||||
|
T(" NOTE: If you ever need to increase these values for non-attack payload, please file a bug report.\n")
|
||||||
|
T("\n")
|
||||||
|
T(" -a FACTOR set maximum tolerated [a]mplification factor (default: 100.0)\n")
|
||||||
|
T(" -b BYTES set number of output [b]ytes needed to activate (default: 8 MiB)\n")
|
||||||
|
T("\n")
|
||||||
T("info arguments:\n")
|
T("info arguments:\n")
|
||||||
T(" -h show this [h]elp message and exit\n")
|
T(" -h show this [h]elp message and exit\n")
|
||||||
T(" -v show program's [v]ersion number and exit\n")
|
T(" -v show program's [v]ersion number and exit\n")
|
||||||
T("\n")
|
T("\n")
|
||||||
T("libexpat is software libre, licensed under the MIT license.\n")
|
T("exit status:\n")
|
||||||
|
T(" 0 the input files are well-formed and the output (if requested) was written successfully\n")
|
||||||
|
T(" 1 could not allocate data structures, signals a serious problem with execution environment\n")
|
||||||
|
T(" 2 one or more input files were not well-formed\n")
|
||||||
|
T(" 3 could not create an output file\n")
|
||||||
|
T(" 4 command-line argument error\n")
|
||||||
|
T("\n")
|
||||||
|
T("xmlwf of libexpat is software libre, licensed under the MIT license.\n")
|
||||||
T("Please report bugs at https://github.com/libexpat/libexpat/issues. Thank you!\n")
|
T("Please report bugs at https://github.com/libexpat/libexpat/issues. Thank you!\n")
|
||||||
, /* clang-format on */
|
, /* clang-format on */
|
||||||
prog);
|
prog, prog, prog);
|
||||||
exit(rc);
|
exit(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -891,6 +936,19 @@ usage(const XML_Char *prog, int rc) {
|
|||||||
int wmain(int argc, XML_Char **argv);
|
int wmain(int argc, XML_Char **argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define XMLWF_SHIFT_ARG_INTO(constCharStarTarget, argc, argv, i, j) \
|
||||||
|
{ \
|
||||||
|
if (argv[i][j + 1] == T('\0')) { \
|
||||||
|
if (++i == argc) \
|
||||||
|
usage(argv[0], XMLWF_EXIT_USAGE_ERROR); \
|
||||||
|
constCharStarTarget = argv[i]; \
|
||||||
|
} else { \
|
||||||
|
constCharStarTarget = argv[i] + j + 1; \
|
||||||
|
} \
|
||||||
|
i++; \
|
||||||
|
j = 0; \
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
tmain(int argc, XML_Char **argv) {
|
tmain(int argc, XML_Char **argv) {
|
||||||
int i, j;
|
int i, j;
|
||||||
@ -902,6 +960,13 @@ tmain(int argc, XML_Char **argv) {
|
|||||||
int useNamespaces = 0;
|
int useNamespaces = 0;
|
||||||
int requireStandalone = 0;
|
int requireStandalone = 0;
|
||||||
int requiresNotations = 0;
|
int requiresNotations = 0;
|
||||||
|
int continueOnError = 0;
|
||||||
|
|
||||||
|
float attackMaximumAmplification = -1.0f; /* signaling "not set" */
|
||||||
|
unsigned long long attackThresholdBytes;
|
||||||
|
XML_Bool attackThresholdGiven = XML_FALSE;
|
||||||
|
|
||||||
|
int exitCode = XMLWF_EXIT_SUCCESS;
|
||||||
enum XML_ParamEntityParsing paramEntityParsing
|
enum XML_ParamEntityParsing paramEntityParsing
|
||||||
= XML_PARAM_ENTITY_PARSING_NEVER;
|
= XML_PARAM_ENTITY_PARSING_NEVER;
|
||||||
int useStdin = 0;
|
int useStdin = 0;
|
||||||
@ -965,31 +1030,64 @@ tmain(int argc, XML_Char **argv) {
|
|||||||
j++;
|
j++;
|
||||||
break;
|
break;
|
||||||
case T('d'):
|
case T('d'):
|
||||||
if (argv[i][j + 1] == T('\0')) {
|
XMLWF_SHIFT_ARG_INTO(outputDir, argc, argv, i, j);
|
||||||
if (++i == argc)
|
|
||||||
usage(argv[0], 2);
|
|
||||||
outputDir = argv[i];
|
|
||||||
} else
|
|
||||||
outputDir = argv[i] + j + 1;
|
|
||||||
i++;
|
|
||||||
j = 0;
|
|
||||||
break;
|
break;
|
||||||
case T('e'):
|
case T('e'):
|
||||||
if (argv[i][j + 1] == T('\0')) {
|
XMLWF_SHIFT_ARG_INTO(encoding, argc, argv, i, j);
|
||||||
if (++i == argc)
|
|
||||||
usage(argv[0], 2);
|
|
||||||
encoding = argv[i];
|
|
||||||
} else
|
|
||||||
encoding = argv[i] + j + 1;
|
|
||||||
i++;
|
|
||||||
j = 0;
|
|
||||||
break;
|
break;
|
||||||
case T('h'):
|
case T('h'):
|
||||||
usage(argv[0], 0);
|
usage(argv[0], XMLWF_EXIT_SUCCESS);
|
||||||
return 0;
|
return 0;
|
||||||
case T('v'):
|
case T('v'):
|
||||||
showVersion(argv[0]);
|
showVersion(argv[0]);
|
||||||
return 0;
|
return 0;
|
||||||
|
case T('k'):
|
||||||
|
continueOnError = 1;
|
||||||
|
j++;
|
||||||
|
break;
|
||||||
|
case T('a'): {
|
||||||
|
const XML_Char *valueText = NULL;
|
||||||
|
XMLWF_SHIFT_ARG_INTO(valueText, argc, argv, i, j);
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
XML_Char *afterValueText = (XML_Char *)valueText;
|
||||||
|
attackMaximumAmplification = tcstof(valueText, &afterValueText);
|
||||||
|
if ((errno != 0) || (afterValueText[0] != T('\0'))
|
||||||
|
|| isnan(attackMaximumAmplification)
|
||||||
|
|| (attackMaximumAmplification < 1.0f)) {
|
||||||
|
// This prevents tperror(..) from reporting misleading "[..]: Success"
|
||||||
|
errno = ERANGE;
|
||||||
|
tperror(T("invalid amplification limit") T(
|
||||||
|
" (needs a floating point number greater or equal than 1.0)"));
|
||||||
|
exit(XMLWF_EXIT_USAGE_ERROR);
|
||||||
|
}
|
||||||
|
#ifndef XML_DTD
|
||||||
|
ftprintf(stderr, T("Warning: Given amplification limit ignored") T(
|
||||||
|
", xmlwf has been compiled without DTD support.\n"));
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T('b'): {
|
||||||
|
const XML_Char *valueText = NULL;
|
||||||
|
XMLWF_SHIFT_ARG_INTO(valueText, argc, argv, i, j);
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
XML_Char *afterValueText = (XML_Char *)valueText;
|
||||||
|
attackThresholdBytes = tcstoull(valueText, &afterValueText, 10);
|
||||||
|
if ((errno != 0) || (afterValueText[0] != T('\0'))) {
|
||||||
|
// This prevents tperror(..) from reporting misleading "[..]: Success"
|
||||||
|
errno = ERANGE;
|
||||||
|
tperror(T("invalid ignore threshold")
|
||||||
|
T(" (needs an integer from 0 to 2^64-1)"));
|
||||||
|
exit(XMLWF_EXIT_USAGE_ERROR);
|
||||||
|
}
|
||||||
|
attackThresholdGiven = XML_TRUE;
|
||||||
|
#ifndef XML_DTD
|
||||||
|
ftprintf(stderr, T("Warning: Given attack threshold ignored") T(
|
||||||
|
", xmlwf has been compiled without DTD support.\n"));
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
case T('\0'):
|
case T('\0'):
|
||||||
if (j > 1) {
|
if (j > 1) {
|
||||||
i++;
|
i++;
|
||||||
@ -998,7 +1096,7 @@ tmain(int argc, XML_Char **argv) {
|
|||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
usage(argv[0], 2);
|
usage(argv[0], XMLWF_EXIT_USAGE_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == argc) {
|
if (i == argc) {
|
||||||
@ -1017,7 +1115,22 @@ tmain(int argc, XML_Char **argv) {
|
|||||||
|
|
||||||
if (! parser) {
|
if (! parser) {
|
||||||
tperror(T("Could not instantiate parser"));
|
tperror(T("Could not instantiate parser"));
|
||||||
exit(1);
|
exit(XMLWF_EXIT_INTERNAL_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attackMaximumAmplification != -1.0f) {
|
||||||
|
#ifdef XML_DTD
|
||||||
|
XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||||
|
parser, attackMaximumAmplification);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (attackThresholdGiven) {
|
||||||
|
#ifdef XML_DTD
|
||||||
|
XML_SetBillionLaughsAttackProtectionActivationThreshold(
|
||||||
|
parser, attackThresholdBytes);
|
||||||
|
#else
|
||||||
|
(void)attackThresholdBytes; // silence -Wunused-but-set-variable
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requireStandalone)
|
if (requireStandalone)
|
||||||
@ -1051,13 +1164,24 @@ tmain(int argc, XML_Char **argv) {
|
|||||||
}
|
}
|
||||||
outName = (XML_Char *)malloc((tcslen(outputDir) + tcslen(file) + 2)
|
outName = (XML_Char *)malloc((tcslen(outputDir) + tcslen(file) + 2)
|
||||||
* sizeof(XML_Char));
|
* sizeof(XML_Char));
|
||||||
|
if (! outName) {
|
||||||
|
tperror(T("Could not allocate memory"));
|
||||||
|
exit(XMLWF_EXIT_INTERNAL_ERROR);
|
||||||
|
}
|
||||||
tcscpy(outName, outputDir);
|
tcscpy(outName, outputDir);
|
||||||
tcscat(outName, delim);
|
tcscat(outName, delim);
|
||||||
tcscat(outName, file);
|
tcscat(outName, file);
|
||||||
userData.fp = tfopen(outName, T("wb"));
|
userData.fp = tfopen(outName, T("wb"));
|
||||||
if (! userData.fp) {
|
if (! userData.fp) {
|
||||||
tperror(outName);
|
tperror(outName);
|
||||||
exit(1);
|
exitCode = XMLWF_EXIT_OUTPUT_ERROR;
|
||||||
|
if (continueOnError) {
|
||||||
|
free(outName);
|
||||||
|
cleanupUserData(&userData);
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setvbuf(userData.fp, NULL, _IOFBF, 16384);
|
setvbuf(userData.fp, NULL, _IOFBF, 16384);
|
||||||
#ifdef XML_UNICODE
|
#ifdef XML_UNICODE
|
||||||
@ -1119,8 +1243,12 @@ tmain(int argc, XML_Char **argv) {
|
|||||||
}
|
}
|
||||||
XML_ParserFree(parser);
|
XML_ParserFree(parser);
|
||||||
if (! result) {
|
if (! result) {
|
||||||
exit(2);
|
exitCode = XMLWF_EXIT_NOT_WELLFORMED;
|
||||||
|
cleanupUserData(&userData);
|
||||||
|
if (! continueOnError) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
}
|
||||||
|
return exitCode;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 Expat development team
|
# Copyright (c) 2019-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
|
# Copyright (c) 2021 Tim Bray <tbray@textuality.com>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -31,11 +32,25 @@
|
|||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
epilog = """
|
epilog = """
|
||||||
libexpat is software libre, licensed under the MIT license.
|
exit status:
|
||||||
|
0 the input files are well-formed and the output (if requested) was written successfully
|
||||||
|
1 could not allocate data structures, signals a serious problem with execution environment
|
||||||
|
2 one or more input files were not well-formed
|
||||||
|
3 could not create an output file
|
||||||
|
4 command-line argument error
|
||||||
|
|
||||||
|
xmlwf of libexpat is software libre, licensed under the MIT license.
|
||||||
Please report bugs at https://github.com/libexpat/libexpat/issues. Thank you!
|
Please report bugs at https://github.com/libexpat/libexpat/issues. Thank you!
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
usage = """
|
||||||
|
%(prog)s [OPTIONS] [FILE ...]
|
||||||
|
%(prog)s -h
|
||||||
|
%(prog)s -v
|
||||||
|
"""
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(prog='xmlwf', add_help=False,
|
parser = argparse.ArgumentParser(prog='xmlwf', add_help=False,
|
||||||
|
usage=usage,
|
||||||
description='xmlwf - Determines if an XML document is well-formed',
|
description='xmlwf - Determines if an XML document is well-formed',
|
||||||
formatter_class=argparse.RawTextHelpFormatter,
|
formatter_class=argparse.RawTextHelpFormatter,
|
||||||
epilog=epilog)
|
epilog=epilog)
|
||||||
@ -48,6 +63,7 @@
|
|||||||
input_related.add_argument('-e', action='store', metavar='ENCODING', help='override any in-document [e]ncoding declaration')
|
input_related.add_argument('-e', action='store', metavar='ENCODING', help='override any in-document [e]ncoding declaration')
|
||||||
input_related.add_argument('-w', action='store_true', help='enable support for [W]indows code pages')
|
input_related.add_argument('-w', action='store_true', help='enable support for [W]indows code pages')
|
||||||
input_related.add_argument('-r', action='store_true', help='disable memory-mapping and use normal file [r]ead IO calls instead')
|
input_related.add_argument('-r', action='store_true', help='disable memory-mapping and use normal file [r]ead IO calls instead')
|
||||||
|
input_related.add_argument('-k', action='store_true', help='when processing multiple files, [k]eep processing after first file with error')
|
||||||
|
|
||||||
output_related = parser.add_argument_group('output control arguments')
|
output_related = parser.add_argument_group('output control arguments')
|
||||||
output_related.add_argument('-d', action='store', metavar='DIRECTORY', help='output [d]estination directory')
|
output_related.add_argument('-d', action='store', metavar='DIRECTORY', help='output [d]estination directory')
|
||||||
@ -57,7 +73,15 @@
|
|||||||
output_mode.add_argument('-t', action='store_true', help='write no XML output for [t]iming of plain parsing')
|
output_mode.add_argument('-t', action='store_true', help='write no XML output for [t]iming of plain parsing')
|
||||||
output_related.add_argument('-N', action='store_true', help='enable adding doctype and [n]otation declarations')
|
output_related.add_argument('-N', action='store_true', help='enable adding doctype and [n]otation declarations')
|
||||||
|
|
||||||
parser.add_argument('files', metavar='FILE', nargs='*', help='files to process (default: STDIN)')
|
billion_laughs = parser.add_argument_group('billion laughs attack protection',
|
||||||
|
description='NOTE: '
|
||||||
|
'If you ever need to increase these values '
|
||||||
|
'for non-attack payload, please file a bug report.')
|
||||||
|
billion_laughs.add_argument('-a', metavar='FACTOR',
|
||||||
|
help='set maximum tolerated [a]mplification factor (default: 100.0)')
|
||||||
|
billion_laughs.add_argument('-b', metavar='BYTES', help='set number of output [b]ytes needed to activate (default: 8 MiB)')
|
||||||
|
|
||||||
|
parser.add_argument('files', metavar='FILE', nargs='*', help='file to process (default: STDIN)')
|
||||||
|
|
||||||
info = parser.add_argument_group('info arguments')
|
info = parser.add_argument_group('info arguments')
|
||||||
info = info.add_mutually_exclusive_group()
|
info = info.add_mutually_exclusive_group()
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# \___/_/\_\ .__/ \__,_|\__|
|
# \___/_/\_\ .__/ \__,_|\__|
|
||||||
# |_| XML parser
|
# |_| XML parser
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 Expat development team
|
# Copyright (c) 2019-2021 Sebastian Pipping <sebastian@pipping.org>
|
||||||
# Licensed under the MIT license:
|
# Licensed under the MIT license:
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -29,7 +29,8 @@
|
|||||||
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
./xmlwf/xmlwf_helpgen.py | sed \
|
./xmlwf/xmlwf_helpgen.py | sed \
|
||||||
-e 's,usage: xmlwf,usage: %s,' \
|
-e 's,usage: ,usage:,' \
|
||||||
|
-e 's, xmlwf, %s,' \
|
||||||
-e 's, \[-h | -v\],,' \
|
-e 's, \[-h | -v\],,' \
|
||||||
-e 's,^, T(",' \
|
-e 's,^, T(",' \
|
||||||
-e 's,$,\\n"),'
|
-e 's,$,\\n"),'
|
||||||
|
@ -1,427 +0,0 @@
|
|||||||
/*
|
|
||||||
__ __ _
|
|
||||||
___\ \/ /_ __ __ _| |_
|
|
||||||
/ _ \\ /| '_ \ / _` | __|
|
|
||||||
| __// \| |_) | (_| | |_
|
|
||||||
\___/_/\_\ .__/ \__,_|\__|
|
|
||||||
|_| XML parser
|
|
||||||
|
|
||||||
Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
|
|
||||||
Copyright (c) 2000-2017 Expat development team
|
|
||||||
Licensed under the MIT license:
|
|
||||||
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "expat.h"
|
|
||||||
#ifdef XML_UNICODE
|
|
||||||
#define UNICODE
|
|
||||||
#endif
|
|
||||||
#include <windows.h>
|
|
||||||
#include <urlmon.h>
|
|
||||||
#include <wininet.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <tchar.h>
|
|
||||||
#include "xmlurl.h"
|
|
||||||
#include "xmlmime.h"
|
|
||||||
|
|
||||||
static int
|
|
||||||
processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url);
|
|
||||||
|
|
||||||
typedef void (*StopHandler)(void *, HRESULT);
|
|
||||||
|
|
||||||
class Callback : public IBindStatusCallback {
|
|
||||||
public:
|
|
||||||
// IUnknown methods
|
|
||||||
STDMETHODIMP QueryInterface(REFIID,void **);
|
|
||||||
STDMETHODIMP_(ULONG) AddRef();
|
|
||||||
STDMETHODIMP_(ULONG) Release();
|
|
||||||
// IBindStatusCallback methods
|
|
||||||
STDMETHODIMP OnStartBinding(DWORD, IBinding *);
|
|
||||||
STDMETHODIMP GetPriority(LONG *);
|
|
||||||
STDMETHODIMP OnLowResource(DWORD);
|
|
||||||
STDMETHODIMP OnProgress(ULONG, ULONG, ULONG, LPCWSTR);
|
|
||||||
STDMETHODIMP OnStopBinding(HRESULT, LPCWSTR);
|
|
||||||
STDMETHODIMP GetBindInfo(DWORD *, BINDINFO *);
|
|
||||||
STDMETHODIMP OnDataAvailable(DWORD, DWORD, FORMATETC *, STGMEDIUM *);
|
|
||||||
STDMETHODIMP OnObjectAvailable(REFIID, IUnknown *);
|
|
||||||
Callback(XML_Parser, IMoniker *, StopHandler, void *);
|
|
||||||
~Callback();
|
|
||||||
int externalEntityRef(const XML_Char *context,
|
|
||||||
const XML_Char *systemId, const XML_Char *publicId);
|
|
||||||
private:
|
|
||||||
XML_Parser parser_;
|
|
||||||
IMoniker *baseMoniker_;
|
|
||||||
DWORD totalRead_;
|
|
||||||
ULONG ref_;
|
|
||||||
IBinding *pBinding_;
|
|
||||||
StopHandler stopHandler_;
|
|
||||||
void *stopArg_;
|
|
||||||
};
|
|
||||||
|
|
||||||
STDMETHODIMP_(ULONG)
|
|
||||||
Callback::AddRef()
|
|
||||||
{
|
|
||||||
return ref_++;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP_(ULONG)
|
|
||||||
Callback::Release()
|
|
||||||
{
|
|
||||||
if (--ref_ == 0) {
|
|
||||||
delete this;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return ref_;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::QueryInterface(REFIID riid, void** ppv)
|
|
||||||
{
|
|
||||||
if (IsEqualGUID(riid, IID_IUnknown))
|
|
||||||
*ppv = (IUnknown *)this;
|
|
||||||
else if (IsEqualGUID(riid, IID_IBindStatusCallback))
|
|
||||||
*ppv = (IBindStatusCallback *)this;
|
|
||||||
else
|
|
||||||
return E_NOINTERFACE;
|
|
||||||
((LPUNKNOWN)*ppv)->AddRef();
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::OnStartBinding(DWORD, IBinding* pBinding)
|
|
||||||
{
|
|
||||||
pBinding_ = pBinding;
|
|
||||||
pBinding->AddRef();
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::GetPriority(LONG *)
|
|
||||||
{
|
|
||||||
return E_NOTIMPL;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::OnLowResource(DWORD)
|
|
||||||
{
|
|
||||||
return E_NOTIMPL;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::OnProgress(ULONG, ULONG, ULONG, LPCWSTR)
|
|
||||||
{
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::OnStopBinding(HRESULT hr, LPCWSTR szError)
|
|
||||||
{
|
|
||||||
if (pBinding_) {
|
|
||||||
pBinding_->Release();
|
|
||||||
pBinding_ = 0;
|
|
||||||
}
|
|
||||||
if (baseMoniker_) {
|
|
||||||
baseMoniker_->Release();
|
|
||||||
baseMoniker_ = 0;
|
|
||||||
}
|
|
||||||
stopHandler_(stopArg_, hr);
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindinfo)
|
|
||||||
{
|
|
||||||
*pgrfBINDF = BINDF_ASYNCHRONOUS;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
reportError(XML_Parser parser)
|
|
||||||
{
|
|
||||||
int code = XML_GetErrorCode(parser);
|
|
||||||
const XML_Char *message = XML_ErrorString(code);
|
|
||||||
if (message)
|
|
||||||
_ftprintf(stderr, _T("%s:%d:%ld: %s\n"),
|
|
||||||
XML_GetBase(parser),
|
|
||||||
XML_GetErrorLineNumber(parser),
|
|
||||||
XML_GetErrorColumnNumber(parser),
|
|
||||||
message);
|
|
||||||
else
|
|
||||||
_ftprintf(stderr, _T("%s: (unknown message %d)\n"),
|
|
||||||
XML_GetBase(parser), code);
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::OnDataAvailable(DWORD grfBSCF,
|
|
||||||
DWORD dwSize,
|
|
||||||
FORMATETC *pfmtetc,
|
|
||||||
STGMEDIUM* pstgmed)
|
|
||||||
{
|
|
||||||
if (grfBSCF & BSCF_FIRSTDATANOTIFICATION) {
|
|
||||||
IWinInetHttpInfo *hp;
|
|
||||||
HRESULT hr = pBinding_->QueryInterface(IID_IWinInetHttpInfo,
|
|
||||||
(void **)&hp);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
char contentType[1024];
|
|
||||||
DWORD bufSize = sizeof(contentType);
|
|
||||||
DWORD flags = 0;
|
|
||||||
contentType[0] = 0;
|
|
||||||
hr = hp->QueryInfo(HTTP_QUERY_CONTENT_TYPE, contentType,
|
|
||||||
&bufSize, 0, NULL);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
char charset[CHARSET_MAX];
|
|
||||||
getXMLCharset(contentType, charset);
|
|
||||||
if (charset[0]) {
|
|
||||||
#ifdef XML_UNICODE
|
|
||||||
XML_Char wcharset[CHARSET_MAX];
|
|
||||||
XML_Char *p1 = wcharset;
|
|
||||||
const char *p2 = charset;
|
|
||||||
while ((*p1++ = (unsigned char)*p2++) != 0)
|
|
||||||
;
|
|
||||||
XML_SetEncoding(parser_, wcharset);
|
|
||||||
#else
|
|
||||||
XML_SetEncoding(parser_, charset);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
hp->Release();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!parser_)
|
|
||||||
return E_ABORT;
|
|
||||||
if (pstgmed->tymed == TYMED_ISTREAM) {
|
|
||||||
while (totalRead_ < dwSize) {
|
|
||||||
#define READ_MAX (64*1024)
|
|
||||||
DWORD nToRead = dwSize - totalRead_;
|
|
||||||
if (nToRead > READ_MAX)
|
|
||||||
nToRead = READ_MAX;
|
|
||||||
void *buf = XML_GetBuffer(parser_, nToRead);
|
|
||||||
if (!buf) {
|
|
||||||
_ftprintf(stderr, _T("out of memory\n"));
|
|
||||||
return E_ABORT;
|
|
||||||
}
|
|
||||||
DWORD nRead;
|
|
||||||
HRESULT hr = pstgmed->pstm->Read(buf, nToRead, &nRead);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
totalRead_ += nRead;
|
|
||||||
if (!XML_ParseBuffer(parser_,
|
|
||||||
nRead,
|
|
||||||
(grfBSCF & BSCF_LASTDATANOTIFICATION) != 0
|
|
||||||
&& totalRead_ == dwSize)) {
|
|
||||||
reportError(parser_);
|
|
||||||
return E_ABORT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP
|
|
||||||
Callback::OnObjectAvailable(REFIID, IUnknown *)
|
|
||||||
{
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
Callback::externalEntityRef(const XML_Char *context,
|
|
||||||
const XML_Char *systemId,
|
|
||||||
const XML_Char *publicId)
|
|
||||||
{
|
|
||||||
XML_Parser entParser = XML_ExternalEntityParserCreate(parser_, context, 0);
|
|
||||||
XML_SetBase(entParser, systemId);
|
|
||||||
int ret = processURL(entParser, baseMoniker_, systemId);
|
|
||||||
XML_ParserFree(entParser);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
Callback::Callback(XML_Parser parser, IMoniker *baseMoniker,
|
|
||||||
StopHandler stopHandler, void *stopArg)
|
|
||||||
: parser_(parser),
|
|
||||||
baseMoniker_(baseMoniker),
|
|
||||||
ref_(0),
|
|
||||||
pBinding_(0),
|
|
||||||
totalRead_(0),
|
|
||||||
stopHandler_(stopHandler),
|
|
||||||
stopArg_(stopArg)
|
|
||||||
{
|
|
||||||
if (baseMoniker_)
|
|
||||||
baseMoniker_->AddRef();
|
|
||||||
}
|
|
||||||
|
|
||||||
Callback::~Callback()
|
|
||||||
{
|
|
||||||
if (pBinding_)
|
|
||||||
pBinding_->Release();
|
|
||||||
if (baseMoniker_)
|
|
||||||
baseMoniker_->Release();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
externalEntityRef(void *arg,
|
|
||||||
const XML_Char *context,
|
|
||||||
const XML_Char *base,
|
|
||||||
const XML_Char *systemId,
|
|
||||||
const XML_Char *publicId)
|
|
||||||
{
|
|
||||||
return ((Callback *)arg)->externalEntityRef(context, systemId, publicId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static HRESULT
|
|
||||||
openStream(XML_Parser parser,
|
|
||||||
IMoniker *baseMoniker,
|
|
||||||
const XML_Char *uri,
|
|
||||||
StopHandler stopHandler, void *stopArg)
|
|
||||||
{
|
|
||||||
if (!XML_SetBase(parser, uri))
|
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
HRESULT hr;
|
|
||||||
IMoniker *m;
|
|
||||||
#ifdef XML_UNICODE
|
|
||||||
hr = CreateURLMoniker(0, uri, &m);
|
|
||||||
#else
|
|
||||||
LPWSTR uriw = new wchar_t[strlen(uri) + 1];
|
|
||||||
for (int i = 0;; i++) {
|
|
||||||
uriw[i] = uri[i];
|
|
||||||
if (uriw[i] == 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
hr = CreateURLMoniker(baseMoniker, uriw, &m);
|
|
||||||
delete [] uriw;
|
|
||||||
#endif
|
|
||||||
if (FAILED(hr))
|
|
||||||
return hr;
|
|
||||||
IBindStatusCallback *cb = new Callback(parser, m, stopHandler, stopArg);
|
|
||||||
XML_SetExternalEntityRefHandler(parser, externalEntityRef);
|
|
||||||
XML_SetExternalEntityRefHandlerArg(parser, cb);
|
|
||||||
cb->AddRef();
|
|
||||||
IBindCtx *b;
|
|
||||||
if (FAILED(hr = CreateAsyncBindCtx(0, cb, 0, &b))) {
|
|
||||||
cb->Release();
|
|
||||||
m->Release();
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
cb->Release();
|
|
||||||
IStream *pStream;
|
|
||||||
hr = m->BindToStorage(b, 0, IID_IStream, (void **)&pStream);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
if (pStream)
|
|
||||||
pStream->Release();
|
|
||||||
}
|
|
||||||
if (hr == MK_S_ASYNCHRONOUS)
|
|
||||||
hr = S_OK;
|
|
||||||
m->Release();
|
|
||||||
b->Release();
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct QuitInfo {
|
|
||||||
const XML_Char *url;
|
|
||||||
HRESULT hr;
|
|
||||||
int stop;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
winPerror(const XML_Char *url, HRESULT hr)
|
|
||||||
{
|
|
||||||
LPVOID buf;
|
|
||||||
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
|
|
||||||
| FORMAT_MESSAGE_FROM_HMODULE,
|
|
||||||
GetModuleHandleA("urlmon.dll"),
|
|
||||||
hr,
|
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
||||||
(LPTSTR) &buf,
|
|
||||||
0,
|
|
||||||
NULL)
|
|
||||||
|| FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
|
|
||||||
| FORMAT_MESSAGE_FROM_SYSTEM,
|
|
||||||
0,
|
|
||||||
hr,
|
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
||||||
(LPTSTR) &buf,
|
|
||||||
0,
|
|
||||||
NULL)) {
|
|
||||||
/* The system error messages seem to end with a newline. */
|
|
||||||
_ftprintf(stderr, _T("%s: %s"), url, buf);
|
|
||||||
fflush(stderr);
|
|
||||||
LocalFree(buf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_ftprintf(stderr, _T("%s: error %x\n"), url, hr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
threadQuit(void *p, HRESULT hr)
|
|
||||||
{
|
|
||||||
QuitInfo *qi = (QuitInfo *)p;
|
|
||||||
qi->hr = hr;
|
|
||||||
qi->stop = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
int
|
|
||||||
XML_URLInit(void)
|
|
||||||
{
|
|
||||||
return SUCCEEDED(CoInitialize(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
void
|
|
||||||
XML_URLUninit(void)
|
|
||||||
{
|
|
||||||
CoUninitialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
processURL(XML_Parser parser, IMoniker *baseMoniker,
|
|
||||||
const XML_Char *url)
|
|
||||||
{
|
|
||||||
QuitInfo qi;
|
|
||||||
qi.stop = 0;
|
|
||||||
qi.url = url;
|
|
||||||
|
|
||||||
XML_SetBase(parser, url);
|
|
||||||
HRESULT hr = openStream(parser, baseMoniker, url, threadQuit, &qi);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
winPerror(url, hr);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else if (FAILED(qi.hr)) {
|
|
||||||
winPerror(url, qi.hr);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
MSG msg;
|
|
||||||
while (!qi.stop && GetMessage (&msg, NULL, 0, 0)) {
|
|
||||||
TranslateMessage (&msg);
|
|
||||||
DispatchMessage (&msg);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
int
|
|
||||||
XML_ProcessURL(XML_Parser parser,
|
|
||||||
const XML_Char *url,
|
|
||||||
unsigned flags)
|
|
||||||
{
|
|
||||||
return processURL(parser, 0, url);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user