nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit c42d6d378a2fed269e1fb18d2d98be86276a9a09
parent 1a79b3d5147050ae73942ee098dce36cf9b59deb
Author: Benno Schulenberg <bensberg@justemail.net>
Date:   Sun, 30 Apr 2017 20:18:20 +0200

tweaks: check for an empty needle in a central place

Searching for an empty string should be impossible, it should never
happen, but it is bit too hard to verify this at the moment.

Diffstat:
Msrc/chars.c | 16+---------------
Msrc/utils.c | 4++++
2 files changed, 5 insertions(+), 15 deletions(-)

diff --git a/src/chars.c b/src/chars.c @@ -456,12 +456,7 @@ char *mbstrcasestr(const char *haystack, const char *needle) { #ifdef ENABLE_UTF8 if (use_utf8) { - size_t needle_len; - - if (*needle == '\0') - return (char *)haystack; - - needle_len = mbstrlen(needle); + size_t needle_len = mbstrlen(needle); while (*haystack != '\0') { if (mbstrncasecmp(haystack, needle, needle_len) == 0) @@ -484,9 +479,6 @@ char *revstrstr(const char *haystack, const char *needle, size_t needle_len = strlen(needle); size_t tail_len = strlen(pointer); - if (needle_len == 0) - return (char *)pointer; - if (tail_len < needle_len) pointer += tail_len - needle_len; @@ -507,9 +499,6 @@ char *revstrcasestr(const char *haystack, const char *needle, size_t needle_len = strlen(needle); size_t tail_len = strlen(pointer); - if (needle_len == 0) - return (char *)pointer; - if (tail_len < needle_len) pointer += tail_len - needle_len; @@ -532,9 +521,6 @@ char *mbrevstrcasestr(const char *haystack, const char *needle, size_t needle_len = mbstrlen(needle); size_t tail_len = mbstrlen(pointer); - if (needle_len == 0) - return (char *)pointer; - if (tail_len < needle_len) pointer += tail_len - needle_len; diff --git a/src/utils.c b/src/utils.c @@ -237,6 +237,10 @@ bool is_separate_word(size_t position, size_t length, const char *buf) const char *strstrwrapper(const char *haystack, const char *needle, const char *start) { + /* Just in case we search for an empty needle. :/ */ + if (*needle == '\0') + return (char *)start; + if (ISSET(USE_REGEXP)) { if (ISSET(BACKWARDS_SEARCH)) { size_t last_find, ceiling, far_end;