summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorn5m <72841454+n5m@users.noreply.github.com>2021-05-31 09:20:15 +0000
committerGitHub <noreply@github.com>2021-05-31 11:20:15 +0200
commit064fe18de61c2aae5c215077ba1dd0352affa271 (patch)
treed1f43e0aaf16bf26a2cf16d0a31646ecd8d15b4f /lib/pure
parent18b477431138d944b90e7a6e6e0412496634b518 (diff)
downloadNim-064fe18de61c2aae5c215077ba1dd0352affa271.tar.gz
improve fast returns of find and rfind (#18127)
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/strutils.nim4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index 5bbd850cc..3fb67ead1 100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -1890,7 +1890,7 @@ func find*(s, sub: string, start: Natural = 0, last = 0): int {.rtl,
   ## See also:
   ## * `rfind func<#rfind,string,string,Natural>`_
   ## * `replace func<#replace,string,string,string>`_
-  if sub.len > s.len: return -1
+  if sub.len > s.len - start: return -1
   if sub.len == 1: return find(s, sub[0], start, last)
 
   template useSkipTable {.dirty.} =
@@ -1967,6 +1967,8 @@ func rfind*(s, sub: string, start: Natural = 0, last = -1): int {.rtl,
   ## * `find func<#find,string,string,Natural,int>`_
   if sub.len == 0:
     return -1
+  if sub.len > s.len - start:
+    return -1
   let last = if last == -1: s.high else: last
   result = 0
   for i in countdown(last - sub.len + 1, start):