Actions
Bug #20744
closedsyntax error found (SyntaxError) `UTF-8 mixed within US-ASCII source` reported Ruby with Prism parser
ruby -v:
ruby 3.4.0dev (2024-09-15T01:06:11Z master 532af89e3b) +PRISM [x86_64-linux]
Description
I'm reporting this issue based on Rails Nightly CI against Ruby 3.4.0dev.
https://buildkite.com/rails/rails-nightly/builds/1023#0191ed31-1d77-4705-ab65-cecab76e2c88/1175-1209
I have not able to create a minimum test case without Rails yet.
Steps to reproduce¶
git clone https://github.com/rails/rails
cd rails/actionview
bin/test test/template/template_test.rb:278
Expected behavior¶
It should pass as it Runs parser.y parser
$ RUBYOPT=--parser=parse.y bin/test test/template/template_test.rb:278
/home/yahonda/.gem/ruby/3.4.0+0/gems/json-2.7.1/lib/json/common.rb:3: warning: ostruct was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.
You can add ostruct to your Gemfile or gemspec to silence this warning.
Running 36 tests in a single process (parallelization threshold is 50)
Run options: --seed 61197
# Running:
.
Finished in 0.037914s, 26.3756 runs/s, 79.1267 assertions/s.
1 runs, 3 assertions, 0 failures, 0 errors, 0 skips
$
Actual behavior¶
It raises the following syntax error found (SyntaxError)
$ bin/test test/template/template_test.rb:278
/home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:79:in 'Kernel.require':
/home/yahonda/src/github.com/rails/rails/actionview/test/template/template_test.rb:278: syntax error found (SyntaxError)
276 | @template = new_template("<%# encoding: ISO-8859-1 %>\n<%# locals: (message: 'Hi!') %>\nhello \xFCmlat\n<%= message %>", virtual_path: nil)
277 | assert_equal Encoding::UTF_8, render.encoding
> 278 | assert_match(/hello \u{fc}mlat\nHi!/, render)
| ^~ UTF-8 mixed within US-ASCII source
279 | end
280 | end
from /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:79:in 'block (2 levels) in Kernel#replace_require'
from /home/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:62:in 'block in Rails::TestUnit::Runner.load_tests'
from <internal:array>:42:in 'Array#each'
from /home/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:60:in 'Rails::TestUnit::Runner.load_tests'
from /home/yahonda/src/github.com/rails/rails/railties/lib/rails/test_unit/runner.rb:52:in 'Rails::TestUnit::Runner.run'
from /home/yahonda/src/github.com/rails/rails/tools/test.rb:18:in '<top (required)>'
from bin/test:5:in 'Kernel#require_relative'
from bin/test:5:in '<main>'
$
Updated by ima1zumi (Mari Imaizumi) 2 months ago
I'm unsure if this is the same case as Rails, but I found a reproduce code.
# encoding: US-ASCII
str = String.new("hello \xFC", encoding: Encoding::ISO_8859_1).encode(Encoding::UTF_8)
puts str =~ /hello \u{fc}/
ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [arm64-darwin23]¶
0
ruby 3.4.0dev (2024-09-15T01:06:11Z master 532af89e3b) +PRISM [arm64-darwin23]¶
iso88591.rb:
iso88591.rb:4: syntax error found (SyntaxError)
2 |
3 | str = String.new("hello \xFC", encoding: Encoding::ISO_8859_1).encode(Encoding::UTF_8)
> 4 | puts str =~ /hello \u{fc}/
| ^~ UTF-8 mixed within US-ASCII source
5 |
Updated by kddnewton (Kevin Newton) 2 months ago
- Assignee set to kddnewton (Kevin Newton)
Thank you for the report, I will take a look.
Updated by kddnewton (Kevin Newton) 2 months ago
I have opened a PR to fix this.
Updated by kddnewton (Kevin Newton) 2 months ago
- Status changed from Open to Closed
Applied in changeset git|2ea1950510003dbce5a761a712039ed69fa499f2.
[ruby/prism] Do not leak explicit encoding
Fixes [Bug #20744]
Actions
Like0
Like0Like0Like0Like0