Commit graph

4196 commits

Author SHA1 Message Date
Dag-Erling Smørgrav
2083722b95 github-ci: Install docbook-xml.
Some tests use the xmlwf documentation as sample input.  It is written in
DocBook, and the tests appear to be failing because they try to fetch it
at run time, which is not allowed.  Work around this by installing it in
advance.
2024-05-02 23:26:24 +02:00
Dag-Erling Smørgrav
26be7c3f11 github-ci: Enable exhaustive branch analysis in cppcheck job. 2024-05-02 23:26:24 +02:00
Dag-Erling Smørgrav
d69aee5244 github-ci: Switch macOS tests over to supported releases. 2024-05-02 23:26:24 +02:00
Dag-Erling Smørgrav
85e01c4004 github-ci: Drop requirement for GNU find. 2024-05-02 23:26:24 +02:00
Dag-Erling Smørgrav
8e7c117e8f github-ci: Don't die if already exists. 2024-05-02 21:37:09 +02:00
Sebastian Pipping
9cbdb916de
Merge pull request #865 from Ferenc-/fix-define-for-linux-syscall
Fix `check_c_source_compiles` of `HAVE_SYSCALL_GETRANDOM`
2024-05-01 21:47:08 +02:00
Ferenc Géczi
73627c7456 Use feature test macro for syscall prototype
In order to cover the largest number of glibc and musl libc versions,
withouth warnings, the decision here is to use `_GNU_SOURCE`,
even if it enables a larger than necessary feature set.

A feature macro is needed, because otherwise the `check_c_source_compiles`
for `HAVE_SYSCALL_GETRANDOM` fails in cases when for example
the default compiler flags include `-std=c99`:

````
src.c:6:13: error: implicit declaration of function ‘syscall’ [-Wimplicit-function-declaration]
    6 |             syscall(SYS_getrandom, NULL, 0, 0);
      |             ^~~~~~~
````
But this check should pass, as `SYS_getrandom` is available,
only the declaration of `syscall` in `unistd.h` is conditional behind a macro.

The exact minimal public macros, for enabling this are in `features.h`, and
are version dependent.

According to [5.04](
https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/Archive/man-pages-5.04.tar.gz)
and older versions of the `man 2 syscall` page,
the recommended feature test macro is `_GNU_SOURCE`.
Later on in [5.05](
https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/Archive/man-pages-5.05.tar.gz)
this statement has changed, to provide a smaller minimal feature set.
Namely up to `glibc 2.18`  is `_BSD_SOURCE || _SVID_SOURCE`,
but after that the `_DEFAULT_SOURCE` is recommended,
and `_BSD_SOURCE || _SVID_SOURCE` is deprecated, and emits warning in later versions.
Regardless of that the `_GNU_SOURCE` is still fully supported
in every version and is suitable for our purposes.

The musl libc doesn't use `_SVID_SOURCE` at all, but `_BSD_SOURCE` always works,
plus in some newer versions `_DEFAULT_SOURCE` also sets `_BSD_SOURCE`,
but `_GNU_SOURCE` covers the largest set of versions and is unlikely
to be deprecated in the future.

Further info about feature test macros:

In glibc:
https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html

In musl libc under the `Feature Test Macros Supported by musl` section:
https://musl.libc.org/doc/1.1.24/manual.html

