Skip to content

Commit 9583c51

Browse files
author
Istvan Miklos
committed
Add RegExp recursion depth limit
The regexp engine does not have any recursion depth check, thus it can cause problems with various regexps. Added a new build option `--regexp-recursion-limit N` whose default value is 0, which is for unlimited recursion depth. Also added a build-option-test. Fixes #2448 JerryScript-DCO-1.0-Signed-off-by: Istvan Miklos [email protected]
1 parent c6a2fd5 commit 9583c51

File tree

8 files changed

+132
-40
lines changed

8 files changed

+132
-40
lines changed

jerry-core/CMakeLists.txt

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,26 @@ project (${JERRY_CORE_NAME} C)
2020
set(ENABLE_ALL_IN_ONE OFF CACHE BOOL "Enable all-in-one build?")
2121

2222
# Optional features
23-
set(FEATURE_CPOINTER_32_BIT OFF CACHE BOOL "Enable 32 bit compressed pointers?")
24-
set(FEATURE_DEBUGGER OFF CACHE BOOL "Enable JerryScript debugger?")
25-
set(FEATURE_ERROR_MESSAGES OFF CACHE BOOL "Enable error messages?")
26-
set(FEATURE_EXTERNAL_CONTEXT OFF CACHE BOOL "Enable external context?")
27-
set(FEATURE_JS_PARSER ON CACHE BOOL "Enable js-parser?")
28-
set(FEATURE_LINE_INFO OFF CACHE BOOL "Enable line info?")
29-
set(FEATURE_LOGGING OFF CACHE BOOL "Enable logging?")
30-
set(FEATURE_MEM_STATS OFF CACHE BOOL "Enable memory statistics?")
31-
set(FEATURE_MEM_STRESS_TEST OFF CACHE BOOL "Enable mem-stress test?")
32-
set(FEATURE_PARSER_DUMP OFF CACHE BOOL "Enable parser byte-code dumps?")
33-
set(FEATURE_PROFILE "es5.1" CACHE STRING "Use default or other profile?")
34-
set(FEATURE_REGEXP_STRICT_MODE OFF CACHE BOOL "Enable regexp strict mode?")
35-
set(FEATURE_REGEXP_DUMP OFF CACHE BOOL "Enable regexp byte-code dumps?")
36-
set(FEATURE_SNAPSHOT_EXEC OFF CACHE BOOL "Enable executing snapshot files?")
37-
set(FEATURE_SNAPSHOT_SAVE OFF CACHE BOOL "Enable saving snapshot files?")
38-
set(FEATURE_SYSTEM_ALLOCATOR OFF CACHE BOOL "Enable system allocator?")
39-
set(FEATURE_VALGRIND OFF CACHE BOOL "Enable Valgrind support?")
40-
set(FEATURE_VM_EXEC_STOP OFF CACHE BOOL "Enable VM execution stopping?")
41-
set(MEM_HEAP_SIZE_KB "512" CACHE STRING "Size of memory heap, in kilobytes")
23+
set(FEATURE_CPOINTER_32_BIT OFF CACHE BOOL "Enable 32 bit compressed pointers?")
24+
set(FEATURE_DEBUGGER OFF CACHE BOOL "Enable JerryScript debugger?")
25+
set(FEATURE_ERROR_MESSAGES OFF CACHE BOOL "Enable error messages?")
26+
set(FEATURE_EXTERNAL_CONTEXT OFF CACHE BOOL "Enable external context?")
27+
set(FEATURE_JS_PARSER ON CACHE BOOL "Enable js-parser?")
28+
set(FEATURE_LINE_INFO OFF CACHE BOOL "Enable line info?")
29+
set(FEATURE_LOGGING OFF CACHE BOOL "Enable logging?")
30+
set(FEATURE_MEM_STATS OFF CACHE BOOL "Enable memory statistics?")
31+
set(FEATURE_MEM_STRESS_TEST OFF CACHE BOOL "Enable mem-stress test?")
32+
set(FEATURE_PARSER_DUMP OFF CACHE BOOL "Enable parser byte-code dumps?")
33+
set(FEATURE_PROFILE "es5.1" CACHE STRING "Use default or other profile?")
34+
set(FEATURE_REGEXP_STRICT_MODE OFF CACHE BOOL "Enable regexp strict mode?")
35+
set(FEATURE_REGEXP_DUMP OFF CACHE BOOL "Enable regexp byte-code dumps?")
36+
set(FEATURE_REGEXP_RECURSION_LIMIT "0" CACHE STRING "Limit of regexp recursion depth")
37+
set(FEATURE_SNAPSHOT_EXEC OFF CACHE BOOL "Enable executing snapshot files?")
38+
set(FEATURE_SNAPSHOT_SAVE OFF CACHE BOOL "Enable saving snapshot files?")
39+
set(FEATURE_SYSTEM_ALLOCATOR OFF CACHE BOOL "Enable system allocator?")
40+
set(FEATURE_VALGRIND OFF CACHE BOOL "Enable Valgrind support?")
41+
set(FEATURE_VM_EXEC_STOP OFF CACHE BOOL "Enable VM execution stopping?")
42+
set(MEM_HEAP_SIZE_KB "512" CACHE STRING "Size of memory heap, in kilobytes")
4243

