From 115ecefb2735de843e974ac8045a584ebbd02772 Mon Sep 17 00:00:00 2001 From: "K.Kosako" Date: Mon, 15 Aug 2016 16:34:42 +0900 Subject: [PATCH] number of captures <= 32767 for bytecode representation --- src/oniguruma.h | 2 ++ src/regerror.c | 2 ++ src/regparse.c | 3 +++ 3 files changed, 7 insertions(+) diff --git a/src/oniguruma.h b/src/oniguruma.h index 6e62b50..47605c4 100644 --- a/src/oniguruma.h +++ b/src/oniguruma.h @@ -367,6 +367,7 @@ int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p)); /* config parameters */ #define ONIG_NREGION 10 +#define ONIG_MAX_CAPTURE_NUM 32767 #define ONIG_MAX_BACKREF_NUM 1000 #define ONIG_MAX_REPEAT_NUM 100000 #define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000 @@ -575,6 +576,7 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax; #define ONIGERR_TOO_BIG_BACKREF_NUMBER -207 #define ONIGERR_INVALID_BACKREF -208 #define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209 +#define ONIGERR_TOO_MANY_CAPTURES -210 #define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212 #define ONIGERR_EMPTY_GROUP_NAME -214 #define ONIGERR_INVALID_GROUP_NAME -215 diff --git a/src/regerror.c b/src/regerror.c index 16009bb..05fc9d8 100644 --- a/src/regerror.c +++ b/src/regerror.c @@ -140,6 +140,8 @@ onig_error_code_to_format(int code) #endif case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED: p = "numbered backref/call is not allowed. (use name)"; break; + case ONIGERR_TOO_MANY_CAPTURES: + p = "too many captures"; break; case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE: p = "too big wide-char value"; break; case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE: diff --git a/src/regparse.c b/src/regparse.c index 3fd8d5c..a32ab9e 100644 --- a/src/regparse.c +++ b/src/regparse.c @@ -965,6 +965,9 @@ scan_env_add_mem_entry(ScanEnv* env) Node** p; need = env->num_mem + 1; + if (need > ONIG_MAX_CAPTURE_NUM) + return ONIGERR_TOO_MANY_CAPTURES; + if (need >= SCANENV_MEMNODES_SIZE) { if (env->mem_alloc <= need) { if (IS_NULL(env->mem_nodes_dynamic)) { -- 2.50.1