Add underflow check in JIT.

This commit is contained in:
Zoltán Herczeg 2019-09-09 07:12:00 +00:00
parent b48aa469d6
commit aae44b83f8
2 changed files with 9 additions and 2 deletions

View File

@ -146,6 +146,9 @@ compile-time performance improvement).
31. Installed a .gitignore file on a user's suggestion. When using the svn 31. Installed a .gitignore file on a user's suggestion. When using the svn
repository with git (through git svn) this helps keep it tidy. repository with git (through git svn) this helps keep it tidy.
32. Add underflow check in JIT which may occure when the value of subject
string pointer is close to 0.
Version 10.33 16-April-2019 Version 10.33 16-April-2019
--------------------------- ---------------------------

View File

@ -5793,12 +5793,16 @@ if (common->match_end_ptr != 0)
{ {
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
OP2(SLJIT_SUB, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max)); OP2(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max));
add_jump(compiler, &common->failed_match, JUMP(SLJIT_LESS));
OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0);
CMOV(SLJIT_GREATER, STR_END, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0);
} }
else else
OP2(SLJIT_SUB, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max)); {
OP2(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max));
add_jump(compiler, &common->failed_match, JUMP(SLJIT_LESS));
}
SLJIT_ASSERT(range_right >= 0); SLJIT_ASSERT(range_right >= 0);