Project

General

Profile

Feature #22136

Updated by byroot (Jean Boussier) 3 months ago

### Expected behavior 

 If I'm tracking down a problem and suspect an error might be swallowed somewhere, I do run my test case with `RUBYOPT="-d"` (or simply set `$DEBUG = true`. 

 I do expect the program to execute all in the same way than without `-d`, expect for extra output on STDERR. 

 ### Actual behavior 

 If some code happens to call `sprintf` or `String#%` with too many arguments, then it will raise an error and likely break the program, preventing me from simply running the same code but in debug mode. 

 ### Reproduction 

 ``` 
 $ ruby -e 'sprintf("foo", "bar"); p :ok' 
 :ok 

 $ ruby -We 'sprintf("foo", "bar"); p :ok' 
 -e:1: warning: too many arguments for format string 
 :ok 

 $ ruby -dWe 'sprintf("foo", "bar"); p :ok' 
 Exception 'LoadError' at .../lib/ruby/4.0.0/rubygems.rb:1423 - cannot load such file -- rubygems/defaults/operating_system 
 Exception 'LoadError' at .../lib/ruby/4.0.0/rubygems.rb:1438 - cannot load such file -- rubygems/defaults/ruby 
 Exception 'ArgumentError' at -e:1 - too many arguments for format string 
 Exception 'RuntimeError' at <internal:ast>:96 - cannot get AST for ISEQ compiled by prism 
 -e:1:in 'Kernel#sprintf': too many arguments for format string (ArgumentError) 
	 from -e:1:in '<main>' 
 ``` 

 ### Bug or Feature? 

 I looked around the Ruby codebase, as far as I can tell this is the only method behaving this way (aside from its aliases like `String#%`). 

 So I filed this as a Feature, but really in my opinion it is a bug. 

 Pull Request: https://github.com/ruby/ruby/pull/17579

Back