summaryrefslogtreecommitdiff
path: root/regparse.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-01-21 16:09:09 (GMT)
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-01-21 16:09:09 (GMT)
commit782fd488d7abc7ccb0c8072349182ea8beb902f0 (patch)
treece4bc612b7189cce8d7a2b3bab8b0d8b27b638b1 /regparse.c
parent826f2ee3067176c65d079039e8dd7c57c74ba66b (diff)
* regparse.c (fetch_name_with_level): allow non word characters
at the first character. [Feature #11949] * regparse.c (fetch_name): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'regparse.c')
-rw-r--r--regparse.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/regparse.c b/regparse.c
index 094332f..d3907de 100644
--- a/regparse.c
+++ b/regparse.c
@@ -2617,6 +2617,7 @@ get_name_end_code_point(OnigCodePoint start)
}
#ifdef USE_NAMED_GROUP
+#define ONIGENC_IS_CODE_NAME(enc, c) TRUE
#ifdef USE_BACKREF_WITH_LEVEL
/*
\k<name+n>, \k<name-n>
@@ -2662,7 +2663,7 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
sign = -1;
pnum_head = p;
}
- else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+ else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
}
}
@@ -2684,7 +2685,7 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
is_num = 0;
}
}
- else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+ else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
}
}
@@ -2785,7 +2786,7 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
is_num = 0;
}
}
- else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+ else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
}
}
@@ -2795,8 +2796,11 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
name_end = p;
PFETCH_S(c);
if (c == end_code || c == ')') {
- if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;
- break;
+ if (is_num == 2) {
+ r = ONIGERR_INVALID_GROUP_NAME;
+ goto teardown;
+ }
+ break;
}
if (is_num != 0) {
@@ -2808,12 +2812,13 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
else
r = ONIGERR_INVALID_GROUP_NAME;
- is_num = 0;
+ goto teardown;
}
}
else {
- if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+ if (!ONIGENC_IS_CODE_NAME(enc, c)) {
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
+ goto teardown;
}
}
}
@@ -2821,6 +2826,7 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
if (c != end_code) {
r = ONIGERR_INVALID_GROUP_NAME;
name_end = end;
+ goto err;
}
if (is_num != 0) {
@@ -2839,6 +2845,7 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
return 0;
}
else {
+ teardown:
while (!PEND) {
name_end = p;
PFETCH_S(c);