diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-06-20 12:18:54 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-06-20 16:21:53 +0200 |
commit | e4455c32ed76b74197f1a2647c163d0d470df9fe (patch) | |
tree | 57dfaceb9adb0b1749e1d7dcfe97969364b44589 /Zend/zend_operators.h | |
parent | a59e0cfce528669642f8199410b267146a30b714 (diff) | |
download | php-git-e4455c32ed76b74197f1a2647c163d0d470df9fe.tar.gz |
Bail out earlier in zend_memnrstr
To avoid decrementing a null pointer lateron. As we need to check
for NULL here anayway, we should take the chance to bail out right
away.
Diffstat (limited to 'Zend/zend_operators.h')
-rw-r--r-- | Zend/zend_operators.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index b126e96611..c6a55c2b6d 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -225,10 +225,12 @@ zend_memnrstr(const char *haystack, const char *needle, size_t needle_len, const p -= needle_len; do { - if ((p = (const char *)zend_memrchr(haystack, *needle, (p - haystack) + 1)) && ne == p[needle_len-1]) { - if (!memcmp(needle + 1, p + 1, needle_len - 2)) { - return p; - } + p = (const char *)zend_memrchr(haystack, *needle, (p - haystack) + 1); + if (!p) { + return NULL; + } + if (ne == p[needle_len-1] && !memcmp(needle + 1, p + 1, needle_len - 2)) { + return p; } } while (p-- >= haystack); |