[ruby-core:119248] [Ruby master Bug#20752] IO::Buffer#slice fails to copy readonly flag, allowing writes into frozen String

Issue #20752 has been reported by hanazuki (Kasumi Hanazuki). ---------------------------------------- Bug #20752: IO::Buffer#slice fails to copy readonly flag, allowing writes into frozen String https://bugs.ruby-lang.org/issues/20752 * Author: hanazuki (Kasumi Hanazuki) * Status: Open * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #20752 has been updated by nobu (Nobuyoshi Nakada). Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN to 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED It results in bus errors with 3.1 and 3.2. ``` $ ruby3.2 -e 'IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string("perl", 0, 4)' -e:1: [BUG] Bus Error at 0x0000000100f08b18 ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [arm64-darwin23] ``` ``` $ ruby3.1 -e 'IO::Buffer.for(RUBY_DESCRIPTION).slice(0, 8).set_string("perl", 0, 4)' -e:1: [BUG] Bus Error at 0x00000001039c7e38 ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [arm64-darwin23] ``` ---------------------------------------- Bug #20752: IO::Buffer#slice fails to copy readonly flag, allowing writes into frozen String https://bugs.ruby-lang.org/issues/20752#change-109830 * Author: hanazuki (Kasumi Hanazuki) * Status: Open * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #20752 has been updated by mame (Yusuke Endoh). Assignee set to ioquatix (Samuel Williams) ---------------------------------------- Bug #20752: IO::Buffer#slice creates mutable IO::Buffer instance that points to readonly memory (e.g. fronzen String) https://bugs.ruby-lang.org/issues/20752#change-109959 * Author: hanazuki (Kasumi Hanazuki) * Status: Open * Assignee: ioquatix (Samuel Williams) * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #20752 has been updated by ioquatix (Samuel Williams). The second example `XameError` is hilarious, what a great bug. Yes, this should be fixed. ---------------------------------------- Bug #20752: IO::Buffer#slice creates mutable IO::Buffer instance that points to readonly memory (e.g. fronzen String) https://bugs.ruby-lang.org/issues/20752#change-109970 * Author: hanazuki (Kasumi Hanazuki) * Status: Open * Assignee: ioquatix (Samuel Williams) * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #20752 has been updated by ioquatix (Samuel Williams). Looks like @nobu already made a PR here: https://github.com/ruby/ruby/pull/11735 ---------------------------------------- Bug #20752: IO::Buffer#slice creates mutable IO::Buffer instance that points to readonly memory (e.g. fronzen String) https://bugs.ruby-lang.org/issues/20752#change-109971 * Author: hanazuki (Kasumi Hanazuki) * Status: Open * Assignee: ioquatix (Samuel Williams) * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #20752 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 3.1: REQUIRED, 3.2: REQUIRED, 3.3: REQUIRED to 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED ruby_3_2 commit:5777fe5ab57d6479326bdb21ef9a6b88ea1516dc merged revision(s) commit:637067440f74043c6d79fc649ab8acf1afea25a5. ---------------------------------------- Bug #20752: IO::Buffer#slice creates mutable IO::Buffer instance that points to readonly memory (e.g. fronzen String) https://bugs.ruby-lang.org/issues/20752#change-110159 * Author: hanazuki (Kasumi Hanazuki) * Status: Closed * Assignee: ioquatix (Samuel Williams) * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/

Issue #20752 has been updated by k0kubun (Takashi Kokubun). Backport changed from 3.1: REQUIRED, 3.2: DONE, 3.3: REQUIRED to 3.1: REQUIRED, 3.2: DONE, 3.3: DONE ruby_3_3 commit:12ea98e8c8af0ed6778aad26e7ec5f95e2c239e5 merged revision(s) commit:637067440f74043c6d79fc649ab8acf1afea25a5. ---------------------------------------- Bug #20752: IO::Buffer#slice creates mutable IO::Buffer instance that points to readonly memory (e.g. fronzen String) https://bugs.ruby-lang.org/issues/20752#change-110374 * Author: hanazuki (Kasumi Hanazuki) * Status: Closed * Assignee: ioquatix (Samuel Williams) * ruby -v: ruby 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux] * Backport: 3.1: REQUIRED, 3.2: DONE, 3.3: DONE ---------------------------------------- ```irb irb(main):001> RUBY_DESCRIPTION.frozen? => true irb(main):002> IO::Buffer.for(RUBY_DESCRIPTION).set_string('perl', 0, 4) (irb):2:in 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError) from (irb):2:in '<main>' from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' irb(main):003> IO::Buffer.for(RUBY_DESCRIPTION).slice.set_string('perl', 0, 4) => 4 irb(main):004> RUBY_DESCRIPTION => "perl 3.4.0dev (2024-09-18T02:16:22Z master 4797b0704a) +PRISM [x86_64-linux]" ``` ```irb irb(main):001> IO::Buffer.for(NameError.name).slice.set_string('X', 0, 1) => 1 irb(main):002> NameError (irb):2:in '<main>': uninitialized constant NameError (XameError) from <internal:kernel>:191:in 'Kernel#loop' from -e:1:in '<main>' ``` -- https://bugs.ruby-lang.org/
participants (6)
-
hanazuki (Kasumi Hanazuki)
-
ioquatix (Samuel Williams)
-
k0kubun (Takashi Kokubun)
-
mame (Yusuke Endoh)
-
nagachika (Tomoyuki Chikanaga)
-
nobu (Nobuyoshi Nakada)