diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-12-12 21:15:17 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-12-13 11:11:30 +0000 |
commit | ef5d671cd80a4afa4f74c3dfe2904c63f51fcfde (patch) | |
tree | 350c53ee4f98c558ed8a750ed75985b897e69c70 /gcc | |
parent | 3788c4ed2c774e36b2721ee2af454591a42afdeb (diff) | |
download | gcc-ef5d671cd80a4afa4f74c3dfe2904c63f51fcfde.zip gcc-ef5d671cd80a4afa4f74c3dfe2904c63f51fcfde.tar.gz gcc-ef5d671cd80a4afa4f74c3dfe2904c63f51fcfde.tar.bz2 |
libstdc++: Fix std::regex_replace for strings with embedded null [PR103664]
The overload of std::regex_replace that takes a std::basic_string as the
fmt argument (for the replacement string) is implemented in terms of the
one taking a const C*, which uses std::char_traits to find the length.
That means it stops at a null character, even though the basic_string
might have additional characters beyond that.
Rather than duplicate the implementation of the const C* one for the
std::basic_string case, this moves that implementation to a new
__regex_replace function which takes a const C* and a length. Then both
the std::basic_string and const C* overloads can call that (with the
latter using char_traits to find the length to pass to the new
function).
libstdc++-v3/ChangeLog:
PR libstdc++/103664
* include/bits/regex.h (__regex_replace): Declare.
(regex_replace): Use it.
* include/bits/regex.tcc (__regex_replace): Replace regex_replace
definition with __regex_replace.
* testsuite/28_regex/algorithms/regex_replace/char/103664.cc: New test.
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions