diff options
author | sugar <sugar@sylveon.social> | 2024-08-20 00:21:59 +0200 |
---|---|---|
committer | sugar <sugar@sylveon.social> | 2024-08-22 03:17:55 +0200 |
commit | 447212fa65a80180150b265411924cc638a2c52c (patch) | |
tree | 75a6a2a1ab40580d3ae176a2a812f09fc54d6779 /src/libutil/xml-writer.cc | |
parent | e727dbc3a3d59d7742a24a2b394b63a04ecb4d24 (diff) |
libexpr: Replace regex engine with boost::regex
This avoids C++'s standard library regexes, which aren't the same
across platforms, and have many other issues, like using stack
so much that they stack overflow when processing a lot of data.
To avoid backwards and forward compatibility issues, regexes are
processed using a function converting libstdc++ regexes into Boost
regexes, escaping characters that Boost needs to have escaped, and
rejecting features that Boost has and libstdc++ doesn't.
Related context:
- Original failed attempt to use `boost::regex` in CppNix, failed due to
boost icu dependency being large (disabling ICU is no longer necessary
because linking ICU requires using a different header file,
`boost/regex/icu.hpp`): https://github.com/NixOS/nix/pull/3826
- An attempt to use PCRE, rejected due to providing less backwards
compatibility with `std::regex` than `boost::regex`:
https://github.com/NixOS/nix/pull/7336
- Second attempt to use `boost::regex`, failed due to `}` regex failing
to compile (dealt with by writing a wrapper that parses a regular
expression and escapes `}` characters):
https://github.com/NixOS/nix/pull/7762
Closes #34. Closes #476.
Change-Id: Ieb0eb9e270a93e4c7eed412ba4f9f96cb00a5fa4
Diffstat (limited to 'src/libutil/xml-writer.cc')
0 files changed, 0 insertions, 0 deletions