4344
# Option overrides
4445
if(USING_MSVC)
@@ -74,26 +75,27 @@ if(FEATURE_MEM_STATS OR FEATURE_PARSER_DUMP OR FEATURE_REGEXP_DUMP)
7475
endif()
7576

7677
# Status messages
77-
message(STATUS "ENABLE_ALL_IN_ONE " ${ENABLE_ALL_IN_ONE} ${ENABLE_ALL_IN_ONE_MESSAGE})
78-
message(STATUS "FEATURE_CPOINTER_32_BIT " ${FEATURE_CPOINTER_32_BIT} ${FEATURE_CPOINTER_32_BIT_MESSAGE})
79-
message(STATUS "FEATURE_DEBUGGER " ${FEATURE_DEBUGGER})
80-
message(STATUS "FEATURE_ERROR_MESSAGES " ${FEATURE_ERROR_MESSAGES})
81-
message(STATUS "FEATURE_EXTERNAL_CONTEXT " ${FEATURE_EXTERNAL_CONTEXT})
82-
message(STATUS "FEATURE_JS_PARSER " ${FEATURE_JS_PARSER})
83-
message(STATUS "FEATURE_LINE_INFO " ${FEATURE_LINE_INFO})
84-
message(STATUS "FEATURE_LOGGING " ${FEATURE_LOGGING} ${FEATURE_LOGGING_MESSAGE})
85-
message(STATUS "FEATURE_MEM_STATS " ${FEATURE_MEM_STATS})
86-
message(STATUS "FEATURE_MEM_STRESS_TEST " ${FEATURE_MEM_STRESS_TEST})
87-
message(STATUS "FEATURE_PARSER_DUMP " ${FEATURE_PARSER_DUMP} ${FEATURE_PARSER_DUMP_MESSAGE})
88-
message(STATUS "FEATURE_PROFILE " ${FEATURE_PROFILE})
89-
message(STATUS "FEATURE_REGEXP_STRICT_MODE " ${FEATURE_REGEXP_STRICT_MODE})
90-
message(STATUS "FEATURE_REGEXP_DUMP " ${FEATURE_REGEXP_DUMP})
91-
message(STATUS "FEATURE_SNAPSHOT_EXEC " ${FEATURE_SNAPSHOT_EXEC} ${FEATURE_SNAPSHOT_EXEC_MESSAGE})
92-
message(STATUS "FEATURE_SNAPSHOT_SAVE " ${FEATURE_SNAPSHOT_SAVE} ${FEATURE_SNAPSHOT_SAVE_MESSAGE})
93-
message(STATUS "FEATURE_SYSTEM_ALLOCATOR " ${FEATURE_SYSTEM_ALLOCATOR})
94-
message(STATUS "FEATURE_VALGRIND " ${FEATURE_VALGRIND})
95-
message(STATUS "FEATURE_VM_EXEC_STOP " ${FEATURE_VM_EXEC_STOP})
96-
message(STATUS "MEM_HEAP_SIZE_KB " ${MEM_HEAP_SIZE_KB})
78+
message(STATUS "ENABLE_ALL_IN_ONE " ${ENABLE_ALL_IN_ONE} ${ENABLE_ALL_IN_ONE_MESSAGE})
79+
message(STATUS "FEATURE_CPOINTER_32_BIT " ${FEATURE_CPOINTER_32_BIT} ${FEATURE_CPOINTER_32_BIT_MESSAGE})
80+
message(STATUS "FEATURE_DEBUGGER " ${FEATURE_DEBUGGER})
81+
message(STATUS "FEATURE_ERROR_MESSAGES " ${FEATURE_ERROR_MESSAGES})
82+
message(STATUS "FEATURE_EXTERNAL_CONTEXT " ${FEATURE_EXTERNAL_CONTEXT})
83+
message(STATUS "FEATURE_JS_PARSER " ${FEATURE_JS_PARSER})
84+
message(STATUS "FEATURE_LINE_INFO " ${FEATURE_LINE_INFO})
85+
message(STATUS "FEATURE_LOGGING " ${FEATURE_LOGGING} ${FEATURE_LOGGING_MESSAGE})
86+
message(STATUS "FEATURE_MEM_STATS " ${FEATURE_MEM_STATS})
87+
message(STATUS "FEATURE_MEM_STRESS_TEST " ${FEATURE_MEM_STRESS_TEST})
88+
message(STATUS "FEATURE_PARSER_DUMP " ${FEATURE_PARSER_DUMP} ${FEATURE_PARSER_DUMP_MESSAGE})
89+
message(STATUS "FEATURE_PROFILE " ${FEATURE_PROFILE})
90+
message(STATUS "FEATURE_REGEXP_STRICT_MODE " ${FEATURE_REGEXP_STRICT_MODE})
91+
message(STATUS "FEATURE_REGEXP_DUMP " ${FEATURE_REGEXP_DUMP})
92+
message(STATUS "FEATURE_REGEXP_RECURSION_LIMIT " ${FEATURE_REGEXP_RECURSION_LIMIT})
93+
message(STATUS "FEATURE_SNAPSHOT_EXEC " ${FEATURE_SNAPSHOT_EXEC} ${FEATURE_SNAPSHOT_EXEC_MESSAGE})
94+
message(STATUS "FEATURE_SNAPSHOT_SAVE " ${FEATURE_SNAPSHOT_SAVE} ${FEATURE_SNAPSHOT_SAVE_MESSAGE})
95+
message(STATUS "FEATURE_SYSTEM_ALLOCATOR " ${FEATURE_SYSTEM_ALLOCATOR})
96+
message(STATUS "FEATURE_VALGRIND " ${FEATURE_VALGRIND})
97+
message(STATUS "FEATURE_VM_EXEC_STOP " ${FEATURE_VM_EXEC_STOP})
98+
message(STATUS "MEM_HEAP_SIZE_KB " ${MEM_HEAP_SIZE_KB})
9799

98100
# Include directories
99101
set(INCLUDE_CORE_PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
@@ -242,6 +244,11 @@ if(FEATURE_REGEXP_STRICT_MODE)
242244
set(DEFINES_JERRY ${DEFINES_JERRY} ENABLE_REGEXP_STRICT_MODE)
243245
endif()
244246

247+
# RegExp recursion depth limit
248+
if(FEATURE_REGEXP_RECURSION_LIMIT)
249+
set(DEFINES_JERRY ${DEFINES_JERRY} FEATURE_REGEXP_RECURSION_LIMIT=${FEATURE_REGEXP_RECURSION_LIMIT})
250+
endif()
251+
245252
# RegExp byte-code dumps
246253
if(FEATURE_REGEXP_DUMP)
247254
set(DEFINES_JERRY ${DEFINES_JERRY} REGEXP_DUMP_BYTE_CODE)

0 commit comments

Comments
 (0)