diff options
author | shadchin <shadchin@yandex-team.ru> | 2022-02-10 16:44:39 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:44:39 +0300 |
commit | e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (patch) | |
tree | 64175d5cadab313b3e7039ebaa06c5bc3295e274 /contrib/libs/expat | |
parent | 2598ef1d0aee359b4b6d5fdd1758916d5907d04f (diff) | |
download | ydb-e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0.tar.gz |
Restoring authorship annotation for <shadchin@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/expat')
25 files changed, 1522 insertions, 1522 deletions
diff --git a/contrib/libs/expat/.yandex_meta/devtools.copyrights.report b/contrib/libs/expat/.yandex_meta/devtools.copyrights.report index ebeb069f1a..fe869ba35c 100644 --- a/contrib/libs/expat/.yandex_meta/devtools.copyrights.report +++ b/contrib/libs/expat/.yandex_meta/devtools.copyrights.report @@ -38,7 +38,7 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: lib/internal.h [28:34] - lib/xmlrole.c [9:19] + lib/xmlrole.c [9:19] KEEP COPYRIGHT_SERVICE_LABEL 0adb14e8c9e1c6efd33764459efe0fd7 BELONGS ya.make @@ -59,8 +59,8 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: lib/internal.h [28:34] - lib/xmlrole.c [9:19] - lib/xmltok.c [9:24] + lib/xmlrole.c [9:19] + lib/xmltok.c [9:24] lib/xmltok_impl.c [9:19] KEEP COPYRIGHT_SERVICE_LABEL 12db9abedf3e0b98a87d6f4ec1377a19 @@ -73,8 +73,8 @@ BELONGS ya.make Files with this license: expat.h [9:18] expat_external.h [9:18] - lib/xmlrole.c [9:19] - lib/xmltok.c [9:24] + lib/xmlrole.c [9:19] + lib/xmltok.c [9:24] lib/xmltok.h [9:15] lib/xmltok_impl.c [9:19] @@ -86,7 +86,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] lib/xmltok_impl.c [9:19] KEEP COPYRIGHT_SERVICE_LABEL 1916cbefc2e0a780a3d503ba26f3780a @@ -99,7 +99,7 @@ BELONGS ya.make Files with this license: expat_external.h [9:18] lib/internal.h [28:34] - lib/xmlrole.c [9:19] + lib/xmlrole.c [9:19] lib/xmltok_ns.c [9:15] KEEP COPYRIGHT_SERVICE_LABEL 20cd458d8adbbc3a265dc6b0fb1f06ba @@ -110,7 +110,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL 2309e9d42c2779decb776323d1f5dabd BELONGS ya.make @@ -120,8 +120,8 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] - lib/xmltok.c [9:24] + lib/xmlparse.c [9:37] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL 262c58e3a627f5cee77a882379e1364f BELONGS ya.make @@ -142,7 +142,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 338b8ad8ee9b8449a90a88a0559aefd9 BELONGS ya.make @@ -152,7 +152,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 387a03e23bfe968e0bc1919b0ef65164 BELONGS ya.make @@ -172,7 +172,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 52b42ccd5b2debda3846c7aad55185e7 BELONGS ya.make @@ -182,7 +182,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL 581b53ae6f0fb8a0cc30c73b46bc3441 BELONGS ya.make @@ -226,7 +226,7 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: expat.h [9:18] - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 6451d5e490271b354ad3b567c7a03423 BELONGS ya.make @@ -236,7 +236,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 660431f3ef648d1a8e72ca1d307af738 BELONGS ya.make @@ -246,7 +246,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 671a3fd18ec8f4a472b12e1ee2d0c616 BELONGS ya.make @@ -276,7 +276,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL 7c09099ef5f35bf3be4611e6cbb14510 BELONGS ya.make @@ -286,7 +286,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL 8cba36e37749b7d96d8bc8a7b47d0f6f BELONGS ya.make @@ -305,10 +305,10 @@ BELONGS ya.make lib/nametab.h [9:11] lib/utf8tab.h [9:13] lib/winconfig.h [9:13] - lib/xmlparse.c [9:37] - lib/xmlrole.c [9:19] + lib/xmlparse.c [9:37] + lib/xmlrole.c [9:19] lib/xmlrole.h [9:14] - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] lib/xmltok.h [9:15] lib/xmltok_impl.c [9:19] lib/xmltok_impl.h [9:12] @@ -323,8 +323,8 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: lib/winconfig.h [9:13] - lib/xmlrole.c [9:19] - lib/xmltok.c [9:24] + lib/xmlrole.c [9:19] + lib/xmltok.c [9:24] lib/xmltok_ns.c [9:15] KEEP COPYRIGHT_SERVICE_LABEL 962bda2bd5ce73f8fa7de2620a3507f9 @@ -346,9 +346,9 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: lib/internal.h [28:34] - lib/xmlparse.c [9:37] - lib/xmlrole.c [9:19] - lib/xmltok.c [9:24] + lib/xmlparse.c [9:37] + lib/xmlrole.c [9:19] + lib/xmltok.c [9:24] lib/xmltok_impl.c [9:19] KEEP COPYRIGHT_SERVICE_LABEL 9b3bf60db417b96ccbf65e39aa3d4e63 @@ -359,9 +359,9 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] - lib/xmlrole.c [9:19] - lib/xmltok.c [9:24] + lib/xmlparse.c [9:37] + lib/xmlrole.c [9:19] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL 9fdb85dcaaf74d518b27233b48fffa52 BELONGS ya.make @@ -373,7 +373,7 @@ BELONGS ya.make Files with this license: expat.h [9:18] expat_external.h [9:18] - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL a0fdd1392c0b9b2558b9ccfe44592143 BELONGS ya.make @@ -393,7 +393,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL a6a07a1f1768704011ca547d57a193f2 BELONGS ya.make @@ -403,7 +403,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] KEEP COPYRIGHT_SERVICE_LABEL aab48b38c5f57f26ac27ffebe6ef5ad0 BELONGS ya.make @@ -413,7 +413,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL aafe06df8255f48781ac9d4e96e1ea4e BELONGS ya.make @@ -424,8 +424,8 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: expat.h [9:18] - lib/xmlparse.c [9:37] - lib/xmltok.c [9:24] + lib/xmlparse.c [9:37] + lib/xmltok.c [9:24] lib/xmltok_impl.c [9:19] KEEP COPYRIGHT_SERVICE_LABEL abbaf6167a20f6ba0eee322937821c15 @@ -436,7 +436,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL ac721fcd634b3e5674a847f5ed2f1c8e BELONGS ya.make @@ -447,7 +447,7 @@ BELONGS ya.make Match type : COPYRIGHT Files with this license: expat.h [9:18] - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL acbc3573ff7fdf431f94f6aea99de1e0 BELONGS ya.make @@ -457,7 +457,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL b646d644160a51f7f42f9fd9f89d8b3f BELONGS ya.make @@ -469,18 +469,18 @@ BELONGS ya.make Files with this license: expat_external.h [9:18] -KEEP COPYRIGHT_SERVICE_LABEL b739d8961ed6fe10ebf48d7f5f06c50c -BELONGS ya.make - Note: matched license text is too long. Read it in the source files. - Scancode info: - Original SPDX id: COPYRIGHT_SERVICE_LABEL - Score : 100.00 - Match type : COPYRIGHT - Files with this license: - lib/xmlparse.c [9:37] - lib/xmlrole.c [9:19] - lib/xmltok.c [9:24] - +KEEP COPYRIGHT_SERVICE_LABEL b739d8961ed6fe10ebf48d7f5f06c50c +BELONGS ya.make + Note: matched license text is too long. Read it in the source files. + Scancode info: + Original SPDX id: COPYRIGHT_SERVICE_LABEL + Score : 100.00 + Match type : COPYRIGHT + Files with this license: + lib/xmlparse.c [9:37] + lib/xmlrole.c [9:19] + lib/xmltok.c [9:24] + KEEP COPYRIGHT_SERVICE_LABEL b927d5afef47e3ae01d339429012d6a7 BELONGS ya.make Note: matched license text is too long. Read it in the source files. @@ -531,10 +531,10 @@ BELONGS ya.make lib/iasciitab.h [9:13] lib/latin1tab.h [9:13] lib/utf8tab.h [9:13] - lib/xmlparse.c [9:37] - lib/xmlrole.c [9:19] + lib/xmlparse.c [9:37] + lib/xmlrole.c [9:19] lib/xmlrole.h [9:14] - lib/xmltok.c [9:24] + lib/xmltok.c [9:24] lib/xmltok.h [9:15] lib/xmltok_impl.c [9:19] lib/xmltok_impl.h [9:12] @@ -548,7 +548,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL d548c6beaeae204247905b60d5feff91 BELONGS ya.make @@ -558,7 +558,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] lib/xmltok_impl.c [9:19] KEEP COPYRIGHT_SERVICE_LABEL dd3c5623e58aa85a367a6638299f50f3 @@ -569,7 +569,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL dfa8addb3a892dd8d176def4d3f0d567 BELONGS ya.make @@ -581,16 +581,16 @@ BELONGS ya.make Files with this license: lib/ascii.h [9:14] -KEEP COPYRIGHT_SERVICE_LABEL e2f8f506923a26765706e1ad8cc8edc6 -BELONGS ya.make - Note: matched license text is too long. Read it in the source files. - Scancode info: - Original SPDX id: COPYRIGHT_SERVICE_LABEL - Score : 100.00 - Match type : COPYRIGHT - Files with this license: - lib/xmlparse.c [9:37] - +KEEP COPYRIGHT_SERVICE_LABEL e2f8f506923a26765706e1ad8cc8edc6 +BELONGS ya.make + Note: matched license text is too long. Read it in the source files. + Scancode info: + Original SPDX id: COPYRIGHT_SERVICE_LABEL + Score : 100.00 + Match type : COPYRIGHT + Files with this license: + lib/xmlparse.c [9:37] + KEEP COPYRIGHT_SERVICE_LABEL e3d6c1b6030b59aad9996cc0a9efeda5 BELONGS ya.make Note: matched license text is too long. Read it in the source files. @@ -599,7 +599,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL e8d75752f30998b89994f01f786353a2 BELONGS ya.make @@ -621,7 +621,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL ef0dda0153a00710149f327147a79b7f BELONGS ya.make @@ -652,7 +652,7 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] KEEP COPYRIGHT_SERVICE_LABEL fea018c6e4e19bc6bd4ac263c015567a BELONGS ya.make @@ -680,4 +680,4 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - lib/xmlparse.c [9:37] + lib/xmlparse.c [9:37] diff --git a/contrib/libs/expat/.yandex_meta/devtools.licenses.report b/contrib/libs/expat/.yandex_meta/devtools.licenses.report index 9992a2f2ec..0c5ff0a949 100644 --- a/contrib/libs/expat/.yandex_meta/devtools.licenses.report +++ b/contrib/libs/expat/.yandex_meta/devtools.licenses.report @@ -42,7 +42,7 @@ BELONGS ya.make KEEP MIT 6bb6514a1d779748b76a73215a89ae66 BELONGS ya.make -FILE_INCLUDE AUTHORS found in files: expat.h at line 34, expat_external.h at line 34, lib/ascii.h at line 30, lib/asciitab.h at line 29, lib/iasciitab.h at line 29, lib/internal.h at line 50, lib/latin1tab.h at line 29, lib/utf8tab.h at line 29, lib/winconfig.h at line 29, lib/xmlparse.c at line 53, lib/xmlrole.c at line 35, lib/xmlrole.h at line 30, lib/xmltok.c at line 40, lib/xmltok.h at line 31, lib/xmltok_impl.c at line 35, lib/xmltok_impl.h at line 28, lib/xmltok_ns.c at line 31 +FILE_INCLUDE AUTHORS found in files: expat.h at line 34, expat_external.h at line 34, lib/ascii.h at line 30, lib/asciitab.h at line 29, lib/iasciitab.h at line 29, lib/internal.h at line 50, lib/latin1tab.h at line 29, lib/utf8tab.h at line 29, lib/winconfig.h at line 29, lib/xmlparse.c at line 53, lib/xmlrole.c at line 35, lib/xmlrole.h at line 30, lib/xmltok.c at line 40, lib/xmltok.h at line 31, lib/xmltok_impl.c at line 35, lib/xmltok_impl.h at line 28, lib/xmltok_ns.c at line 31 Note: matched license text is too long. Read it in the source files. Scancode info: Original SPDX id: MIT @@ -59,10 +59,10 @@ FILE_INCLUDE AUTHORS found in files: expat.h at line 34, expat_external.h at lin lib/latin1tab.h [15:32] lib/utf8tab.h [15:32] lib/winconfig.h [15:32] - lib/xmlparse.c [39:56] - lib/xmlrole.c [21:38] + lib/xmlparse.c [39:56] + lib/xmlrole.c [21:38] lib/xmlrole.h [16:33] - lib/xmltok.c [26:43] + lib/xmltok.c [26:43] lib/xmltok.h [17:34] lib/xmltok_impl.c [21:38] lib/xmltok_impl.h [14:31] @@ -100,10 +100,10 @@ BELONGS ya.make lib/nametab.h [11:11] lib/utf8tab.h [13:13] lib/winconfig.h [13:13] - lib/xmlparse.c [37:37] - lib/xmlrole.c [19:19] + lib/xmlparse.c [37:37] + lib/xmlrole.c [19:19] lib/xmlrole.h [14:14] - lib/xmltok.c [24:24] + lib/xmltok.c [24:24] lib/xmltok.h [15:15] lib/xmltok_impl.c [19:19] lib/xmltok_impl.h [12:12] diff --git a/contrib/libs/expat/.yandex_meta/licenses.list.txt b/contrib/libs/expat/.yandex_meta/licenses.list.txt index ed639d7902..9bb32b586e 100644 --- a/contrib/libs/expat/.yandex_meta/licenses.list.txt +++ b/contrib/libs/expat/.yandex_meta/licenses.list.txt @@ -55,8 +55,8 @@ Copyright (c) 2019 David Loffredo <loffredo@steptools.com> Copyright (c) 2019-2020 Ben Wagner <bungeman@chromium.org> Copyright (c) 2019 Vadim Zeitlin <vadim@zeitlins.org> - Copyright (c) 2021 Dong-hee Na <donghee.na@python.org> - Copyright (c) 2022 Samanta Navarro <ferivoz@riseup.net> + Copyright (c) 2021 Dong-hee Na <donghee.na@python.org> + Copyright (c) 2022 Samanta Navarro <ferivoz@riseup.net> Licensed under the MIT license: @@ -75,7 +75,7 @@ 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> + Copyright (c) 2021 Dong-hee Na <donghee.na@python.org> Licensed under the MIT license: diff --git a/contrib/libs/expat/README.md b/contrib/libs/expat/README.md index 9c9e9e62f3..00e6cca22d 100644 --- a/contrib/libs/expat/README.md +++ b/contrib/libs/expat/README.md @@ -1,14 +1,14 @@ -[![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) +[![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) [![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) +[![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.4.4 +# Expat, Release 2.4.4 This is Expat, a C library for parsing XML, started by -[James Clark](https://en.wikipedia.org/wiki/James_Clark_%28programmer%29) 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 handlers with the parser before starting the parse. These handlers are called when the parser discovers the associated structures in the @@ -16,14 +16,14 @@ document being parsed. A start tag is an example of the kind of structures for which you may register handlers. Expat supports the following compilers: - + - GNU GCC >=4.5 - LLVM Clang >=3.5 -- Microsoft Visual Studio >=15.0/2017 (rolling `${today} minus 5 years`) +- Microsoft Visual Studio >=15.0/2017 (rolling `${today} minus 5 years`) Windows users can use the -[`expat-win32bin-*.*.*.{exe,zip}` download](https://github.com/libexpat/libexpat/releases), -which includes both pre-compiled libraries and executables, and source code for +[`expat-win32bin-*.*.*.{exe,zip}` download](https://github.com/libexpat/libexpat/releases), +which includes both pre-compiled libraries and executables, and source code for developers. Expat is [free software](https://www.gnu.org/philosophy/free-sw.en.html). @@ -33,67 +33,67 @@ contained in the file distributed with this package. 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 - + +## 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 [Git repository](https://github.com/libexpat/libexpat/), you need to run a script that generates the configure script using the @@ -107,11 +107,11 @@ autoconf 2.58 or newer. Run the script like this: Once this has been done, follow the same instructions as for building from a source distribution. - -## Building from a Source Distribution - -### a) Building with the configure script (i.e. GNU Autotools) - + +## 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 configuration shell script in the top level distribution directory: @@ -201,14 +201,14 @@ A reference manual is available in the file `doc/reference.html` in this distribution. -### b) Building with CMake - -The CMake build system is still *experimental* and may 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. - - -#### Available Options - + + +#### Available Options + For an idea of the available (non-advanced) options for building with CMake: ```console diff --git a/contrib/libs/expat/expat.h b/contrib/libs/expat/expat.h index 9b662f7e13..4c5704fd93 100644 --- a/contrib/libs/expat/expat.h +++ b/contrib/libs/expat/expat.h @@ -7,14 +7,14 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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) 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> + 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: Permission is hereby granted, free of charge, to any person obtaining @@ -122,11 +122,11 @@ enum XML_Error { XML_ERROR_RESERVED_PREFIX_XMLNS, XML_ERROR_RESERVED_NAMESPACE_URI, /* Added in 2.2.1. */ - XML_ERROR_INVALID_ARGUMENT, - /* Added in 2.3.0. */ - XML_ERROR_NO_BUFFER, - /* Added in 2.4.0. */ - XML_ERROR_AMPLIFICATION_LIMIT_BREACH + 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 { @@ -524,7 +524,7 @@ typedef struct { Otherwise it must return XML_STATUS_ERROR. If info does not describe a suitable encoding, then the parser will - return an XML_ERROR_UNKNOWN_ENCODING error. + return an XML_ERROR_UNKNOWN_ENCODING error. */ typedef int(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData, const XML_Char *name, @@ -1008,10 +1008,10 @@ enum XML_FeatureEnum { XML_FEATURE_SIZEOF_XML_LCHAR, XML_FEATURE_NS, XML_FEATURE_LARGE_SIZE, - 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 + 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. */ }; @@ -1024,24 +1024,24 @@ typedef struct { XMLPARSEAPI(const XML_Feature *) 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 - +#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. See http://semver.org. */ #define XML_MAJOR_VERSION 2 -#define XML_MINOR_VERSION 4 -#define XML_MICRO_VERSION 4 +#define XML_MINOR_VERSION 4 +#define XML_MICRO_VERSION 4 #ifdef __cplusplus } diff --git a/contrib/libs/expat/expat_config.h b/contrib/libs/expat/expat_config.h index 6aef1e6f25..8f890fed02 100644 --- a/contrib/libs/expat/expat_config.h +++ b/contrib/libs/expat/expat_config.h @@ -37,9 +37,9 @@ /* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1 -/* Define to 1 if you have the <stdio.h> header file. */ -#define HAVE_STDIO_H 1 - +/* Define to 1 if you have the <stdio.h> header file. */ +#define HAVE_STDIO_H 1 + /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 @@ -77,7 +77,7 @@ #define PACKAGE_NAME "expat" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "expat 2.4.4" +#define PACKAGE_STRING "expat 2.4.4" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "expat" @@ -86,15 +86,15 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "2.4.4" +#define PACKAGE_VERSION "2.4.4" -/* 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. */ +/* 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. */ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "2.4.4" +#define VERSION "2.4.4" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ diff --git a/contrib/libs/expat/expat_external.h b/contrib/libs/expat/expat_external.h index 0125d676ea..8829f77091 100644 --- a/contrib/libs/expat/expat_external.h +++ b/contrib/libs/expat/expat_external.h @@ -7,14 +7,14 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/ascii.h b/contrib/libs/expat/lib/ascii.h index f8701de0d9..1f594d2e54 100644 --- a/contrib/libs/expat/lib/ascii.h +++ b/contrib/libs/expat/lib/ascii.h @@ -6,11 +6,11 @@ \___/_/\_\ .__/ \__,_|\__| |_| XML parser - Copyright (c) 1999-2000 Thai Open Source Software Center Ltd - 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> + Copyright (c) 1999-2000 Thai Open Source Software Center Ltd + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/asciitab.h b/contrib/libs/expat/lib/asciitab.h index f78b1af276..af766fb247 100644 --- a/contrib/libs/expat/lib/asciitab.h +++ b/contrib/libs/expat/lib/asciitab.h @@ -7,9 +7,9 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/iasciitab.h b/contrib/libs/expat/lib/iasciitab.h index e28c46b40c..5d8646f2a3 100644 --- a/contrib/libs/expat/lib/iasciitab.h +++ b/contrib/libs/expat/lib/iasciitab.h @@ -7,9 +7,9 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/internal.h b/contrib/libs/expat/lib/internal.h index 4f4e01d468..444eba0fb0 100644 --- a/contrib/libs/expat/lib/internal.h +++ b/contrib/libs/expat/lib/internal.h @@ -25,12 +25,12 @@ \___/_/\_\ .__/ \__,_|\__| |_| XML parser - Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net> - 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> + Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net> + 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: Permission is hereby granted, free of charge, to any person obtaining @@ -105,57 +105,57 @@ # 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 - +#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 # define UNUSED_P(p) (void)p #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 - +/* 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 extern "C" { #endif -void _INTERNAL_trim_to_complete_utf8_characters(const char *from, - 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); +void _INTERNAL_trim_to_complete_utf8_characters(const char *from, + 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 diff --git a/contrib/libs/expat/lib/latin1tab.h b/contrib/libs/expat/lib/latin1tab.h index 9d279575eb..b681d278af 100644 --- a/contrib/libs/expat/lib/latin1tab.h +++ b/contrib/libs/expat/lib/latin1tab.h @@ -7,9 +7,9 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/nametab.h b/contrib/libs/expat/lib/nametab.h index cdfe788b3c..63485446b9 100644 --- a/contrib/libs/expat/lib/nametab.h +++ b/contrib/libs/expat/lib/nametab.h @@ -6,8 +6,8 @@ \___/_/\_\ .__/ \__,_|\__| |_| XML parser - Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> - Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org> + Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> + Copyright (c) 2017 Sebastian Pipping <sebastian@pipping.org> Licensed under the MIT license: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/siphash.h b/contrib/libs/expat/lib/siphash.h index 16a86644a1..e5406d7ee9 100644 --- a/contrib/libs/expat/lib/siphash.h +++ b/contrib/libs/expat/lib/siphash.h @@ -11,9 +11,9 @@ * -------------------------------------------------------------------------- * HISTORY: * - * 2020-10-03 (Sebastian Pipping) - * - Drop support for Visual Studio 9.0/2008 and earlier - * + * 2020-10-03 (Sebastian Pipping) + * - Drop support for Visual Studio 9.0/2008 and earlier + * * 2019-08-03 (Sebastian Pipping) * - Mark part of sip24_valid as to be excluded from clang-format * - Re-format code using clang-format 9 @@ -99,7 +99,7 @@ #define SIPHASH_H #include <stddef.h> /* size_t */ -#include <stdint.h> /* uint64_t uint32_t uint8_t */ +#include <stdint.h> /* uint64_t uint32_t uint8_t */ /* * Workaround to not require a C++11 compiler for using ULL suffix diff --git a/contrib/libs/expat/lib/utf8tab.h b/contrib/libs/expat/lib/utf8tab.h index 9bae0c8103..88efcf91cc 100644 --- a/contrib/libs/expat/lib/utf8tab.h +++ b/contrib/libs/expat/lib/utf8tab.h @@ -7,9 +7,9 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/winconfig.h b/contrib/libs/expat/lib/winconfig.h index e867bd6659..2ecd61b5b9 100644 --- a/contrib/libs/expat/lib/winconfig.h +++ b/contrib/libs/expat/lib/winconfig.h @@ -6,10 +6,10 @@ \___/_/\_\ .__/ \__,_|\__| |_| XML parser - Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> - Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net> - Copyright (c) 2005 Karl Waclawek <karl@waclawek.net> - Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org> + Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> + Copyright (c) 2002 Greg Stein <gstein@users.sourceforge.net> + Copyright (c) 2005 Karl Waclawek <karl@waclawek.net> + Copyright (c) 2017-2021 Sebastian Pipping <sebastian@pipping.org> Licensed under the MIT license: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/xmlparse.c b/contrib/libs/expat/lib/xmlparse.c index 9a52226cf9..db0efbab0f 100644 --- a/contrib/libs/expat/lib/xmlparse.c +++ b/contrib/libs/expat/lib/xmlparse.c @@ -1,4 +1,4 @@ -/* 2e2c8ce5f11a473d65ec313ab20ceee6afefb355f5405afc06e7204e2e41c8c0 (2.4.4+) +/* 2e2c8ce5f11a473d65ec313ab20ceee6afefb355f5405afc06e7204e2e41c8c0 (2.4.4+) __ __ _ ___\ \/ /_ __ __ _| |_ / _ \\ /| '_ \ / _` | __| @@ -7,33 +7,33 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> - Copyright (c) 2000-2006 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) 2005-2009 Steven Solie <ssolie@users.sourceforge.net> - Copyright (c) 2016 Eric Rahm <erahm@mozilla.com> + Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> + Copyright (c) 2000-2006 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) 2005-2009 Steven Solie <ssolie@users.sourceforge.net> + Copyright (c) 2016 Eric Rahm <erahm@mozilla.com> Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org> - Copyright (c) 2016 Gaurav <g.gupta@samsung.com> - Copyright (c) 2016 Thomas Beutlich <tc@tbeu.de> - Copyright (c) 2016 Gustavo Grieco <gustavo.grieco@imag.fr> - Copyright (c) 2016 Pascal Cuoq <cuoq@trust-in-soft.com> - Copyright (c) 2016 Ed Schouten <ed@nuxi.nl> - Copyright (c) 2017-2018 Rhodri James <rhodri@wildebeest.org.uk> - Copyright (c) 2017 Václav Slavík <vaclav@slavik.io> - Copyright (c) 2017 Viktor Szakats <commit@vsz.me> - Copyright (c) 2017 Chanho Park <chanho61.park@samsung.com> - Copyright (c) 2017 Rolf Eike Beer <eike@sf-mail.de> - Copyright (c) 2017 Hans Wennborg <hans@chromium.org> - Copyright (c) 2018 Anton Maklakov <antmak.pub@gmail.com> - Copyright (c) 2018 Benjamin Peterson <benjamin@python.org> - Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it> - Copyright (c) 2018 Mariusz Zaborski <oshogbo@vexillium.org> - Copyright (c) 2019 David Loffredo <loffredo@steptools.com> - Copyright (c) 2019-2020 Ben Wagner <bungeman@chromium.org> - Copyright (c) 2019 Vadim Zeitlin <vadim@zeitlins.org> - Copyright (c) 2021 Dong-hee Na <donghee.na@python.org> - Copyright (c) 2022 Samanta Navarro <ferivoz@riseup.net> + Copyright (c) 2016 Gaurav <g.gupta@samsung.com> + Copyright (c) 2016 Thomas Beutlich <tc@tbeu.de> + Copyright (c) 2016 Gustavo Grieco <gustavo.grieco@imag.fr> + Copyright (c) 2016 Pascal Cuoq <cuoq@trust-in-soft.com> + Copyright (c) 2016 Ed Schouten <ed@nuxi.nl> + Copyright (c) 2017-2018 Rhodri James <rhodri@wildebeest.org.uk> + Copyright (c) 2017 Václav Slavík <vaclav@slavik.io> + Copyright (c) 2017 Viktor Szakats <commit@vsz.me> + Copyright (c) 2017 Chanho Park <chanho61.park@samsung.com> + Copyright (c) 2017 Rolf Eike Beer <eike@sf-mail.de> + Copyright (c) 2017 Hans Wennborg <hans@chromium.org> + Copyright (c) 2018 Anton Maklakov <antmak.pub@gmail.com> + Copyright (c) 2018 Benjamin Peterson <benjamin@python.org> + Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it> + Copyright (c) 2018 Mariusz Zaborski <oshogbo@vexillium.org> + Copyright (c) 2019 David Loffredo <loffredo@steptools.com> + Copyright (c) 2019-2020 Ben Wagner <bungeman@chromium.org> + Copyright (c) 2019 Vadim Zeitlin <vadim@zeitlins.org> + Copyright (c) 2021 Dong-hee Na <donghee.na@python.org> + Copyright (c) 2022 Samanta Navarro <ferivoz@riseup.net> Licensed under the MIT license: Permission is hereby granted, free of charge, to any person obtaining @@ -56,10 +56,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#define XML_BUILDING_EXPAT 1 - -#include <expat_config.h> - +#define XML_BUILDING_EXPAT 1 + +#include <expat_config.h> + #if ! defined(_GNU_SOURCE) # define _GNU_SOURCE 1 /* syscall prototype */ #endif @@ -77,8 +77,8 @@ #include <limits.h> /* UINT_MAX */ #include <stdio.h> /* fprintf */ #include <stdlib.h> /* getenv, rand_s */ -#include <stdint.h> /* uintptr_t */ -#include <math.h> /* isnan */ +#include <stdint.h> /* uintptr_t */ +#include <math.h> /* isnan */ #ifdef _WIN32 # define getpid GetCurrentProcessId @@ -92,7 +92,7 @@ #ifdef _WIN32 # include "winconfig.h" -#endif +#endif #include "ascii.h" #include "expat.h" @@ -399,31 +399,31 @@ typedef struct open_internal_entity { XML_Bool betweenDecl; /* WFC: PE Between Declarations */ } OPEN_INTERNAL_ENTITY; -enum XML_Account { - XML_ACCOUNT_DIRECT, /* bytes directly passed to the Expat parser */ - XML_ACCOUNT_ENTITY_EXPANSION, /* intermediate bytes produced during entity - expansion */ - XML_ACCOUNT_NONE /* i.e. do not account, was accounted already */ -}; - -#ifdef XML_DTD -typedef unsigned long long XmlBigCount; -typedef struct accounting { - XmlBigCount countBytesDirect; - XmlBigCount countBytesIndirect; - int debugLevel; - float maximumAmplificationFactor; // >=1.0 - unsigned long long activationThresholdBytes; -} ACCOUNTING; - -typedef struct entity_stats { - unsigned int countEverOpened; - unsigned int currentDepth; - unsigned int maximumDepthSeen; - int debugLevel; -} ENTITY_STATS; -#endif /* XML_DTD */ - +enum XML_Account { + XML_ACCOUNT_DIRECT, /* bytes directly passed to the Expat parser */ + XML_ACCOUNT_ENTITY_EXPANSION, /* intermediate bytes produced during entity + expansion */ + XML_ACCOUNT_NONE /* i.e. do not account, was accounted already */ +}; + +#ifdef XML_DTD +typedef unsigned long long XmlBigCount; +typedef struct accounting { + XmlBigCount countBytesDirect; + XmlBigCount countBytesIndirect; + int debugLevel; + float maximumAmplificationFactor; // >=1.0 + unsigned long long activationThresholdBytes; +} ACCOUNTING; + +typedef struct entity_stats { + unsigned int countEverOpened; + unsigned int currentDepth; + unsigned int maximumDepthSeen; + int debugLevel; +} ENTITY_STATS; +#endif /* XML_DTD */ + typedef enum XML_Error PTRCALL Processor(XML_Parser parser, const char *start, const char *end, const char **endPtr); @@ -454,18 +454,18 @@ static enum XML_Error initializeEncoding(XML_Parser parser); static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, - XML_Bool haveMore, XML_Bool allowClosingDoctype, - enum XML_Account account); + XML_Bool haveMore, XML_Bool allowClosingDoctype, + enum XML_Account account); static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl); static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *start, const char *end, const char **endPtr, - XML_Bool haveMore, enum XML_Account account); + XML_Bool haveMore, enum XML_Account account); static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, - const char **nextPtr, XML_Bool haveMore, - enum XML_Account account); + const char **nextPtr, XML_Bool haveMore, + enum XML_Account account); #ifdef XML_DTD static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, @@ -475,8 +475,8 @@ static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *, static void freeBindings(XML_Parser parser, BINDING *bindings); static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s, TAG_NAME *tagNamePtr, - BINDING **bindingsPtr, - enum XML_Account account); + BINDING **bindingsPtr, + enum XML_Account account); static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr); @@ -485,18 +485,18 @@ static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, XML_Bool isCdata, XML_Parser parser); static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, const char *, - const char *, STRING_POOL *, - enum XML_Account account); + const char *, STRING_POOL *, + enum XML_Account account); static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, const char *, - const char *, STRING_POOL *, - enum XML_Account account); + const char *, STRING_POOL *, + enum XML_Account account); static ATTRIBUTE_ID *getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, - const char *start, const char *end, - enum XML_Account account); + const char *start, const char *end, + enum XML_Account account); static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportComment(XML_Parser parser, const ENCODING *enc, @@ -560,34 +560,34 @@ static XML_Parser parserCreate(const XML_Char *encodingName, static void parserInit(XML_Parser parser, const XML_Char *encodingName); -#ifdef XML_DTD -static float accountingGetCurrentAmplification(XML_Parser rootParser); -static void accountingReportStats(XML_Parser originParser, const char *epilog); -static void accountingOnAbort(XML_Parser originParser); -static void accountingReportDiff(XML_Parser rootParser, - unsigned int levelsAwayFromRootParser, - const char *before, const char *after, - ptrdiff_t bytesMore, int source_line, - enum XML_Account account); -static XML_Bool accountingDiffTolerated(XML_Parser originParser, int tok, - const char *before, const char *after, - int source_line, - enum XML_Account account); - -static void entityTrackingReportStats(XML_Parser parser, ENTITY *entity, - const char *action, int sourceLine); -static void entityTrackingOnOpen(XML_Parser parser, ENTITY *entity, - int sourceLine); -static void entityTrackingOnClose(XML_Parser parser, ENTITY *entity, - int sourceLine); - -static XML_Parser getRootParserOf(XML_Parser parser, - unsigned int *outLevelDiff); -#endif /* XML_DTD */ - -static unsigned long getDebugLevel(const char *variableName, - unsigned long defaultDebugLevel); - +#ifdef XML_DTD +static float accountingGetCurrentAmplification(XML_Parser rootParser); +static void accountingReportStats(XML_Parser originParser, const char *epilog); +static void accountingOnAbort(XML_Parser originParser); +static void accountingReportDiff(XML_Parser rootParser, + unsigned int levelsAwayFromRootParser, + const char *before, const char *after, + ptrdiff_t bytesMore, int source_line, + enum XML_Account account); +static XML_Bool accountingDiffTolerated(XML_Parser originParser, int tok, + const char *before, const char *after, + int source_line, + enum XML_Account account); + +static void entityTrackingReportStats(XML_Parser parser, ENTITY *entity, + const char *action, int sourceLine); +static void entityTrackingOnOpen(XML_Parser parser, ENTITY *entity, + int sourceLine); +static void entityTrackingOnClose(XML_Parser parser, ENTITY *entity, + int sourceLine); + +static XML_Parser getRootParserOf(XML_Parser parser, + unsigned int *outLevelDiff); +#endif /* XML_DTD */ + +static unsigned long getDebugLevel(const char *variableName, + unsigned long defaultDebugLevel); + #define poolStart(pool) ((pool)->start) #define poolEnd(pool) ((pool)->ptr) #define poolLength(pool) ((pool)->ptr - (pool)->start) @@ -701,10 +701,10 @@ struct XML_ParserStruct { enum XML_ParamEntityParsing m_paramEntityParsing; #endif unsigned long m_hash_secret_salt; -#ifdef XML_DTD - ACCOUNTING m_accounting; - ENTITY_STATS m_entity_stats; -#endif +#ifdef XML_DTD + ACCOUNTING m_accounting; + ENTITY_STATS m_entity_stats; +#endif }; #define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s))) @@ -889,8 +889,8 @@ gather_time_entropy(void) { static unsigned long ENTROPY_DEBUG(const char *label, unsigned long entropy) { - if (getDebugLevel("EXPAT_ENTROPY_DEBUG", 0) >= 1u) { - fprintf(stderr, "expat: Entropy: %s --> 0x%0*lx (%lu bytes)\n", label, + if (getDebugLevel("EXPAT_ENTROPY_DEBUG", 0) >= 1u) { + fprintf(stderr, "expat: Entropy: %s --> 0x%0*lx (%lu bytes)\n", label, (int)sizeof(entropy) * 2, entropy, (unsigned long)sizeof(entropy)); } return entropy; @@ -975,7 +975,7 @@ parserCreate(const XML_Char *encodingName, if (memsuite) { XML_Memory_Handling_Suite *mtemp; - parser = memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); + parser = memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = memsuite->malloc_fcn; @@ -1152,18 +1152,18 @@ parserInit(XML_Parser parser, const XML_Char *encodingName) { parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif parser->m_hash_secret_salt = 0; - -#ifdef XML_DTD - memset(&parser->m_accounting, 0, sizeof(ACCOUNTING)); - parser->m_accounting.debugLevel = getDebugLevel("EXPAT_ACCOUNTING_DEBUG", 0u); - parser->m_accounting.maximumAmplificationFactor - = EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT; - parser->m_accounting.activationThresholdBytes - = EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT; - - memset(&parser->m_entity_stats, 0, sizeof(ENTITY_STATS)); - parser->m_entity_stats.debugLevel = getDebugLevel("EXPAT_ENTITY_DEBUG", 0u); -#endif + +#ifdef XML_DTD + memset(&parser->m_accounting, 0, sizeof(ACCOUNTING)); + parser->m_accounting.debugLevel = getDebugLevel("EXPAT_ACCOUNTING_DEBUG", 0u); + parser->m_accounting.maximumAmplificationFactor + = EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT; + parser->m_accounting.activationThresholdBytes + = EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT; + + memset(&parser->m_entity_stats, 0, sizeof(ENTITY_STATS)); + parser->m_entity_stats.debugLevel = getDebugLevel("EXPAT_ENTITY_DEBUG", 0u); +#endif } /* moves list of bindings to m_freeBindingList */ @@ -1984,12 +1984,12 @@ XML_ParseBuffer(XML_Parser parser, int len, int isFinal) { parser->m_errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; case XML_INITIALIZED: - /* Has someone called XML_GetBuffer successfully before? */ - if (! parser->m_bufferPtr) { - parser->m_errorCode = XML_ERROR_NO_BUFFER; - return XML_STATUS_ERROR; - } - + /* Has someone called XML_GetBuffer successfully before? */ + if (! parser->m_bufferPtr) { + parser->m_errorCode = XML_ERROR_NO_BUFFER; + return XML_STATUS_ERROR; + } + if (parser->m_parentParser == NULL && ! startParsing(parser)) { parser->m_errorCode = XML_ERROR_NO_MEMORY; return XML_STATUS_ERROR; @@ -2068,11 +2068,11 @@ XML_GetBuffer(XML_Parser parser, int len) { keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer); if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; - /* Detect and prevent integer overflow */ - if (keep > INT_MAX - neededSize) { - parser->m_errorCode = XML_ERROR_NO_MEMORY; - return NULL; - } + /* Detect and prevent integer overflow */ + if (keep > INT_MAX - neededSize) { + parser->m_errorCode = XML_ERROR_NO_MEMORY; + return NULL; + } neededSize += keep; #endif /* defined XML_CONTEXT_BYTES */ if (neededSize @@ -2439,14 +2439,14 @@ XML_ErrorString(enum XML_Error code) { /* Added in 2.2.5. */ case XML_ERROR_INVALID_ARGUMENT: /* Constant added in 2.2.1, already */ return XML_L("invalid argument"); - /* Added in 2.3.0. */ - case XML_ERROR_NO_BUFFER: - return XML_L( - "a successful prior call to function XML_GetBuffer is required"); - /* Added in 2.4.0. */ - case XML_ERROR_AMPLIFICATION_LIMIT_BREACH: - return XML_L( - "limit on input amplification factor (from DTD and entities) breached"); + /* Added in 2.3.0. */ + case XML_ERROR_NO_BUFFER: + return XML_L( + "a successful prior call to function XML_GetBuffer is required"); + /* Added in 2.4.0. */ + case XML_ERROR_AMPLIFICATION_LIMIT_BREACH: + return XML_L( + "limit on input amplification factor (from DTD and entities) breached"); } return NULL; } @@ -2483,75 +2483,75 @@ XML_ExpatVersionInfo(void) { const XML_Feature *XMLCALL XML_GetFeatureList(void) { - static const XML_Feature features[] = { - {XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"), - sizeof(XML_Char)}, - {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"), - sizeof(XML_LChar)}, + static const XML_Feature features[] = { + {XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"), + sizeof(XML_Char)}, + {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"), + sizeof(XML_LChar)}, #ifdef XML_UNICODE - {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0}, + {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0}, #endif #ifdef XML_UNICODE_WCHAR_T - {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0}, + {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0}, #endif #ifdef XML_DTD - {XML_FEATURE_DTD, XML_L("XML_DTD"), 0}, + {XML_FEATURE_DTD, XML_L("XML_DTD"), 0}, #endif #ifdef XML_CONTEXT_BYTES - {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"), - XML_CONTEXT_BYTES}, + {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"), + XML_CONTEXT_BYTES}, #endif #ifdef XML_MIN_SIZE - {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0}, + {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0}, #endif #ifdef XML_NS - {XML_FEATURE_NS, XML_L("XML_NS"), 0}, + {XML_FEATURE_NS, XML_L("XML_NS"), 0}, #endif #ifdef XML_LARGE_SIZE - {XML_FEATURE_LARGE_SIZE, XML_L("XML_LARGE_SIZE"), 0}, + {XML_FEATURE_LARGE_SIZE, XML_L("XML_LARGE_SIZE"), 0}, #endif #ifdef XML_ATTR_INFO - {XML_FEATURE_ATTR_INFO, XML_L("XML_ATTR_INFO"), 0}, + {XML_FEATURE_ATTR_INFO, XML_L("XML_ATTR_INFO"), 0}, +#endif +#ifdef XML_DTD + /* Added in Expat 2.4.0. */ + {XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT, + XML_L("XML_BLAP_MAX_AMP"), + (long int) + EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT}, + {XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT, + XML_L("XML_BLAP_ACT_THRES"), + EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT}, #endif -#ifdef XML_DTD - /* Added in Expat 2.4.0. */ - {XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT, - XML_L("XML_BLAP_MAX_AMP"), - (long int) - EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT}, - {XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT, - XML_L("XML_BLAP_ACT_THRES"), - EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT}, -#endif - {XML_FEATURE_END, NULL, 0}}; + {XML_FEATURE_END, NULL, 0}}; return features; } -#ifdef XML_DTD -XML_Bool XMLCALL -XML_SetBillionLaughsAttackProtectionMaximumAmplification( - XML_Parser parser, float maximumAmplificationFactor) { - if ((parser == NULL) || (parser->m_parentParser != NULL) - || isnan(maximumAmplificationFactor) - || (maximumAmplificationFactor < 1.0f)) { - return XML_FALSE; - } - parser->m_accounting.maximumAmplificationFactor = maximumAmplificationFactor; - return XML_TRUE; -} - -XML_Bool XMLCALL -XML_SetBillionLaughsAttackProtectionActivationThreshold( - XML_Parser parser, unsigned long long activationThresholdBytes) { - if ((parser == NULL) || (parser->m_parentParser != NULL)) { - return XML_FALSE; - } - parser->m_accounting.activationThresholdBytes = activationThresholdBytes; - return XML_TRUE; -} -#endif /* XML_DTD */ - +#ifdef XML_DTD +XML_Bool XMLCALL +XML_SetBillionLaughsAttackProtectionMaximumAmplification( + XML_Parser parser, float maximumAmplificationFactor) { + if ((parser == NULL) || (parser->m_parentParser != NULL) + || isnan(maximumAmplificationFactor) + || (maximumAmplificationFactor < 1.0f)) { + return XML_FALSE; + } + parser->m_accounting.maximumAmplificationFactor = maximumAmplificationFactor; + return XML_TRUE; +} + +XML_Bool XMLCALL +XML_SetBillionLaughsAttackProtectionActivationThreshold( + XML_Parser parser, unsigned long long activationThresholdBytes) { + if ((parser == NULL) || (parser->m_parentParser != NULL)) { + return XML_FALSE; + } + parser->m_accounting.activationThresholdBytes = activationThresholdBytes; + return XML_TRUE; +} +#endif /* XML_DTD */ + /* Initially tag->rawName always points into the parse buffer; for those TAG instances opened while the current parse buffer was processed, and not yet closed, we need to store tag->rawName in a more @@ -2604,9 +2604,9 @@ storeRawNames(XML_Parser parser) { static enum XML_Error PTRCALL contentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { - enum XML_Error result = doContent( - parser, 0, parser->m_encoding, start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); + enum XML_Error result = doContent( + parser, 0, parser->m_encoding, start, end, endPtr, + (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); if (result == XML_ERROR_NONE) { if (! storeRawNames(parser)) return XML_ERROR_NO_MEMORY; @@ -2631,14 +2631,14 @@ externalEntityInitProcessor2(XML_Parser parser, const char *start, int tok = XmlContentTok(parser->m_encoding, start, end, &next); switch (tok) { case XML_TOK_BOM: -#ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, start, next, __LINE__, - XML_ACCOUNT_DIRECT)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -#endif /* XML_DTD */ - +#ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, start, next, __LINE__, + XML_ACCOUNT_DIRECT)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +#endif /* XML_DTD */ + /* If we are at the end of the buffer, this would cause the next stage, i.e. externalEntityInitProcessor3, to pass control directly to doContent (by detecting XML_TOK_NONE) without processing any xml text @@ -2676,10 +2676,10 @@ externalEntityInitProcessor3(XML_Parser parser, const char *start, const char *next = start; /* XmlContentTok doesn't always set the last arg */ parser->m_eventPtr = start; tok = XmlContentTok(parser->m_encoding, start, end, &next); - /* Note: These bytes are accounted later in: - - processXmlDecl - - externalEntityContentProcessor - */ + /* Note: These bytes are accounted later in: + - processXmlDecl + - externalEntityContentProcessor + */ parser->m_eventEndPtr = next; switch (tok) { @@ -2721,8 +2721,8 @@ externalEntityContentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doContent(parser, 1, parser->m_encoding, start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, - XML_ACCOUNT_ENTITY_EXPANSION); + (XML_Bool)! parser->m_parsingStatus.finalBuffer, + XML_ACCOUNT_ENTITY_EXPANSION); if (result == XML_ERROR_NONE) { if (! storeRawNames(parser)) return XML_ERROR_NO_MEMORY; @@ -2733,7 +2733,7 @@ externalEntityContentProcessor(XML_Parser parser, const char *start, static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *s, const char *end, const char **nextPtr, - XML_Bool haveMore, enum XML_Account account) { + XML_Bool haveMore, enum XML_Account account) { /* save one level of indirection */ DTD *const dtd = parser->m_dtd; @@ -2751,17 +2751,17 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, for (;;) { const char *next = s; /* XmlContentTok doesn't always set the last arg */ int tok = XmlContentTok(enc, s, end, &next); -#ifdef XML_DTD - const char *accountAfter - = ((tok == XML_TOK_TRAILING_RSQB) || (tok == XML_TOK_TRAILING_CR)) - ? (haveMore ? s /* i.e. 0 bytes */ : end) - : next; - if (! accountingDiffTolerated(parser, tok, s, accountAfter, __LINE__, - account)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -#endif +#ifdef XML_DTD + const char *accountAfter + = ((tok == XML_TOK_TRAILING_RSQB) || (tok == XML_TOK_TRAILING_CR)) + ? (haveMore ? s /* i.e. 0 bytes */ : end) + : next; + if (! accountingDiffTolerated(parser, tok, s, accountAfter, __LINE__, + account)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +#endif *eventEndPP = next; switch (tok) { case XML_TOK_TRAILING_CR: @@ -2817,14 +2817,14 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, XML_Char ch = (XML_Char)XmlPredefinedEntityName( enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { -#ifdef XML_DTD - /* NOTE: We are replacing 4-6 characters original input for 1 character - * so there is no amplification and hence recording without - * protection. */ - accountingDiffTolerated(parser, tok, (char *)&ch, - ((char *)&ch) + sizeof(XML_Char), __LINE__, - XML_ACCOUNT_ENTITY_EXPANSION); -#endif /* XML_DTD */ +#ifdef XML_DTD + /* NOTE: We are replacing 4-6 characters original input for 1 character + * so there is no amplification and hence recording without + * protection. */ + accountingDiffTolerated(parser, tok, (char *)&ch, + ((char *)&ch) + sizeof(XML_Char), __LINE__, + XML_ACCOUNT_ENTITY_EXPANSION); +#endif /* XML_DTD */ if (parser->m_characterDataHandler) parser->m_characterDataHandler(parser->m_handlerArg, &ch, 1); else if (parser->m_defaultHandler) @@ -2943,8 +2943,8 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, } tag->name.str = (XML_Char *)tag->buf; *toPtr = XML_T('\0'); - result - = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings), account); + result + = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings), account); if (result) return result; if (parser->m_startElementHandler) @@ -2968,8 +2968,8 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, if (! name.str) return XML_ERROR_NO_MEMORY; poolFinish(&parser->m_tempPool); - result = storeAtts(parser, enc, s, &name, &bindings, - XML_ACCOUNT_NONE /* token spans whole start tag */); + result = storeAtts(parser, enc, s, &name, &bindings, + XML_ACCOUNT_NONE /* token spans whole start tag */); if (result != XML_ERROR_NONE) { freeBindings(parser, bindings); return result; @@ -3104,8 +3104,8 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, /* END disabled code */ else if (parser->m_defaultHandler) reportDefault(parser, enc, s, next); - result - = doCdataSection(parser, enc, &next, end, nextPtr, haveMore, account); + result + = doCdataSection(parser, enc, &next, end, nextPtr, haveMore, account); if (result != XML_ERROR_NONE) return result; else if (! next) { @@ -3234,8 +3234,8 @@ freeBindings(XML_Parser parser, BINDING *bindings) { */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, - TAG_NAME *tagNamePtr, BINDING **bindingsPtr, - enum XML_Account account) { + TAG_NAME *tagNamePtr, BINDING **bindingsPtr, + enum XML_Account account) { DTD *const dtd = parser->m_dtd; /* save one level of indirection */ ELEMENT_TYPE *elementType; int nDefaultAtts; @@ -3381,7 +3381,7 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, /* normalize the attribute value */ result = storeAttributeValue( parser, enc, isCdata, parser->m_atts[i].valuePtr, - parser->m_atts[i].valueEnd, &parser->m_tempPool, account); + parser->m_atts[i].valueEnd, &parser->m_tempPool, account); if (result) return result; appAtts[attIndex] = poolStart(&parser->m_tempPool); @@ -3849,9 +3849,9 @@ addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, static enum XML_Error PTRCALL cdataSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { - enum XML_Error result = doCdataSection( - parser, parser->m_encoding, &start, end, endPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); + enum XML_Error result = doCdataSection( + parser, parser->m_encoding, &start, end, endPtr, + (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); if (result != XML_ERROR_NONE) return result; if (start) { @@ -3871,8 +3871,8 @@ cdataSectionProcessor(XML_Parser parser, const char *start, const char *end, */ static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, - const char *end, const char **nextPtr, XML_Bool haveMore, - enum XML_Account account) { + const char *end, const char **nextPtr, XML_Bool haveMore, + enum XML_Account account) { const char *s = *startPtr; const char **eventPP; const char **eventEndPP; @@ -3890,14 +3890,14 @@ doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, for (;;) { const char *next = s; /* in case of XML_TOK_NONE or XML_TOK_PARTIAL */ int tok = XmlCdataSectionTok(enc, s, end, &next); -#ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, account)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -#else - UNUSED_P(account); -#endif +#ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, account)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +#else + UNUSED_P(account); +#endif *eventEndPP = next; switch (tok) { case XML_TOK_CDATA_SECT_CLOSE: @@ -4042,13 +4042,13 @@ doIgnoreSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, *eventPP = s; *startPtr = NULL; tok = XmlIgnoreSectionTok(enc, s, end, &next); -# ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, - XML_ACCOUNT_DIRECT)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -# endif +# ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, + XML_ACCOUNT_DIRECT)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +# endif *eventEndPP = next; switch (tok) { case XML_TOK_IGNORE_SECT: @@ -4098,7 +4098,7 @@ initializeEncoding(XML_Parser parser) { const char *s; #ifdef XML_UNICODE char encodingBuf[128]; - /* See comments about `protocolEncodingName` in parserInit() */ + /* See comments about `protocolEncodingName` in parserInit() */ if (! parser->m_protocolEncodingName) s = NULL; else { @@ -4133,15 +4133,15 @@ processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *versionend; const XML_Char *storedversion = NULL; int standalone = -1; - -#ifdef XML_DTD - if (! accountingDiffTolerated(parser, XML_TOK_XML_DECL, s, next, __LINE__, - XML_ACCOUNT_DIRECT)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -#endif - + +#ifdef XML_DTD + if (! accountingDiffTolerated(parser, XML_TOK_XML_DECL, s, next, __LINE__, + XML_ACCOUNT_DIRECT)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +#endif + if (! (parser->m_ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)( isGeneralTextEntity, parser->m_encoding, s, next, &parser->m_eventPtr, &version, &versionend, &encodingName, &newEncoding, &standalone)) { @@ -4291,10 +4291,10 @@ entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, for (;;) { tok = XmlPrologTok(parser->m_encoding, start, end, &next); - /* Note: Except for XML_TOK_BOM below, these bytes are accounted later in: - - storeEntityValue - - processXmlDecl - */ + /* Note: Except for XML_TOK_BOM below, these bytes are accounted later in: + - storeEntityValue + - processXmlDecl + */ parser->m_eventEndPtr = next; if (tok <= 0) { if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { @@ -4313,8 +4313,8 @@ entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, break; } /* found end of entity value - can store it now */ - return storeEntityValue(parser, parser->m_encoding, s, end, - XML_ACCOUNT_DIRECT); + return storeEntityValue(parser, parser->m_encoding, s, end, + XML_ACCOUNT_DIRECT); } else if (tok == XML_TOK_XML_DECL) { enum XML_Error result; result = processXmlDecl(parser, 0, start, next); @@ -4341,14 +4341,14 @@ entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, */ else if (tok == XML_TOK_BOM && next == end && ! parser->m_parsingStatus.finalBuffer) { -# ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, - XML_ACCOUNT_DIRECT)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -# endif - +# ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, + XML_ACCOUNT_DIRECT)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +# endif + *nextPtr = next; return XML_ERROR_NONE; } @@ -4391,24 +4391,24 @@ externalParEntProcessor(XML_Parser parser, const char *s, const char *end, } /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM. However, when parsing an external subset, doProlog will not accept a BOM - as valid, and report a syntax error, so we have to skip the BOM, and - account for the BOM bytes. + as valid, and report a syntax error, so we have to skip the BOM, and + account for the BOM bytes. */ else if (tok == XML_TOK_BOM) { - if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, - XML_ACCOUNT_DIRECT)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } - + if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, + XML_ACCOUNT_DIRECT)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } + s = next; tok = XmlPrologTok(parser->m_encoding, s, end, &next); } parser->m_processor = prologProcessor; return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, - XML_ACCOUNT_DIRECT); + (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, + XML_ACCOUNT_DIRECT); } static enum XML_Error PTRCALL @@ -4421,9 +4421,9 @@ entityValueProcessor(XML_Parser parser, const char *s, const char *end, for (;;) { tok = XmlPrologTok(enc, start, end, &next); - /* Note: These bytes are accounted later in: - - storeEntityValue - */ + /* Note: These bytes are accounted later in: + - storeEntityValue + */ if (tok <= 0) { if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; @@ -4441,7 +4441,7 @@ entityValueProcessor(XML_Parser parser, const char *s, const char *end, break; } /* found end of entity value - can store it now */ - return storeEntityValue(parser, enc, s, end, XML_ACCOUNT_DIRECT); + return storeEntityValue(parser, enc, s, end, XML_ACCOUNT_DIRECT); } start = next; } @@ -4455,14 +4455,14 @@ prologProcessor(XML_Parser parser, const char *s, const char *end, const char *next = s; int tok = XmlPrologTok(parser->m_encoding, s, end, &next); return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, - XML_ACCOUNT_DIRECT); + (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, + XML_ACCOUNT_DIRECT); } static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, XML_Bool haveMore, - XML_Bool allowClosingDoctype, enum XML_Account account) { + XML_Bool allowClosingDoctype, enum XML_Account account) { #ifdef XML_DTD static const XML_Char externalSubsetName[] = {ASCII_HASH, '\0'}; #endif /* XML_DTD */ @@ -4489,10 +4489,10 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, static const XML_Char enumValueSep[] = {ASCII_PIPE, '\0'}; static const XML_Char enumValueStart[] = {ASCII_LPAREN, '\0'}; -#ifndef XML_DTD - UNUSED_P(account); -#endif - +#ifndef XML_DTD + UNUSED_P(account); +#endif + /* save one level of indirection */ DTD *const dtd = parser->m_dtd; @@ -4557,20 +4557,20 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, } } role = XmlTokenRole(&parser->m_prologState, tok, s, next, enc); -#ifdef XML_DTD +#ifdef XML_DTD + switch (role) { + case XML_ROLE_INSTANCE_START: // bytes accounted in contentProcessor + case XML_ROLE_XML_DECL: // bytes accounted in processXmlDecl + case XML_ROLE_TEXT_DECL: // bytes accounted in processXmlDecl + break; + default: + if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, account)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } + } +#endif switch (role) { - case XML_ROLE_INSTANCE_START: // bytes accounted in contentProcessor - case XML_ROLE_XML_DECL: // bytes accounted in processXmlDecl - case XML_ROLE_TEXT_DECL: // bytes accounted in processXmlDecl - break; - default: - if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, account)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } - } -#endif - switch (role) { case XML_ROLE_XML_DECL: { enum XML_Error result = processXmlDecl(parser, 0, s, next); if (result != XML_ERROR_NONE) @@ -4845,8 +4845,8 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, const XML_Char *attVal; enum XML_Error result = storeAttributeValue( parser, enc, parser->m_declAttributeIsCdata, - s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool, - XML_ACCOUNT_NONE); + s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool, + XML_ACCOUNT_NONE); if (result) return result; attVal = poolStart(&dtd->pool); @@ -4879,9 +4879,9 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, break; case XML_ROLE_ENTITY_VALUE: if (dtd->keepProcessing) { - enum XML_Error result - = storeEntityValue(parser, enc, s + enc->minBytesPerChar, - next - enc->minBytesPerChar, XML_ACCOUNT_NONE); + enum XML_Error result + = storeEntityValue(parser, enc, s + enc->minBytesPerChar, + next - enc->minBytesPerChar, XML_ACCOUNT_NONE); if (parser->m_declEntity) { parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool); parser->m_declEntity->textLen @@ -5286,15 +5286,15 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, if (parser->m_externalEntityRefHandler) { dtd->paramEntityRead = XML_FALSE; entity->open = XML_TRUE; - entityTrackingOnOpen(parser, entity, __LINE__); + entityTrackingOnOpen(parser, entity, __LINE__); if (! parser->m_externalEntityRefHandler( parser->m_externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { - entityTrackingOnClose(parser, entity, __LINE__); + entityTrackingOnClose(parser, entity, __LINE__); entity->open = XML_FALSE; return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } - entityTrackingOnClose(parser, entity, __LINE__); + entityTrackingOnClose(parser, entity, __LINE__); entity->open = XML_FALSE; handleDefault = XML_FALSE; if (! dtd->paramEntityRead) { @@ -5373,7 +5373,7 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, if (dtd->in_eldecl) { ELEMENT_TYPE *el; const XML_Char *name; - size_t nameLen; + size_t nameLen; const char *nxt = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar); int myindex = nextScaffoldPart(parser); @@ -5389,13 +5389,13 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, nameLen = 0; for (; name[nameLen++];) ; - - /* Detect and prevent integer overflow */ - if (nameLen > UINT_MAX - dtd->contentStringLen) { - return XML_ERROR_NO_MEMORY; - } - - dtd->contentStringLen += (unsigned)nameLen; + + /* Detect and prevent integer overflow */ + if (nameLen > UINT_MAX - dtd->contentStringLen) { + return XML_ERROR_NO_MEMORY; + } + + dtd->contentStringLen += (unsigned)nameLen; if (parser->m_elementDeclHandler) handleDefault = XML_FALSE; } @@ -5498,13 +5498,13 @@ epilogProcessor(XML_Parser parser, const char *s, const char *end, for (;;) { const char *next = NULL; int tok = XmlPrologTok(parser->m_encoding, s, end, &next); -#ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, - XML_ACCOUNT_DIRECT)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -#endif +#ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, + XML_ACCOUNT_DIRECT)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +#endif parser->m_eventEndPtr = next; switch (tok) { /* report partial linebreak - it might be the last token */ @@ -5578,9 +5578,9 @@ processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { return XML_ERROR_NO_MEMORY; } entity->open = XML_TRUE; -#ifdef XML_DTD - entityTrackingOnOpen(parser, entity, __LINE__); -#endif +#ifdef XML_DTD + entityTrackingOnOpen(parser, entity, __LINE__); +#endif entity->processed = 0; openEntity->next = parser->m_openInternalEntities; parser->m_openInternalEntities = openEntity; @@ -5599,22 +5599,22 @@ processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { int tok = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, - tok, next, &next, XML_FALSE, XML_FALSE, - XML_ACCOUNT_ENTITY_EXPANSION); + tok, next, &next, XML_FALSE, XML_FALSE, + XML_ACCOUNT_ENTITY_EXPANSION); } else #endif /* XML_DTD */ result = doContent(parser, parser->m_tagLevel, parser->m_internalEncoding, - textStart, textEnd, &next, XML_FALSE, - XML_ACCOUNT_ENTITY_EXPANSION); + textStart, textEnd, &next, XML_FALSE, + XML_ACCOUNT_ENTITY_EXPANSION); if (result == XML_ERROR_NONE) { if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { entity->processed = (int)(next - textStart); parser->m_processor = internalEntityProcessor; } else { -#ifdef XML_DTD - entityTrackingOnClose(parser, entity, __LINE__); -#endif /* XML_DTD */ +#ifdef XML_DTD + entityTrackingOnClose(parser, entity, __LINE__); +#endif /* XML_DTD */ entity->open = XML_FALSE; parser->m_openInternalEntities = openEntity->next; /* put openEntity back in list of free instances */ @@ -5647,13 +5647,13 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end, int tok = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, - tok, next, &next, XML_FALSE, XML_TRUE, - XML_ACCOUNT_ENTITY_EXPANSION); + tok, next, &next, XML_FALSE, XML_TRUE, + XML_ACCOUNT_ENTITY_EXPANSION); } else #endif /* XML_DTD */ result = doContent(parser, openEntity->startTagLevel, parser->m_internalEncoding, textStart, textEnd, &next, - XML_FALSE, XML_ACCOUNT_ENTITY_EXPANSION); + XML_FALSE, XML_ACCOUNT_ENTITY_EXPANSION); if (result != XML_ERROR_NONE) return result; @@ -5662,9 +5662,9 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end, entity->processed = (int)(next - (const char *)entity->textPtr); return result; } else { -#ifdef XML_DTD - entityTrackingOnClose(parser, entity, __LINE__); -#endif +#ifdef XML_DTD + entityTrackingOnClose(parser, entity, __LINE__); +#endif entity->open = XML_FALSE; parser->m_openInternalEntities = openEntity->next; /* put openEntity back in list of free instances */ @@ -5678,8 +5678,8 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end, parser->m_processor = prologProcessor; tok = XmlPrologTok(parser->m_encoding, s, end, &next); return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, - XML_ACCOUNT_DIRECT); + (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, + XML_ACCOUNT_DIRECT); } else #endif /* XML_DTD */ { @@ -5687,8 +5687,8 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end, /* see externalEntityContentProcessor vs contentProcessor */ return doContent(parser, parser->m_parentParser ? 1 : 0, parser->m_encoding, s, end, nextPtr, - (XML_Bool)! parser->m_parsingStatus.finalBuffer, - XML_ACCOUNT_DIRECT); + (XML_Bool)! parser->m_parsingStatus.finalBuffer, + XML_ACCOUNT_DIRECT); } } @@ -5703,10 +5703,10 @@ errorProcessor(XML_Parser parser, const char *s, const char *end, static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, - const char *ptr, const char *end, STRING_POOL *pool, - enum XML_Account account) { + const char *ptr, const char *end, STRING_POOL *pool, + enum XML_Account account) { enum XML_Error result - = appendAttributeValue(parser, enc, isCdata, ptr, end, pool, account); + = appendAttributeValue(parser, enc, isCdata, ptr, end, pool, account); if (result) return result; if (! isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) @@ -5718,23 +5718,23 @@ storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, - const char *ptr, const char *end, STRING_POOL *pool, - enum XML_Account account) { + const char *ptr, const char *end, STRING_POOL *pool, + enum XML_Account account) { DTD *const dtd = parser->m_dtd; /* save one level of indirection */ -#ifndef XML_DTD - UNUSED_P(account); -#endif - +#ifndef XML_DTD + UNUSED_P(account); +#endif + for (;;) { - const char *next - = ptr; /* XmlAttributeValueTok doesn't always set the last arg */ + const char *next + = ptr; /* XmlAttributeValueTok doesn't always set the last arg */ int tok = XmlAttributeValueTok(enc, ptr, end, &next); -#ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, ptr, next, __LINE__, account)) { - accountingOnAbort(parser); - return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - } -#endif +#ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, ptr, next, __LINE__, account)) { + accountingOnAbort(parser); + return XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + } +#endif switch (tok) { case XML_TOK_NONE: return XML_ERROR_NONE; @@ -5794,14 +5794,14 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, XML_Char ch = (XML_Char)XmlPredefinedEntityName( enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { -#ifdef XML_DTD - /* NOTE: We are replacing 4-6 characters original input for 1 character - * so there is no amplification and hence recording without - * protection. */ - accountingDiffTolerated(parser, tok, (char *)&ch, - ((char *)&ch) + sizeof(XML_Char), __LINE__, - XML_ACCOUNT_ENTITY_EXPANSION); -#endif /* XML_DTD */ +#ifdef XML_DTD + /* NOTE: We are replacing 4-6 characters original input for 1 character + * so there is no amplification and hence recording without + * protection. */ + accountingDiffTolerated(parser, tok, (char *)&ch, + ((char *)&ch) + sizeof(XML_Char), __LINE__, + XML_ACCOUNT_ENTITY_EXPANSION); +#endif /* XML_DTD */ if (! poolAppendChar(pool, ch)) return XML_ERROR_NO_MEMORY; break; @@ -5879,16 +5879,16 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, enum XML_Error result; const XML_Char *textEnd = entity->textPtr + entity->textLen; entity->open = XML_TRUE; -#ifdef XML_DTD - entityTrackingOnOpen(parser, entity, __LINE__); -#endif +#ifdef XML_DTD + entityTrackingOnOpen(parser, entity, __LINE__); +#endif result = appendAttributeValue(parser, parser->m_internalEncoding, isCdata, (const char *)entity->textPtr, - (const char *)textEnd, pool, - XML_ACCOUNT_ENTITY_EXPANSION); -#ifdef XML_DTD - entityTrackingOnClose(parser, entity, __LINE__); -#endif + (const char *)textEnd, pool, + XML_ACCOUNT_ENTITY_EXPANSION); +#ifdef XML_DTD + entityTrackingOnClose(parser, entity, __LINE__); +#endif entity->open = XML_FALSE; if (result) return result; @@ -5918,16 +5918,16 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, - const char *entityTextPtr, const char *entityTextEnd, - enum XML_Account account) { + const char *entityTextPtr, const char *entityTextEnd, + enum XML_Account account) { DTD *const dtd = parser->m_dtd; /* save one level of indirection */ STRING_POOL *pool = &(dtd->entityValuePool); enum XML_Error result = XML_ERROR_NONE; #ifdef XML_DTD int oldInEntityValue = parser->m_prologState.inEntityValue; parser->m_prologState.inEntityValue = 1; -#else - UNUSED_P(account); +#else + UNUSED_P(account); #endif /* XML_DTD */ /* never return Null for the value argument in EntityDeclHandler, since this would indicate an external entity; therefore we @@ -5938,19 +5938,19 @@ storeEntityValue(XML_Parser parser, const ENCODING *enc, } for (;;) { - const char *next - = entityTextPtr; /* XmlEntityValueTok doesn't always set the last arg */ + const char *next + = entityTextPtr; /* XmlEntityValueTok doesn't always set the last arg */ int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); - -#ifdef XML_DTD - if (! accountingDiffTolerated(parser, tok, entityTextPtr, next, __LINE__, - account)) { - accountingOnAbort(parser); - result = XML_ERROR_AMPLIFICATION_LIMIT_BREACH; - goto endEntityValue; - } -#endif - + +#ifdef XML_DTD + if (! accountingDiffTolerated(parser, tok, entityTextPtr, next, __LINE__, + account)) { + accountingOnAbort(parser); + result = XML_ERROR_AMPLIFICATION_LIMIT_BREACH; + goto endEntityValue; + } +#endif + switch (tok) { case XML_TOK_PARAM_ENTITY_REF: #ifdef XML_DTD @@ -5986,16 +5986,16 @@ storeEntityValue(XML_Parser parser, const ENCODING *enc, if (parser->m_externalEntityRefHandler) { dtd->paramEntityRead = XML_FALSE; entity->open = XML_TRUE; - entityTrackingOnOpen(parser, entity, __LINE__); + entityTrackingOnOpen(parser, entity, __LINE__); if (! parser->m_externalEntityRefHandler( parser->m_externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { - entityTrackingOnClose(parser, entity, __LINE__); + entityTrackingOnClose(parser, entity, __LINE__); entity->open = XML_FALSE; result = XML_ERROR_EXTERNAL_ENTITY_HANDLING; goto endEntityValue; } - entityTrackingOnClose(parser, entity, __LINE__); + entityTrackingOnClose(parser, entity, __LINE__); entity->open = XML_FALSE; if (! dtd->paramEntityRead) dtd->keepProcessing = dtd->standalone; @@ -6003,12 +6003,12 @@ storeEntityValue(XML_Parser parser, const ENCODING *enc, dtd->keepProcessing = dtd->standalone; } else { entity->open = XML_TRUE; - entityTrackingOnOpen(parser, entity, __LINE__); + entityTrackingOnOpen(parser, entity, __LINE__); result = storeEntityValue( parser, parser->m_internalEncoding, (const char *)entity->textPtr, - (const char *)(entity->textPtr + entity->textLen), - XML_ACCOUNT_ENTITY_EXPANSION); - entityTrackingOnClose(parser, entity, __LINE__); + (const char *)(entity->textPtr + entity->textLen), + XML_ACCOUNT_ENTITY_EXPANSION); + entityTrackingOnClose(parser, entity, __LINE__); entity->open = XML_FALSE; if (result) goto endEntityValue; @@ -6548,7 +6548,7 @@ normalizePublicId(XML_Char *publicId) { static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms) { - DTD *p = ms->malloc_fcn(sizeof(DTD)); + DTD *p = ms->malloc_fcn(sizeof(DTD)); if (p == NULL) return p; poolInit(&(p->pool), ms); @@ -6721,8 +6721,8 @@ dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd, if (! newE) return 0; if (oldE->nDefaultAtts) { - newE->defaultAtts - = ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); + newE->defaultAtts + = ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); if (! newE->defaultAtts) { return 0; } @@ -6884,7 +6884,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { /* table->size is a power of 2 */ table->size = (size_t)1 << INIT_POWER; tsize = table->size * sizeof(NAMED *); - table->v = table->mem->malloc_fcn(tsize); + table->v = table->mem->malloc_fcn(tsize); if (! table->v) { table->size = 0; return NULL; @@ -6924,7 +6924,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { } size_t tsize = newSize * sizeof(NAMED *); - NAMED **newV = table->mem->malloc_fcn(tsize); + NAMED **newV = table->mem->malloc_fcn(tsize); if (! newV) return NULL; memset(newV, 0, tsize); @@ -6953,7 +6953,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { } } } - table->v[i] = table->mem->malloc_fcn(createSize); + table->v[i] = table->mem->malloc_fcn(createSize); if (! table->v[i]) return NULL; memset(table->v[i], 0, createSize); @@ -7241,7 +7241,7 @@ poolGrow(STRING_POOL *pool) { if (bytesToAllocate == 0) return XML_FALSE; - tem = pool->mem->malloc_fcn(bytesToAllocate); + tem = pool->mem->malloc_fcn(bytesToAllocate); if (! tem) return XML_FALSE; tem->size = blockSize; @@ -7430,755 +7430,755 @@ copyString(const XML_Char *s, const XML_Memory_Handling_Suite *memsuite) { memcpy(result, s, charsRequired * sizeof(XML_Char)); return result; } - -#ifdef XML_DTD - -static float -accountingGetCurrentAmplification(XML_Parser rootParser) { - const XmlBigCount countBytesOutput - = rootParser->m_accounting.countBytesDirect - + rootParser->m_accounting.countBytesIndirect; - const float amplificationFactor - = rootParser->m_accounting.countBytesDirect - ? (countBytesOutput - / (float)(rootParser->m_accounting.countBytesDirect)) - : 1.0f; - assert(! rootParser->m_parentParser); - return amplificationFactor; -} - -static void -accountingReportStats(XML_Parser originParser, const char *epilog) { - const XML_Parser rootParser = getRootParserOf(originParser, NULL); - assert(! rootParser->m_parentParser); - - if (rootParser->m_accounting.debugLevel < 1) { - return; - } - - const float amplificationFactor - = accountingGetCurrentAmplification(rootParser); - fprintf(stderr, - "expat: Accounting(%p): Direct " EXPAT_FMT_ULL( - "10") ", indirect " EXPAT_FMT_ULL("10") ", amplification %8.2f%s", - (void *)rootParser, rootParser->m_accounting.countBytesDirect, - rootParser->m_accounting.countBytesIndirect, - (double)amplificationFactor, epilog); -} - -static void -accountingOnAbort(XML_Parser originParser) { - accountingReportStats(originParser, " ABORTING\n"); -} - -static void -accountingReportDiff(XML_Parser rootParser, - unsigned int levelsAwayFromRootParser, const char *before, - const char *after, ptrdiff_t bytesMore, int source_line, - enum XML_Account account) { - assert(! rootParser->m_parentParser); - - fprintf(stderr, - " (+" EXPAT_FMT_PTRDIFF_T("6") " bytes %s|%d, xmlparse.c:%d) %*s\"", - bytesMore, (account == XML_ACCOUNT_DIRECT) ? "DIR" : "EXP", - levelsAwayFromRootParser, source_line, 10, ""); - - const char ellipis[] = "[..]"; - const size_t ellipsisLength = sizeof(ellipis) /* because compile-time */ - 1; - const unsigned int contextLength = 10; - - /* Note: Performance is of no concern here */ - const char *walker = before; - if ((rootParser->m_accounting.debugLevel >= 3) - || (after - before) - <= (ptrdiff_t)(contextLength + ellipsisLength + contextLength)) { - for (; walker < after; walker++) { - fprintf(stderr, "%s", unsignedCharToPrintable(walker[0])); - } - } else { - for (; walker < before + contextLength; walker++) { - fprintf(stderr, "%s", unsignedCharToPrintable(walker[0])); - } - fprintf(stderr, ellipis); - walker = after - contextLength; - for (; walker < after; walker++) { - fprintf(stderr, "%s", unsignedCharToPrintable(walker[0])); - } - } - fprintf(stderr, "\"\n"); -} - -static XML_Bool -accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, - const char *after, int source_line, - enum XML_Account account) { - /* Note: We need to check the token type *first* to be sure that - * we can even access variable <after>, safely. - * E.g. for XML_TOK_NONE <after> may hold an invalid pointer. */ - switch (tok) { - case XML_TOK_INVALID: - case XML_TOK_PARTIAL: - case XML_TOK_PARTIAL_CHAR: - case XML_TOK_NONE: - return XML_TRUE; - } - - if (account == XML_ACCOUNT_NONE) - return XML_TRUE; /* because these bytes have been accounted for, already */ - - unsigned int levelsAwayFromRootParser; - const XML_Parser rootParser - = getRootParserOf(originParser, &levelsAwayFromRootParser); - assert(! rootParser->m_parentParser); - - const int isDirect - = (account == XML_ACCOUNT_DIRECT) && (originParser == rootParser); - const ptrdiff_t bytesMore = after - before; - - XmlBigCount *const additionTarget - = isDirect ? &rootParser->m_accounting.countBytesDirect - : &rootParser->m_accounting.countBytesIndirect; - - /* Detect and avoid integer overflow */ - if (*additionTarget > (XmlBigCount)(-1) - (XmlBigCount)bytesMore) - return XML_FALSE; - *additionTarget += bytesMore; - - const XmlBigCount countBytesOutput - = rootParser->m_accounting.countBytesDirect - + rootParser->m_accounting.countBytesIndirect; - const float amplificationFactor - = accountingGetCurrentAmplification(rootParser); - const XML_Bool tolerated - = (countBytesOutput < rootParser->m_accounting.activationThresholdBytes) - || (amplificationFactor - <= rootParser->m_accounting.maximumAmplificationFactor); - - if (rootParser->m_accounting.debugLevel >= 2) { - accountingReportStats(rootParser, ""); - accountingReportDiff(rootParser, levelsAwayFromRootParser, before, after, - bytesMore, source_line, account); - } - - return tolerated; -} - -unsigned long long -testingAccountingGetCountBytesDirect(XML_Parser parser) { - if (! parser) - return 0; - return parser->m_accounting.countBytesDirect; -} - -unsigned long long -testingAccountingGetCountBytesIndirect(XML_Parser parser) { - if (! parser) - return 0; - return parser->m_accounting.countBytesIndirect; -} - -static void -entityTrackingReportStats(XML_Parser rootParser, ENTITY *entity, - const char *action, int sourceLine) { - assert(! rootParser->m_parentParser); - if (rootParser->m_entity_stats.debugLevel < 1) - return; - -# if defined(XML_UNICODE) - const char *const entityName = "[..]"; -# else - const char *const entityName = entity->name; -# endif - - fprintf( - stderr, - "expat: Entities(%p): Count %9d, depth %2d/%2d %*s%s%s; %s length %d (xmlparse.c:%d)\n", - (void *)rootParser, rootParser->m_entity_stats.countEverOpened, - rootParser->m_entity_stats.currentDepth, - rootParser->m_entity_stats.maximumDepthSeen, - (rootParser->m_entity_stats.currentDepth - 1) * 2, "", - entity->is_param ? "%" : "&", entityName, action, entity->textLen, - sourceLine); -} - -static void -entityTrackingOnOpen(XML_Parser originParser, ENTITY *entity, int sourceLine) { - const XML_Parser rootParser = getRootParserOf(originParser, NULL); - assert(! rootParser->m_parentParser); - - rootParser->m_entity_stats.countEverOpened++; - rootParser->m_entity_stats.currentDepth++; - if (rootParser->m_entity_stats.currentDepth - > rootParser->m_entity_stats.maximumDepthSeen) { - rootParser->m_entity_stats.maximumDepthSeen++; - } - - entityTrackingReportStats(rootParser, entity, "OPEN ", sourceLine); -} - -static void -entityTrackingOnClose(XML_Parser originParser, ENTITY *entity, int sourceLine) { - const XML_Parser rootParser = getRootParserOf(originParser, NULL); - assert(! rootParser->m_parentParser); - - entityTrackingReportStats(rootParser, entity, "CLOSE", sourceLine); - rootParser->m_entity_stats.currentDepth--; -} - -static XML_Parser -getRootParserOf(XML_Parser parser, unsigned int *outLevelDiff) { - XML_Parser rootParser = parser; - unsigned int stepsTakenUpwards = 0; - while (rootParser->m_parentParser) { - rootParser = rootParser->m_parentParser; - stepsTakenUpwards++; - } - assert(! rootParser->m_parentParser); - if (outLevelDiff != NULL) { - *outLevelDiff = stepsTakenUpwards; - } - return rootParser; -} - -const char * -unsignedCharToPrintable(unsigned char c) { - switch (c) { - case 0: - return "\\0"; - case 1: - return "\\x1"; - case 2: - return "\\x2"; - case 3: - return "\\x3"; - case 4: - return "\\x4"; - case 5: - return "\\x5"; - case 6: - return "\\x6"; - case 7: - return "\\x7"; - case 8: - return "\\x8"; - case 9: - return "\\t"; - case 10: - return "\\n"; - case 11: - return "\\xB"; - case 12: - return "\\xC"; - case 13: - return "\\r"; - case 14: - return "\\xE"; - case 15: - return "\\xF"; - case 16: - return "\\x10"; - case 17: - return "\\x11"; - case 18: - return "\\x12"; - case 19: - return "\\x13"; - case 20: - return "\\x14"; - case 21: - return "\\x15"; - case 22: - return "\\x16"; - case 23: - return "\\x17"; - case 24: - return "\\x18"; - case 25: - return "\\x19"; - case 26: - return "\\x1A"; - case 27: - return "\\x1B"; - case 28: - return "\\x1C"; - case 29: - return "\\x1D"; - case 30: - return "\\x1E"; - case 31: - return "\\x1F"; - case 32: - return " "; - case 33: - return "!"; - case 34: - return "\\\""; - case 35: - return "#"; - case 36: - return "$"; - case 37: - return "%"; - case 38: - return "&"; - case 39: - return "'"; - case 40: - return "("; - case 41: - return ")"; - case 42: - return "*"; - case 43: - return "+"; - case 44: - return ","; - case 45: - return "-"; - case 46: - return "."; - case 47: - return "/"; - case 48: - return "0"; - case 49: - return "1"; - case 50: - return "2"; - case 51: - return "3"; - case 52: - return "4"; - case 53: - return "5"; - case 54: - return "6"; - case 55: - return "7"; - case 56: - return "8"; - case 57: - return "9"; - case 58: - return ":"; - case 59: - return ";"; - case 60: - return "<"; - case 61: - return "="; - case 62: - return ">"; - case 63: - return "?"; - case 64: - return "@"; - case 65: - return "A"; - case 66: - return "B"; - case 67: - return "C"; - case 68: - return "D"; - case 69: - return "E"; - case 70: - return "F"; - case 71: - return "G"; - case 72: - return "H"; - case 73: - return "I"; - case 74: - return "J"; - case 75: - return "K"; - case 76: - return "L"; - case 77: - return "M"; - case 78: - return "N"; - case 79: - return "O"; - case 80: - return "P"; - case 81: - return "Q"; - case 82: - return "R"; - case 83: - return "S"; - case 84: - return "T"; - case 85: - return "U"; - case 86: - return "V"; - case 87: - return "W"; - case 88: - return "X"; - case 89: - return "Y"; - case 90: - return "Z"; - case 91: - return "["; - case 92: - return "\\\\"; - case 93: - return "]"; - case 94: - return "^"; - case 95: - return "_"; - case 96: - return "`"; - case 97: - return "a"; - case 98: - return "b"; - case 99: - return "c"; - case 100: - return "d"; - case 101: - return "e"; - case 102: - return "f"; - case 103: - return "g"; - case 104: - return "h"; - case 105: - return "i"; - case 106: - return "j"; - case 107: - return "k"; - case 108: - return "l"; - case 109: - return "m"; - case 110: - return "n"; - case 111: - return "o"; - case 112: - return "p"; - case 113: - return "q"; - case 114: - return "r"; - case 115: - return "s"; - case 116: - return "t"; - case 117: - return "u"; - case 118: - return "v"; - case 119: - return "w"; - case 120: - return "x"; - case 121: - return "y"; - case 122: - return "z"; - case 123: - return "{"; - case 124: - return "|"; - case 125: - return "}"; - case 126: - return "~"; - case 127: - return "\\x7F"; - case 128: - return "\\x80"; - case 129: - return "\\x81"; - case 130: - return "\\x82"; - case 131: - return "\\x83"; - case 132: - return "\\x84"; - case 133: - return "\\x85"; - case 134: - return "\\x86"; - case 135: - return "\\x87"; - case 136: - return "\\x88"; - case 137: - return "\\x89"; - case 138: - return "\\x8A"; - case 139: - return "\\x8B"; - case 140: - return "\\x8C"; - case 141: - return "\\x8D"; - case 142: - return "\\x8E"; - case 143: - return "\\x8F"; - case 144: - return "\\x90"; - case 145: - return "\\x91"; - case 146: - return "\\x92"; - case 147: - return "\\x93"; - case 148: - return "\\x94"; - case 149: - return "\\x95"; - case 150: - return "\\x96"; - case 151: - return "\\x97"; - case 152: - return "\\x98"; - case 153: - return "\\x99"; - case 154: - return "\\x9A"; - case 155: - return "\\x9B"; - case 156: - return "\\x9C"; - case 157: - return "\\x9D"; - case 158: - return "\\x9E"; - case 159: - return "\\x9F"; - case 160: - return "\\xA0"; - case 161: - return "\\xA1"; - case 162: - return "\\xA2"; - case 163: - return "\\xA3"; - case 164: - return "\\xA4"; - case 165: - return "\\xA5"; - case 166: - return "\\xA6"; - case 167: - return "\\xA7"; - case 168: - return "\\xA8"; - case 169: - return "\\xA9"; - case 170: - return "\\xAA"; - case 171: - return "\\xAB"; - case 172: - return "\\xAC"; - case 173: - return "\\xAD"; - case 174: - return "\\xAE"; - case 175: - return "\\xAF"; - case 176: - return "\\xB0"; - case 177: - return "\\xB1"; - case 178: - return "\\xB2"; - case 179: - return "\\xB3"; - case 180: - return "\\xB4"; - case 181: - return "\\xB5"; - case 182: - return "\\xB6"; - case 183: - return "\\xB7"; - case 184: - return "\\xB8"; - case 185: - return "\\xB9"; - case 186: - return "\\xBA"; - case 187: - return "\\xBB"; - case 188: - return "\\xBC"; - case 189: - return "\\xBD"; - case 190: - return "\\xBE"; - case 191: - return "\\xBF"; - case 192: - return "\\xC0"; - case 193: - return "\\xC1"; - case 194: - return "\\xC2"; - case 195: - return "\\xC3"; - case 196: - return "\\xC4"; - case 197: - return "\\xC5"; - case 198: - return "\\xC6"; - case 199: - return "\\xC7"; - case 200: - return "\\xC8"; - case 201: - return "\\xC9"; - case 202: - return "\\xCA"; - case 203: - return "\\xCB"; - case 204: - return "\\xCC"; - case 205: - return "\\xCD"; - case 206: - return "\\xCE"; - case 207: - return "\\xCF"; - case 208: - return "\\xD0"; - case 209: - return "\\xD1"; - case 210: - return "\\xD2"; - case 211: - return "\\xD3"; - case 212: - return "\\xD4"; - case 213: - return "\\xD5"; - case 214: - return "\\xD6"; - case 215: - return "\\xD7"; - case 216: - return "\\xD8"; - case 217: - return "\\xD9"; - case 218: - return "\\xDA"; - case 219: - return "\\xDB"; - case 220: - return "\\xDC"; - case 221: - return "\\xDD"; - case 222: - return "\\xDE"; - case 223: - return "\\xDF"; - case 224: - return "\\xE0"; - case 225: - return "\\xE1"; - case 226: - return "\\xE2"; - case 227: - return "\\xE3"; - case 228: - return "\\xE4"; - case 229: - return "\\xE5"; - case 230: - return "\\xE6"; - case 231: - return "\\xE7"; - case 232: - return "\\xE8"; - case 233: - return "\\xE9"; - case 234: - return "\\xEA"; - case 235: - return "\\xEB"; - case 236: - return "\\xEC"; - case 237: - return "\\xED"; - case 238: - return "\\xEE"; - case 239: - return "\\xEF"; - case 240: - return "\\xF0"; - case 241: - return "\\xF1"; - case 242: - return "\\xF2"; - case 243: - return "\\xF3"; - case 244: - return "\\xF4"; - case 245: - return "\\xF5"; - case 246: - return "\\xF6"; - case 247: - return "\\xF7"; - case 248: - return "\\xF8"; - case 249: - return "\\xF9"; - case 250: - return "\\xFA"; - case 251: - return "\\xFB"; - case 252: - return "\\xFC"; - case 253: - return "\\xFD"; - case 254: - return "\\xFE"; - case 255: - return "\\xFF"; - default: - assert(0); /* never gets here */ - return "dead code"; - } - assert(0); /* never gets here */ -} - -#endif /* XML_DTD */ - -static unsigned long -getDebugLevel(const char *variableName, unsigned long defaultDebugLevel) { - const char *const valueOrNull = getenv(variableName); - if (valueOrNull == NULL) { - return defaultDebugLevel; - } - const char *const value = valueOrNull; - - errno = 0; - char *afterValue = (char *)value; - unsigned long debugLevel = strtoul(value, &afterValue, 10); - if ((errno != 0) || (afterValue[0] != '\0')) { - errno = 0; - return defaultDebugLevel; - } - - return debugLevel; -} + +#ifdef XML_DTD + +static float +accountingGetCurrentAmplification(XML_Parser rootParser) { + const XmlBigCount countBytesOutput + = rootParser->m_accounting.countBytesDirect + + rootParser->m_accounting.countBytesIndirect; + const float amplificationFactor + = rootParser->m_accounting.countBytesDirect + ? (countBytesOutput + / (float)(rootParser->m_accounting.countBytesDirect)) + : 1.0f; + assert(! rootParser->m_parentParser); + return amplificationFactor; +} + +static void +accountingReportStats(XML_Parser originParser, const char *epilog) { + const XML_Parser rootParser = getRootParserOf(originParser, NULL); + assert(! rootParser->m_parentParser); + + if (rootParser->m_accounting.debugLevel < 1) { + return; + } + + const float amplificationFactor + = accountingGetCurrentAmplification(rootParser); + fprintf(stderr, + "expat: Accounting(%p): Direct " EXPAT_FMT_ULL( + "10") ", indirect " EXPAT_FMT_ULL("10") ", amplification %8.2f%s", + (void *)rootParser, rootParser->m_accounting.countBytesDirect, + rootParser->m_accounting.countBytesIndirect, + (double)amplificationFactor, epilog); +} + +static void +accountingOnAbort(XML_Parser originParser) { + accountingReportStats(originParser, " ABORTING\n"); +} + +static void +accountingReportDiff(XML_Parser rootParser, + unsigned int levelsAwayFromRootParser, const char *before, + const char *after, ptrdiff_t bytesMore, int source_line, + enum XML_Account account) { + assert(! rootParser->m_parentParser); + + fprintf(stderr, + " (+" EXPAT_FMT_PTRDIFF_T("6") " bytes %s|%d, xmlparse.c:%d) %*s\"", + bytesMore, (account == XML_ACCOUNT_DIRECT) ? "DIR" : "EXP", + levelsAwayFromRootParser, source_line, 10, ""); + + const char ellipis[] = "[..]"; + const size_t ellipsisLength = sizeof(ellipis) /* because compile-time */ - 1; + const unsigned int contextLength = 10; + + /* Note: Performance is of no concern here */ + const char *walker = before; + if ((rootParser->m_accounting.debugLevel >= 3) + || (after - before) + <= (ptrdiff_t)(contextLength + ellipsisLength + contextLength)) { + for (; walker < after; walker++) { + fprintf(stderr, "%s", unsignedCharToPrintable(walker[0])); + } + } else { + for (; walker < before + contextLength; walker++) { + fprintf(stderr, "%s", unsignedCharToPrintable(walker[0])); + } + fprintf(stderr, ellipis); + walker = after - contextLength; + for (; walker < after; walker++) { + fprintf(stderr, "%s", unsignedCharToPrintable(walker[0])); + } + } + fprintf(stderr, "\"\n"); +} + +static XML_Bool +accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, + const char *after, int source_line, + enum XML_Account account) { + /* Note: We need to check the token type *first* to be sure that + * we can even access variable <after>, safely. + * E.g. for XML_TOK_NONE <after> may hold an invalid pointer. */ + switch (tok) { + case XML_TOK_INVALID: + case XML_TOK_PARTIAL: + case XML_TOK_PARTIAL_CHAR: + case XML_TOK_NONE: + return XML_TRUE; + } + + if (account == XML_ACCOUNT_NONE) + return XML_TRUE; /* because these bytes have been accounted for, already */ + + unsigned int levelsAwayFromRootParser; + const XML_Parser rootParser + = getRootParserOf(originParser, &levelsAwayFromRootParser); + assert(! rootParser->m_parentParser); + + const int isDirect + = (account == XML_ACCOUNT_DIRECT) && (originParser == rootParser); + const ptrdiff_t bytesMore = after - before; + + XmlBigCount *const additionTarget + = isDirect ? &rootParser->m_accounting.countBytesDirect + : &rootParser->m_accounting.countBytesIndirect; + + /* Detect and avoid integer overflow */ + if (*additionTarget > (XmlBigCount)(-1) - (XmlBigCount)bytesMore) + return XML_FALSE; + *additionTarget += bytesMore; + + const XmlBigCount countBytesOutput + = rootParser->m_accounting.countBytesDirect + + rootParser->m_accounting.countBytesIndirect; + const float amplificationFactor + = accountingGetCurrentAmplification(rootParser); + const XML_Bool tolerated + = (countBytesOutput < rootParser->m_accounting.activationThresholdBytes) + || (amplificationFactor + <= rootParser->m_accounting.maximumAmplificationFactor); + + if (rootParser->m_accounting.debugLevel >= 2) { + accountingReportStats(rootParser, ""); + accountingReportDiff(rootParser, levelsAwayFromRootParser, before, after, + bytesMore, source_line, account); + } + + return tolerated; +} + +unsigned long long +testingAccountingGetCountBytesDirect(XML_Parser parser) { + if (! parser) + return 0; + return parser->m_accounting.countBytesDirect; +} + +unsigned long long +testingAccountingGetCountBytesIndirect(XML_Parser parser) { + if (! parser) + return 0; + return parser->m_accounting.countBytesIndirect; +} + +static void +entityTrackingReportStats(XML_Parser rootParser, ENTITY *entity, + const char *action, int sourceLine) { + assert(! rootParser->m_parentParser); + if (rootParser->m_entity_stats.debugLevel < 1) + return; + +# if defined(XML_UNICODE) + const char *const entityName = "[..]"; +# else + const char *const entityName = entity->name; +# endif + + fprintf( + stderr, + "expat: Entities(%p): Count %9d, depth %2d/%2d %*s%s%s; %s length %d (xmlparse.c:%d)\n", + (void *)rootParser, rootParser->m_entity_stats.countEverOpened, + rootParser->m_entity_stats.currentDepth, + rootParser->m_entity_stats.maximumDepthSeen, + (rootParser->m_entity_stats.currentDepth - 1) * 2, "", + entity->is_param ? "%" : "&", entityName, action, entity->textLen, + sourceLine); +} + +static void +entityTrackingOnOpen(XML_Parser originParser, ENTITY *entity, int sourceLine) { + const XML_Parser rootParser = getRootParserOf(originParser, NULL); + assert(! rootParser->m_parentParser); + + rootParser->m_entity_stats.countEverOpened++; + rootParser->m_entity_stats.currentDepth++; + if (rootParser->m_entity_stats.currentDepth + > rootParser->m_entity_stats.maximumDepthSeen) { + rootParser->m_entity_stats.maximumDepthSeen++; + } + + entityTrackingReportStats(rootParser, entity, "OPEN ", sourceLine); +} + +static void +entityTrackingOnClose(XML_Parser originParser, ENTITY *entity, int sourceLine) { + const XML_Parser rootParser = getRootParserOf(originParser, NULL); + assert(! rootParser->m_parentParser); + + entityTrackingReportStats(rootParser, entity, "CLOSE", sourceLine); + rootParser->m_entity_stats.currentDepth--; +} + +static XML_Parser +getRootParserOf(XML_Parser parser, unsigned int *outLevelDiff) { + XML_Parser rootParser = parser; + unsigned int stepsTakenUpwards = 0; + while (rootParser->m_parentParser) { + rootParser = rootParser->m_parentParser; + stepsTakenUpwards++; + } + assert(! rootParser->m_parentParser); + if (outLevelDiff != NULL) { + *outLevelDiff = stepsTakenUpwards; + } + return rootParser; +} + +const char * +unsignedCharToPrintable(unsigned char c) { + switch (c) { + case 0: + return "\\0"; + case 1: + return "\\x1"; + case 2: + return "\\x2"; + case 3: + return "\\x3"; + case 4: + return "\\x4"; + case 5: + return "\\x5"; + case 6: + return "\\x6"; + case 7: + return "\\x7"; + case 8: + return "\\x8"; + case 9: + return "\\t"; + case 10: + return "\\n"; + case 11: + return "\\xB"; + case 12: + return "\\xC"; + case 13: + return "\\r"; + case 14: + return "\\xE"; + case 15: + return "\\xF"; + case 16: + return "\\x10"; + case 17: + return "\\x11"; + case 18: + return "\\x12"; + case 19: + return "\\x13"; + case 20: + return "\\x14"; + case 21: + return "\\x15"; + case 22: + return "\\x16"; + case 23: + return "\\x17"; + case 24: + return "\\x18"; + case 25: + return "\\x19"; + case 26: + return "\\x1A"; + case 27: + return "\\x1B"; + case 28: + return "\\x1C"; + case 29: + return "\\x1D"; + case 30: + return "\\x1E"; + case 31: + return "\\x1F"; + case 32: + return " "; + case 33: + return "!"; + case 34: + return "\\\""; + case 35: + return "#"; + case 36: + return "$"; + case 37: + return "%"; + case 38: + return "&"; + case 39: + return "'"; + case 40: + return "("; + case 41: + return ")"; + case 42: + return "*"; + case 43: + return "+"; + case 44: + return ","; + case 45: + return "-"; + case 46: + return "."; + case 47: + return "/"; + case 48: + return "0"; + case 49: + return "1"; + case 50: + return "2"; + case 51: + return "3"; + case 52: + return "4"; + case 53: + return "5"; + case 54: + return "6"; + case 55: + return "7"; + case 56: + return "8"; + case 57: + return "9"; + case 58: + return ":"; + case 59: + return ";"; + case 60: + return "<"; + case 61: + return "="; + case 62: + return ">"; + case 63: + return "?"; + case 64: + return "@"; + case 65: + return "A"; + case 66: + return "B"; + case 67: + return "C"; + case 68: + return "D"; + case 69: + return "E"; + case 70: + return "F"; + case 71: + return "G"; + case 72: + return "H"; + case 73: + return "I"; + case 74: + return "J"; + case 75: + return "K"; + case 76: + return "L"; + case 77: + return "M"; + case 78: + return "N"; + case 79: + return "O"; + case 80: + return "P"; + case 81: + return "Q"; + case 82: + return "R"; + case 83: + return "S"; + case 84: + return "T"; + case 85: + return "U"; + case 86: + return "V"; + case 87: + return "W"; + case 88: + return "X"; + case 89: + return "Y"; + case 90: + return "Z"; + case 91: + return "["; + case 92: + return "\\\\"; + case 93: + return "]"; + case 94: + return "^"; + case 95: + return "_"; + case 96: + return "`"; + case 97: + return "a"; + case 98: + return "b"; + case 99: + return "c"; + case 100: + return "d"; + case 101: + return "e"; + case 102: + return "f"; + case 103: + return "g"; + case 104: + return "h"; + case 105: + return "i"; + case 106: + return "j"; + case 107: + return "k"; + case 108: + return "l"; + case 109: + return "m"; + case 110: + return "n"; + case 111: + return "o"; + case 112: + return "p"; + case 113: + return "q"; + case 114: + return "r"; + case 115: + return "s"; + case 116: + return "t"; + case 117: + return "u"; + case 118: + return "v"; + case 119: + return "w"; + case 120: + return "x"; + case 121: + return "y"; + case 122: + return "z"; + case 123: + return "{"; + case 124: + return "|"; + case 125: + return "}"; + case 126: + return "~"; + case 127: + return "\\x7F"; + case 128: + return "\\x80"; + case 129: + return "\\x81"; + case 130: + return "\\x82"; + case 131: + return "\\x83"; + case 132: + return "\\x84"; + case 133: + return "\\x85"; + case 134: + return "\\x86"; + case 135: + return "\\x87"; + case 136: + return "\\x88"; + case 137: + return "\\x89"; + case 138: + return "\\x8A"; + case 139: + return "\\x8B"; + case 140: + return "\\x8C"; + case 141: + return "\\x8D"; + case 142: + return "\\x8E"; + case 143: + return "\\x8F"; + case 144: + return "\\x90"; + case 145: + return "\\x91"; + case 146: + return "\\x92"; + case 147: + return "\\x93"; + case 148: + return "\\x94"; + case 149: + return "\\x95"; + case 150: + return "\\x96"; + case 151: + return "\\x97"; + case 152: + return "\\x98"; + case 153: + return "\\x99"; + case 154: + return "\\x9A"; + case 155: + return "\\x9B"; + case 156: + return "\\x9C"; + case 157: + return "\\x9D"; + case 158: + return "\\x9E"; + case 159: + return "\\x9F"; + case 160: + return "\\xA0"; + case 161: + return "\\xA1"; + case 162: + return "\\xA2"; + case 163: + return "\\xA3"; + case 164: + return "\\xA4"; + case 165: + return "\\xA5"; + case 166: + return "\\xA6"; + case 167: + return "\\xA7"; + case 168: + return "\\xA8"; + case 169: + return "\\xA9"; + case 170: + return "\\xAA"; + case 171: + return "\\xAB"; + case 172: + return "\\xAC"; + case 173: + return "\\xAD"; + case 174: + return "\\xAE"; + case 175: + return "\\xAF"; + case 176: + return "\\xB0"; + case 177: + return "\\xB1"; + case 178: + return "\\xB2"; + case 179: + return "\\xB3"; + case 180: + return "\\xB4"; + case 181: + return "\\xB5"; + case 182: + return "\\xB6"; + case 183: + return "\\xB7"; + case 184: + return "\\xB8"; + case 185: + return "\\xB9"; + case 186: + return "\\xBA"; + case 187: + return "\\xBB"; + case 188: + return "\\xBC"; + case 189: + return "\\xBD"; + case 190: + return "\\xBE"; + case 191: + return "\\xBF"; + case 192: + return "\\xC0"; + case 193: + return "\\xC1"; + case 194: + return "\\xC2"; + case 195: + return "\\xC3"; + case 196: + return "\\xC4"; + case 197: + return "\\xC5"; + case 198: + return "\\xC6"; + case 199: + return "\\xC7"; + case 200: + return "\\xC8"; + case 201: + return "\\xC9"; + case 202: + return "\\xCA"; + case 203: + return "\\xCB"; + case 204: + return "\\xCC"; + case 205: + return "\\xCD"; + case 206: + return "\\xCE"; + case 207: + return "\\xCF"; + case 208: + return "\\xD0"; + case 209: + return "\\xD1"; + case 210: + return "\\xD2"; + case 211: + return "\\xD3"; + case 212: + return "\\xD4"; + case 213: + return "\\xD5"; + case 214: + return "\\xD6"; + case 215: + return "\\xD7"; + case 216: + return "\\xD8"; + case 217: + return "\\xD9"; + case 218: + return "\\xDA"; + case 219: + return "\\xDB"; + case 220: + return "\\xDC"; + case 221: + return "\\xDD"; + case 222: + return "\\xDE"; + case 223: + return "\\xDF"; + case 224: + return "\\xE0"; + case 225: + return "\\xE1"; + case 226: + return "\\xE2"; + case 227: + return "\\xE3"; + case 228: + return "\\xE4"; + case 229: + return "\\xE5"; + case 230: + return "\\xE6"; + case 231: + return "\\xE7"; + case 232: + return "\\xE8"; + case 233: + return "\\xE9"; + case 234: + return "\\xEA"; + case 235: + return "\\xEB"; + case 236: + return "\\xEC"; + case 237: + return "\\xED"; + case 238: + return "\\xEE"; + case 239: + return "\\xEF"; + case 240: + return "\\xF0"; + case 241: + return "\\xF1"; + case 242: + return "\\xF2"; + case 243: + return "\\xF3"; + case 244: + return "\\xF4"; + case 245: + return "\\xF5"; + case 246: + return "\\xF6"; + case 247: + return "\\xF7"; + case 248: + return "\\xF8"; + case 249: + return "\\xF9"; + case 250: + return "\\xFA"; + case 251: + return "\\xFB"; + case 252: + return "\\xFC"; + case 253: + return "\\xFD"; + case 254: + return "\\xFE"; + case 255: + return "\\xFF"; + default: + assert(0); /* never gets here */ + return "dead code"; + } + assert(0); /* never gets here */ +} + +#endif /* XML_DTD */ + +static unsigned long +getDebugLevel(const char *variableName, unsigned long defaultDebugLevel) { + const char *const valueOrNull = getenv(variableName); + if (valueOrNull == NULL) { + return defaultDebugLevel; + } + const char *const value = valueOrNull; + + errno = 0; + char *afterValue = (char *)value; + unsigned long debugLevel = strtoul(value, &afterValue, 10); + if ((errno != 0) || (afterValue[0] != '\0')) { + errno = 0; + return defaultDebugLevel; + } + + return debugLevel; +} diff --git a/contrib/libs/expat/lib/xmlrole.c b/contrib/libs/expat/lib/xmlrole.c index 3acb9c1568..77746ee42d 100644 --- a/contrib/libs/expat/lib/xmlrole.c +++ b/contrib/libs/expat/lib/xmlrole.c @@ -7,15 +7,15 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining @@ -38,13 +38,13 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include <expat_config.h> - +#include <expat_config.h> + #include <stddef.h> #ifdef _WIN32 # include "winconfig.h" -#endif +#endif #include "expat_external.h" #include "internal.h" diff --git a/contrib/libs/expat/lib/xmlrole.h b/contrib/libs/expat/lib/xmlrole.h index 5ff7fbe8a4..d6e1fa150a 100644 --- a/contrib/libs/expat/lib/xmlrole.h +++ b/contrib/libs/expat/lib/xmlrole.h @@ -7,10 +7,10 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/xmltok.c b/contrib/libs/expat/lib/xmltok.c index bd570e79a6..502ca1adc3 100644 --- a/contrib/libs/expat/lib/xmltok.c +++ b/contrib/libs/expat/lib/xmltok.c @@ -7,20 +7,20 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining @@ -43,15 +43,15 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include <expat_config.h> - +#include <expat_config.h> + #include <stddef.h> #include <string.h> /* memcpy */ -#include <stdbool.h> +#include <stdbool.h> #ifdef _WIN32 # include "winconfig.h" -#endif +#endif #include "expat_external.h" #include "internal.h" @@ -272,14 +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_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) \ - (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p)) -#endif +#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) \ + (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p)) +#endif #ifdef XML_MIN_SIZE # define IS_NAME_CHAR_MINBPC(enc, p) \ diff --git a/contrib/libs/expat/lib/xmltok.h b/contrib/libs/expat/lib/xmltok.h index da84bfd9c2..6f630c2f9b 100644 --- a/contrib/libs/expat/lib/xmltok.h +++ b/contrib/libs/expat/lib/xmltok.h @@ -7,11 +7,11 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/xmltok_impl.c b/contrib/libs/expat/lib/xmltok_impl.c index 2ff647d246..0430591b42 100644 --- a/contrib/libs/expat/lib/xmltok_impl.c +++ b/contrib/libs/expat/lib/xmltok_impl.c @@ -1,4 +1,4 @@ -/* This file is included (from xmltok.c, 1-3 times depending on XML_MIN_SIZE)! +/* This file is included (from xmltok.c, 1-3 times depending on XML_MIN_SIZE)! __ __ _ ___\ \/ /_ __ __ _| |_ / _ \\ /| '_ \ / _` | __| @@ -7,15 +7,15 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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> + 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: Permission is hereby granted, free of charge, to any person obtaining @@ -40,7 +40,7 @@ #ifdef XML_TOK_IMPL_C -# ifndef IS_INVALID_CHAR // i.e. for UTF-16 and XML_MIN_SIZE not defined +# ifndef IS_INVALID_CHAR // i.e. for UTF-16 and XML_MIN_SIZE not defined # define IS_INVALID_CHAR(enc, ptr, n) (0) # endif diff --git a/contrib/libs/expat/lib/xmltok_impl.h b/contrib/libs/expat/lib/xmltok_impl.h index c7e97022f5..c518aada01 100644 --- a/contrib/libs/expat/lib/xmltok_impl.h +++ b/contrib/libs/expat/lib/xmltok_impl.h @@ -7,8 +7,8 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> - Copyright (c) 2017-2019 Sebastian Pipping <sebastian@pipping.org> + Copyright (c) 2000 Clark Cooper <coopercc@users.sourceforge.net> + Copyright (c) 2017-2019 Sebastian Pipping <sebastian@pipping.org> Licensed under the MIT license: Permission is hereby granted, free of charge, to any person obtaining diff --git a/contrib/libs/expat/lib/xmltok_ns.c b/contrib/libs/expat/lib/xmltok_ns.c index d0619391f1..fbdd3e3c7b 100644 --- a/contrib/libs/expat/lib/xmltok_ns.c +++ b/contrib/libs/expat/lib/xmltok_ns.c @@ -7,10 +7,10 @@ |_| XML parser Copyright (c) 1997-2000 Thai Open Source Software Center Ltd - 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) 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: diff --git a/contrib/libs/expat/ya.make b/contrib/libs/expat/ya.make index 3b6c6a7a10..8128621e60 100644 --- a/contrib/libs/expat/ya.make +++ b/contrib/libs/expat/ya.make @@ -7,9 +7,9 @@ OWNER( g:cpp-contrib ) -VERSION(2.4.4) +VERSION(2.4.4) -ORIGINAL_SOURCE(https://github.com/libexpat/libexpat/releases/download/R_2_4_4/expat-2.4.4.tar.xz) +ORIGINAL_SOURCE(https://github.com/libexpat/libexpat/releases/download/R_2_4_4/expat-2.4.4.tar.xz) LICENSE( CC0-1.0 AND |