https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103664

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Jonathan Wakely
<r...@gcc.gnu.org>:

https://gcc.gnu.org/g:364cb498c472790e14561f7672dc5ab4a9222287

commit r10-11462-g364cb498c472790e14561f7672dc5ab4a9222287
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Sun Dec 12 21:15:17 2021 +0000

    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.

    (cherry picked from commit ef5d671cd80a4afa4f74c3dfe2904c63f51fcfde)

Reply via email to