From dc94c81cb0807dbb5cf60c782baa916bbd8458ed Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 9 Mar 2020 13:13:54 +0100 Subject: [PATCH] fixes #13605 (#13611) --- changelog.md | 3 +++ lib/pure/parseutils.nim | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 38f9589db4..49567e9298 100644 --- a/changelog.md +++ b/changelog.md @@ -115,6 +115,9 @@ echo f serve no purpose whatsoever. - `httpclient.newHttpClient` and `httpclient.newAsyncHttpClient` added `headers` argument to set initial HTTP Headers, instead of a hardcoded empty `newHttpHeader()`. +- `parseutils.parseUntil` has now a different behaviour if the `until` parameter is + empty. This was required for intuitive behaviour of the strscans module + (see bug #13605). ## Language additions diff --git a/lib/pure/parseutils.nim b/lib/pure/parseutils.nim index 2c21c49527..6116751ff2 100644 --- a/lib/pure/parseutils.nim +++ b/lib/pure/parseutils.nim @@ -354,12 +354,13 @@ proc parseUntil*(s: string, token: var string, until: string, doAssert myToken == "Hello " doAssert parseUntil("Hello World", myToken, "Wor", 2) == 4 doAssert myToken == "llo " - if until.len == 0: - token.setLen(0) - return 0 + when (NimMajor, NimMinor) <= (1, 0): + if until.len == 0: + token.setLen(0) + return 0 var i = start while i < s.len: - if s[i] == until[0]: + if until.len > 0 and s[i] == until[0]: var u = 1 while i+u < s.len and u < until.len and s[i+u] == until[u]: inc u