diff --git a/src/chars.c b/src/chars.c
index a7200f942deb0d0d5043574b590410c803c30bf8..65408447c7c1105bf5144d69b9b7cf5e65e36fdb 100644
--- 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
index 7438ed243f0aecb40d584ed4529601285a696476..6773d00329a0540765cfa00005b0ff05fdadfc49 100644
--- 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;