https://bugs.exim.org/show_bug.cgi?id=2520

            Bug ID: 2520
           Summary: Error in pcre2_substitute with
                    PCRE2_SUBSTITUTE_MATCHED
           Product: PCRE
           Version: 10.34 (PCRE2)
          Hardware: x86
                OS: All
            Status: NEW
          Severity: bug
          Priority: medium
         Component: Code
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]

There is a bug in "pcre2_substitute" when using the newly introduced flag
PCRE2_SUBSTITUTE_MATCHED. This is very bad when used together with
PCRE2_SUBSTITUTE_OVERFLOW_LENGTH but is also a problem in other cases.

When an error occurs (say, the buffer length is too short) in line 945 of
todays github branch the following code occurs:

if (match_data_created) pcre2_match_data_free(match_data);
else match_data->rc = rc;

The problem is the second line, which destroys the match_data, which the user
supplied from the outside. 

This prevents calling the function a second time with the same match data,
which the user *always* wants, when the output buffer length was too short. But
also in all other cases it seems very suspicious to change the user supplied
match data if PCRE2_SUBSTITUTE_MATCHED is set.

I suggest to remove that assignment, if PCRE2_SUBSTITUTE_MATCHED is set.

Thanks,
Kilian.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to