Signed-off-by: Ferenc Géczi <ferenc.gm@gmail.com>
2024-05-01 00:00:01 +00:00
Sebastian Pipping
c82ca17b61
Merge pull request #866 from libexpat/dependabot/github_actions/actions/checkout-4.1.4
Actions(deps): Bump actions/checkout from 4.1.3 to 4.1.4
2024-04-30 01:09:12 +02:00
Sebastian Pipping
1f1ac992bf
Merge pull request #867 from libexpat/dependabot/github_actions/actions/upload-artifact-4.3.3
Actions(deps): Bump actions/upload-artifact from 4.3.2 to 4.3.3
2024-04-29 22:40:37 +02:00
dependabot[bot]
33ed8172fb
Actions(deps): Bump actions/upload-artifact from 4.3.2 to 4.3.3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](1746f4ab65...65462800fd)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 12:06:24 +00:00
dependabot[bot]
2ddf759f59
Actions(deps): Bump actions/checkout from 4.1.3 to 4.1.4
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.3 to 4.1.4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](1d96c772d1...0ad4b8fada)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 12:06:18 +00:00
Sebastian Pipping
a2b44bd2d2
Merge pull request #864 from dag-erling/des/tests-readme
tests: Convert README to Markdown and update.
2024-04-27 23:19:35 +02:00
Dag-Erling Smørgrav
abb1c4a380 tests: Convert README to Markdown and update. 2024-04-27 15:04:57 +02:00
Sebastian Pipping
9134d0d6e0
Merge pull request #861 from dag-erling/des/mkdir-m4
Ensure that the m4 directory always exists.
2024-04-23 03:17:22 +02:00
Sebastian Pipping
46062b600d
Merge pull request #862 from dag-erling/des/squiggle
Protect us against Emacs users.
2024-04-23 03:09:57 +02:00
Sebastian Pipping
8fd3e86f28
Merge pull request #859 from libexpat/dependabot/github_actions/actions/upload-artifact-4.3.2
Actions(deps): Bump actions/upload-artifact from 4.3.1 to 4.3.2
2024-04-22 23:41:55 +02:00
Sebastian Pipping
4c64d11182
Merge pull request #860 from libexpat/dependabot/github_actions/actions/checkout-4.1.3
Actions(deps): Bump actions/checkout from 4.1.2 to 4.1.3
2024-04-22 23:40:34 +02:00
Dag-Erling Smørgrav
886f7ea7b7 Protect us against Emacs users. 2024-04-22 16:37:53 +02:00
Dag-Erling Smørgrav
1b6a4f19c6 Ensure that the m4 directory always exists. 2024-04-22 16:34:07 +02:00
dependabot[bot]
cd36384231
Actions(deps): Bump actions/checkout from 4.1.2 to 4.1.3
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.2 to 4.1.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](9bb56186c3...1d96c772d1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-22 12:20:20 +00:00
dependabot[bot]
f16b7aa1ec
Actions(deps): Bump actions/upload-artifact from 4.3.1 to 4.3.2
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](5d5d22a312...1746f4ab65)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-22 12:20:09 +00:00
Sebastian Pipping
e48ab6604f
Merge pull request #851 from libexpat/autotools-sync-cmake-files
autotools: Sync CMake templates with CMake 3.27
2024-04-07 22:30:04 +02:00
Sebastian Pipping
ef50fb208b
Merge pull request #855 from libexpat/issue-854-cmake-fix-use-of-check-symbol-exists
cmake: Fix check for symbols `size_t` and `off_t` (fixes #854)
2024-04-04 18:31:28 +02:00
Sebastian Pipping
059a4aa71d
Merge pull request #856 from libexpat/fix-main
Fix `main()` to `main(void)`
2024-04-04 01:09:38 +02:00
Sebastian Pipping
26f7cbbf4a cmake: Fix check for symbols size_t and off_t
The two issues with the previous approach were that:

1. `check_symbol_exists` would store "1" or "" into
   variable `off_t` rather than string "off_t", and

2. (`check_symbol_exists` would not find `off_t` or
   `size_t` on modern Linux).

Was reported with NetBSD 9.3.

`size_t` is part of C99 (which Expat requires), so
only the `off_t` half remains.
2024-04-04 00:01:22 +02:00
Sebastian Pipping
5434a74081
Merge pull request #853 from bluhm/find-path
Always provide path to find(1) for portability
2024-04-03 23:51:03 +02:00
Sebastian Pipping
13e84bb374 Fix main() to main(void) 2024-04-03 02:21:37 +02:00
Alexander Bluhm
2b8492d622
Always provide path to find.
Running find without path is a GNU extension.  GNU find uses current
directory as starting-point in this case.  Better always use an
explicit . in build scripts to support find on other systems.
2024-04-01 23:15:15 +02:00
Sebastian Pipping
d420c32d67 autotools: Sync CMake templates with CMake 3.27 2024-03-29 22:17:56 +01:00
Sebastian Pipping
d450c1b439
Merge pull request #741 from libexpat/drop-support-msvc-2017
[>=2024-04-02] Drop support for Visual Studio 15 2017
2024-03-23 19:37:22 +01:00
Sebastian Pipping
2874a26eeb win32/build_expat_iss.bat: Add missing "-A Win32" for Visual Studio 16 2019 2024-03-23 17:53:46 +01:00
Sebastian Pipping
f8fb85ec8c Drop support for Visual Studio 15 2017 2024-03-23 17:22:05 +01:00
Sebastian Pipping
d04f8ef887
Merge pull request #850 from libexpat/dependabot/github_actions/actions/checkout-4.1.2
Actions(deps): Bump actions/checkout from 4.1.1 to 4.1.2
2024-03-19 22:50:07 +01:00
dependabot[bot]
571a62c8f5
Actions(deps): Bump actions/checkout from 4.1.1 to 4.1.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](b4ffde65f4...9bb56186c3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 12:03:05 +00:00
Sebastian Pipping
a59c3edffa
Merge pull request #849 from libexpat/allow-triggering-github-actions-workflows-manually
Allow triggering GitHub Actions workflows manually
2024-03-17 23:00:53 +01:00
Sebastian Pipping
91116dfa7e Allow triggering GitHub Actions workflows manually
Some already had "workflow_dispatch" enabled.
2024-03-17 15:30:47 +01:00
Sebastian Pipping
fa75b96546
Merge pull request #843 from libexpat/issue-838-prepare-release
Prepare release 2.6.2 (part of #838, ETA 2024-03-13)
2024-03-13 17:37:37 +01:00
Sebastian Pipping
8548bc03fd Changes: Add call for help 2024-03-13 14:37:05 +01:00
Sebastian Pipping
86d6052c5e Set release date for 2.6.2 2024-03-13 14:37:05 +01:00
Sebastian Pipping
13cff445fa Bump version to 2.6.2 2024-03-13 14:37:05 +01:00
Sebastian Pipping
557f1255f9 Bump version info from 10:1:9 to 10:2:9
See https://verbump.de/ for what these numbers do
2024-03-13 14:37:05 +01:00
Sebastian Pipping
98ee1baef8 Changes: Document changes in release Expat 2.6.2 2024-03-13 14:37:05 +01:00
Sebastian Pipping
5bf8ed66ef
Merge pull request #847 from TomasKorbar/doc-makefile
[2.6.1] Fix DOCBOOK_TO_MAN variable use in doc Makefile
2024-03-13 14:22:48 +01:00
Tomas Korbar
c32ed08191 Fix DOCBOOK_TO_MAN variable use in doc Makefile
Not using quotes causes problems when DOCBOOK_TO_MAN contains
command and argument
2024-03-13 11:01:52 +01:00
Sebastian Pipping
5026213864
Merge pull request #842 from libexpat/issue-839-billion-laughs-isolated-external-parser
Prevent billion laughs attacks in isolated external parser (part of #839)
2024-03-07 22:14:09 +01:00
Sebastian Pipping
27525adabd
Merge pull request #841 from libexpat/issue-839-reject-direct-parameter-entity-recursion
Reject direct parameter entity recursion (part of #839)
2024-03-07 20:24:13 +01:00
Sebastian Pipping
072eca0b72 tests: Cover amplification tracking for isolated external parser 2024-03-06 23:41:33 +01:00
Sebastian Pipping
1d50b80cf3 lib/xmlparse.c: Detect billion laughs attack with isolated external parser
When parsing DTD content with code like ..

  XML_Parser parser = XML_ParserCreate(NULL);
  XML_Parser ext_parser = XML_ExternalEntityParserCreate(parser, NULL, NULL);
  enum XML_Status status = XML_Parse(ext_parser, doc, (int)strlen(doc), XML_TRUE);

.. there are 0 bytes accounted as direct input and all input from `doc` accounted
as indirect input.  Now function accountingGetCurrentAmplification cannot calculate
the current amplification ratio as "(direct + indirect) / direct", and it did refuse
to divide by 0 as one would expect, but it returned 1.0 for this case to indicate
no amplification over direct input.  As a result, billion laughs attacks from
DTD-only input were not detected with this isolated way of using an external parser.

The new approach is to assume direct input of length not 0 but 22 -- derived from
ghost input "<!ENTITY a SYSTEM 'b'>", the shortest possible way to include an external
DTD --, and do the usual "(direct + indirect) / direct" math with "direct := 22".

GitHub issue #839 has more details on this issue and its origin in ClusterFuzz
finding 66812.
2024-03-06 23:41:07 +01:00
Sebastian Pipping
565ab44a42 tests: Cover rejection of direct parameter entity recursion 2024-03-06 22:34:26 +01:00
Sebastian Pipping
a4c86a395e lib/xmlparse.c: Reject directly recursive parameter entities 2024-03-06 22:34:26 +01:00