summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2022-03-22 15:27:55 (GMT)
committerGitHub <noreply@github.com>2022-03-22 15:27:55 (GMT)
commit492d4109f4d953c478cb48f17aa32adbb912623b (patch)
treec912b908f3e247d161901c0794bb28753759b796 /Modules
parent32e77154ddfc514a3144d5912bffdd957246fd6c (diff)
downloadcpython-492d4109f4d953c478cb48f17aa32adbb912623b.zip
cpython-492d4109f4d953c478cb48f17aa32adbb912623b.tar.gz
cpython-492d4109f4d953c478cb48f17aa32adbb912623b.tar.bz2
bpo-42885: Optimize search for regular expressions starting with "\A" or "^" (GH-32021)
Affected functions are re.search(), re.split(), re.findall(), re.finditer() and re.sub().
Diffstat (limited to 'Modules')
-rw-r--r--Modules/sre_lib.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h
index 956fd3f..a82210f 100644
--- a/Modules/sre_lib.h
+++ b/Modules/sre_lib.h
@@ -1693,6 +1693,13 @@ SRE(search)(SRE_STATE* state, SRE_CODE* pattern)
state->start = state->ptr = ptr;
status = SRE(match)(state, pattern, 1);
state->must_advance = 0;
+ if (status == 0 && pattern[0] == SRE_OP_AT &&
+ (pattern[1] == SRE_AT_BEGINNING ||
+ pattern[1] == SRE_AT_BEGINNING_STRING))
+ {
+ state->start = state->ptr = ptr = end;
+ return 0;
+ }
while (status == 0 && ptr < end) {
ptr++;
RESET_CAPTURE_GROUP();