Skip to content

FrozenError when executing sample/figmemo_sample.rb #83

@mtasaka

Description

@mtasaka

Using:
ruby 4.0.1 (2026-01-13 revision e04267a14b) +PRISM [x86_64-linux]

Well, just trying to execute some random example program, I've found that sample/figmemo_sample.rb causes error with backtrace:

$ ruby ./sample/figmemo_sample.rb
/builddir/GIT/tk/lib/tk.rb:2813:in 'TclTkIp#_toUTF8': can't modify frozen String: "10c" (FrozenError)
	from /builddir/GIT/tk/lib/tk.rb:2813:in 'TclTkIp#_toUTF8'
	from /builddir/GIT/tk/lib/tk.rb:676:in 'TkComm#_toUTF8'
	from /builddir/GIT/tk/lib/tk.rb:1962:in 'TkUtil#_conv_args'
	from /builddir/GIT/tk/lib/tk.rb:1962:in 'TkCore#_tk_call_core'
	from /builddir/GIT/tk/lib/tk.rb:1990:in 'TkCore#tk_call'
	from /builddir/GIT/tk/lib/tk.rb:3925:in 'TkConfigMethod#__configure_core'
	from /builddir/GIT/tk/lib/tk.rb:3948:in 'TkConfigMethod#configure'
	from /builddir/GIT/tk/lib/tk/composite.rb:329:in 'TkComposite#configure'
	from /builddir/GIT/tk/lib/tk.rb:4846:in 'TkObject#method_missing'
	from ./sample/figmemo_sample.rb:96:in 'PhotoCanvas#initialize'
	from ./sample/figmemo_sample.rb:415:in 'TkKernel.new'
	from ./sample/figmemo_sample.rb:415:in '<main>'

The following workarounds this:

diff --git a/lib/tk.rb b/lib/tk.rb
index 1d84d93..c2fe525 100644
--- a/lib/tk.rb
+++ b/lib/tk.rb
@@ -2810,7 +2810,7 @@ if (/^(8\.[1-9]|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK)
 
         if enc_name
           # str has its encoding information
-          encstr = __toUTF8(str, enc_name)
+          encstr = __toUTF8(+str, enc_name)
           encstr.force_encoding(Tk::Encoding::UTF8_NAME)
           return encstr
         else

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions