You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
2.1 KiB
54 lines
2.1 KiB
From cc56be313c7d4e7c266c01dabc762a153d5b2c28 Mon Sep 17 00:00:00 2001
|
|
From: Karl Williamson <khw@cpan.org>
|
|
Date: Sat, 25 Mar 2017 15:00:22 -0600
|
|
Subject: [PATCH] regcomp.c: Convert some strchr to memchr
|
|
|
|
This allows things to work properly in the face of embedded NULs.
|
|
See the branch merge message for more information.
|
|
|
|
(cherry picked from commit 43b2f4ef399e2fd7240b4eeb0658686ad95f8e62)
|
|
---
|
|
regcomp.c | 11 +++++++----
|
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/regcomp.c b/regcomp.c
|
|
index d0d08352c0..2bee9d4460 100644
|
|
--- a/regcomp.c
|
|
+++ b/regcomp.c
|
|
@@ -11793,7 +11793,8 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
|
|
|
|
RExC_parse++; /* Skip past the '{' */
|
|
|
|
- if (! (endbrace = strchr(RExC_parse, '}')) /* no trailing brace */
|
|
+ endbrace = (char *) memchr(RExC_parse, '}', RExC_end - RExC_parse);
|
|
+ if (! endbrace /* no trailing brace */
|
|
|| ! (endbrace == RExC_parse /* nothing between the {} */
|
|
|| (endbrace - RExC_parse >= 2 /* U+ (bad hex is checked... */
|
|
&& strnEQ(RExC_parse, "U+", 2)))) /* ... below for a better
|
|
@@ -12493,9 +12494,11 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
|
|
else {
|
|
STRLEN length;
|
|
char name = *RExC_parse;
|
|
- char * endbrace;
|
|
+ char * endbrace = NULL;
|
|
RExC_parse += 2;
|
|
- endbrace = strchr(RExC_parse, '}');
|
|
+ if (RExC_parse < RExC_end) {
|
|
+ endbrace = (char *) memchr(RExC_parse, '}', RExC_end - RExC_parse);
|
|
+ }
|
|
|
|
if (! endbrace) {
|
|
vFAIL2("Missing right brace on \\%c{}", name);
|
|
@@ -15963,7 +15966,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
|
|
vFAIL2("Empty \\%c", (U8)value);
|
|
if (*RExC_parse == '{') {
|
|
const U8 c = (U8)value;
|
|
- e = strchr(RExC_parse, '}');
|
|
+ e = (char *) memchr(RExC_parse, '}', RExC_end - RExC_parse);
|
|
if (!e) {
|
|
RExC_parse++;
|
|
vFAIL2("Missing right brace on \\%c{}", c);
|
|
--
|
|
2.11.0
|
|
|