Guard against calling split with an empty string as a separator. Fixes #5119

This commit is contained in:
Chris Heller 2016-12-16 01:33:44 -08:00
commit 40d034b7e3
2 changed files with 24 additions and 0 deletions

View file

@ -808,6 +808,11 @@ proc split*(s: string, sep: string, maxsplit: int = -1): seq[string] {.noSideEff
## ##
## Substrings are separated by the string `sep`. This is a wrapper around the ## Substrings are separated by the string `sep`. This is a wrapper around the
## `split iterator <#split.i,string,string>`_. ## `split iterator <#split.i,string,string>`_.
##
## If `sep` is an empty string, `ValueError` is raised.
if sep.len == 0:
raise newException(ValueError, "invalid separator: empty string not allowed")
accumulateResult(split(s, sep, maxsplit)) accumulateResult(split(s, sep, maxsplit))
proc rsplit*(s: string, seps: set[char] = Whitespace, proc rsplit*(s: string, seps: set[char] = Whitespace,

19
tests/stdlib/tsplit2.nim Normal file
View file

@ -0,0 +1,19 @@
discard """
file: "tsplit2.nim"
output: "true"
"""
import strutils
var s = ""
for w in split("|abc|xy|z", {'|'}):
s.add("#")
s.add(w)
try:
discard "hello".split("")
echo "false"
except ValueError:
echo "true"
#OUT true