Browse Source

Error when string.split is given empty separator (#13132)

Jude Melton-Houghton 1 year ago
parent
commit
ab1fe80150
3 changed files with 10 additions and 1 deletions
  1. 3 0
      builtin/common/misc_helpers.lua
  2. 6 0
      builtin/common/tests/misc_helpers_spec.lua
  3. 1 1
      doc/lua_api.txt

+ 3 - 0
builtin/common/misc_helpers.lua

@@ -170,6 +170,9 @@ end
 --------------------------------------------------------------------------------
 function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
 	delim = delim or ","
+	if delim == "" then
+		error("string.split separator is empty", 2)
+	end
 	max_splits = max_splits or -2
 	local items = {}
 	local pos, len = 1, #str

+ 6 - 0
builtin/common/tests/misc_helpers_spec.lua

@@ -38,6 +38,12 @@ describe("string", function()
 			assert.same({ "one", "two" }, string.split("one,two", ",", false, -1, true))
 			assert.same({ "one", "two", "three" }, string.split("one2two3three", "%d", false, -1, true))
 		end)
+
+		it("rejects empty separator", function()
+			assert.has.errors(function()
+				string.split("", "")
+			end)
+		end)
 	end)
 end)
 

+ 1 - 1
doc/lua_api.txt

@@ -3623,7 +3623,7 @@ Helper functions
 * `math.round(x)`: Returns `x` rounded to the nearest integer.
     * At a multiple of 0.5, rounds away from zero.
 * `string.split(str, separator, include_empty, max_splits, sep_is_pattern)`
-    * `separator`: string, default: `","`
+    * `separator`: string, cannot be empty, default: `","`
     * `include_empty`: boolean, default: `false`
     * `max_splits`: number, if it's negative, splits aren't limited,
       default: `-1`