Skip to content

Commit

Permalink
regex: remove error when accessing an unset group (JuliaLang#40391)
Browse files Browse the repository at this point in the history
  • Loading branch information
tlienart authored and antoine-levitt committed May 9, 2021
1 parent c5aa495 commit a0a887b
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 1 deletion.
5 changes: 4 additions & 1 deletion base/pcre.jl
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,10 @@ function substring_length_bynumber(match_data, number)
s = RefValue{Csize_t}()
rc = ccall((:pcre2_substring_length_bynumber_8, PCRE_LIB), Cint,
(Ptr{Cvoid}, Cint, Ref{Csize_t}), match_data, number, s)
rc < 0 && error("PCRE error: $(err_message(rc))")
if rc < 0
rc == ERROR_UNSET && return 0
error("PCRE error: $(err_message(rc))")
end
return Int(s[])
end

Expand Down
2 changes: 2 additions & 0 deletions base/regex.jl
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,8 @@ replace_err(repl) = error("Bad replacement string: $repl")

function _write_capture(io, re::RegexAndMatchData, group)
len = PCRE.substring_length_bynumber(re.match_data, group)
# in the case of an optional group that doesn't match, len == 0
len == 0 && return
ensureroom(io, len+1)
PCRE.substring_copy_bynumber(re.match_data, group,
pointer(io.data, io.ptr), len+1)
Expand Down
5 changes: 5 additions & 0 deletions test/strings/util.jl
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,11 @@ end
# Issue 13332
@test replace("abc", 'b' => 2.1) == "a2.1c"

# Issue 31456
@test replace("The fox.", r"fox(es)?" => s"bus\1") == "The bus."
@test replace("The foxes.", r"fox(es)?" => s"bus\1") == "The buses."
@test replace("The quick fox quickly.", r"(quick)?\sfox(es)?\s(run)?" => s"\1 bus\2 \3") == "The quick bus quickly."

# test replace with a count for String and GenericString
# check that replace is a no-op if count==0
for s in ["aaa", Test.GenericString("aaa")]
Expand Down

0 comments on commit a0a887b

Please sign in to comment.