From: "Eregon (Benoit Daloze)" Date: 2022-08-23T14:54:57+00:00 Subject: [ruby-core:109646] [Ruby master Bug#18973] Kernel#sprintf: %c allows codepoints above 127 for 7-bits ASCII encoding Issue #18973 has been updated by Eregon (Benoit Daloze). I noticed https://github.com/ruby/ruby/blob/master/benchmark/app_aobench.rb seems to rely on this behavior. But that is easily fixed by using `# coding: BINARY` instead of `# coding: US-ASCII`. I think it would be good to fix this issue, so `sprintf("%c".encode("US-ASCII"), 128)` is `out of char range (RangeError)`, just like it is an exception for: ```ruby > 128.chr(Encoding::US_ASCII) (irb):2:in `chr': invalid codepoint 0x80 in US-ASCII (RangeError) ``` ---------------------------------------- Bug #18973: Kernel#sprintf: %c allows codepoints above 127 for 7-bits ASCII encoding https://bugs.ruby-lang.org/issues/18973#change-98869 * Author: andrykonchin (Andrew Konchin) * Status: Open * Priority: Normal * ruby -v: 3.0.3 * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- I've noticed the following behavior: ```ruby sprintf("%c".encode("US-ASCII"), 128) => "\x80" sprintf("%c".encode("US-ASCII"), 128).valid_encoding? => false ``` Specifying codepoints 128-255 for ASCII encoded formatting sequence leads to a broken string. ```ruby sprintf("%c".encode("US-ASCII"), 255) => "\xFF" sprintf("%c".encode("US-ASCII"), 256) (irb):17:in `sprintf': 256 out of char range (RangeError) ``` Specifying codepoint greater that 255 causes the expected exception `out of char range`. I suppose this exception should be raised for codepoints 128-255 as well (for ASCII encoding). -- https://bugs.ruby-lang.org/ Unsubscribe: