Skip to content

Commit 8eca629

Browse files
committed
[GR-18163] Raise ArgumentError for nul-separated strings in Dir.{glob,[]}
PullRequest: truffleruby/2196
2 parents 8a3908e + f284c98 commit 8eca629

File tree

4 files changed

+5
-17
lines changed

4 files changed

+5
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Compatibility:
2626
* Implemented `FrozenError#receiver`.
2727
* `Proc#<<` and `Proc#>>` raises TypeError if passed not callable object (#2004, @ssnickolay).
2828
* Support time and date related messages for `Time` (#2166).
29+
* Updated `Dir.{glob,[]}` to raise `ArgumentError` for nul-separated strings.
2930

3031
Performance:
3132

spec/tags/core/dir/element_reference_tags.txt

Lines changed: 0 additions & 2 deletions
This file was deleted.

spec/tags/core/dir/glob_tags.txt

Lines changed: 0 additions & 2 deletions
This file was deleted.

src/main/ruby/truffleruby/core/dir.rb

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@ def [](*patterns, base: nil)
227227
if patterns.size == 1
228228
pattern = Truffle::Type.coerce_to_path(patterns[0], false)
229229
return [] if pattern.empty?
230-
patterns = glob_split pattern
230+
raise ArgumentError, 'nul-separated glob pattern is deprecated' if pattern.include? "\0"
231+
patterns = [pattern]
231232
end
232233

233234
glob patterns, base: base
@@ -240,8 +241,8 @@ def glob(pattern, flags=0, base: nil, &block)
240241
pattern = Truffle::Type.coerce_to_path(pattern, false)
241242

242243
return [] if pattern.empty?
243-
244-
patterns = glob_split pattern
244+
raise ArgumentError, 'nul-separated glob pattern is deprecated' if pattern.include? "\0"
245+
patterns = [pattern]
245246
end
246247

247248
matches = []
@@ -274,16 +275,6 @@ def glob(pattern, flags=0, base: nil, &block)
274275
end
275276
end
276277

277-
def glob_split(pattern)
278-
result = []
279-
start = 0
280-
while idx = Primitive.find_string(pattern, "\0", start)
281-
result << pattern.byteslice(start, idx)
282-
start = idx + 1
283-
end
284-
result << pattern.byteslice(start, pattern.bytesize)
285-
end
286-
287278
def foreach(path)
288279
return to_enum(:foreach, path) unless block_given?
289280

0 commit comments

Comments
 (0)