Fix failure on mswin CI

20200619T054159Z.fail.html.gz
```
  1) Failure:
WEBrick::TestFileHandler#test_cjk_in_path [D:/tmp/mswin-build20200619-14304-utgij/ruby/test/webrick/utils.rb:72]:
exceptions on 2 threads:
webrick log start:
  [2020-06-19 16:28:42] ERROR `/あ.txt' not found.

webrick log end
Filesystem encoding is Windows-31J.
<"200"> expected but was
<"404">.
---
<[]> expected but was
<["[2020-06-19 16:28:42] ERROR `/\xE3\x81\x82.txt' not found.\n"]>.
```

`prevent_directory_traversal` treats `path_info` as filesystem encoding.
So path_info should be filesystem encoding in request URL.

On some environments, fallback to ASCII-8BIT when EncodingError.
This commit is contained in:
Kazuhiro NISHIYAMA 2020-06-19 20:06:26 +09:00
parent daa9dcd57e
commit 6fe1919486
No known key found for this signature in database
GPG key ID: 262ED8DBB4222F7A
2 changed files with 16 additions and 2 deletions

View file

@ -324,8 +324,17 @@ module WEBrick
end
def set_filename(req, res)
res.filename = @root.b
res.filename = @root
path_info = req.path_info.scan(%r|/[^/]*|)
begin
path_info.map! do |path|
path.force_encoding('filesystem').encode(@root.encoding)
end
rescue EncodingError
path_info.map! do |path|
path.force_encoding(@root.encoding)
end
end
path_info.unshift("") # dummy for checking @root dir
while base = path_info.first