Skip to content

Avoid frozen error in _toUTF8 (Fixes #83)#84

Merged
jeremyevans merged 1 commit intoruby:masterfrom
jeremyevans:avoid-frozen-error
Mar 21, 2026
Merged

Avoid frozen error in _toUTF8 (Fixes #83)#84
jeremyevans merged 1 commit intoruby:masterfrom
jeremyevans:avoid-frozen-error

Conversation

@jeremyevans
Copy link
Collaborator

This happens when attempting to set an encoding on the string. If the string is frozen, use +@ to duplicate it (so that chilled strings are handled correctly).

This happens at least in sample/figmemo_sample.rb on Tcl/Tk 9.0.

Backtrace:

lib/tk.rb:2813:in 'TclTkIp#_toUTF8': can't modify frozen String: "10c" (FrozenError)
        from lib/tk.rb:2813:in 'TclTkIp#_toUTF8'
        from lib/tk.rb:676:in 'TkComm#_toUTF8'
        from lib/tk.rb:1962:in 'TkUtil#_conv_args'
        from lib/tk.rb:1962:in 'TkCore#_tk_call_core'
        from lib/tk.rb:1990:in 'TkCore#tk_call'
        from lib/tk.rb:3920:in 'TkConfigMethod#__configure_core'
        from lib/tk.rb:3943:in 'TkConfigMethod#configure'
        from lib/tk/composite.rb:329:in 'TkComposite#configure'
        from lib/tk.rb:4841: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>'

This happens when attempting to set an encoding on the string. If
the string is frozen, use +@ to duplicate it (so that chilled
strings are handled correctly).

This happens at least in sample/figmemo_sample.rb on Tcl/Tk 9.0.

Backtrace:

```
lib/tk.rb:2813:in 'TclTkIp#_toUTF8': can't modify frozen String: "10c" (FrozenError)
        from lib/tk.rb:2813:in 'TclTkIp#_toUTF8'
        from lib/tk.rb:676:in 'TkComm#_toUTF8'
        from lib/tk.rb:1962:in 'TkUtil#_conv_args'
        from lib/tk.rb:1962:in 'TkCore#_tk_call_core'
        from lib/tk.rb:1990:in 'TkCore#tk_call'
        from lib/tk.rb:3920:in 'TkConfigMethod#__configure_core'
        from lib/tk.rb:3943:in 'TkConfigMethod#configure'
        from lib/tk/composite.rb:329:in 'TkComposite#configure'
        from lib/tk.rb:4841: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>'

```
@mtasaka
Copy link
Contributor

mtasaka commented Mar 21, 2026

Okay, this is working for me, thank you.

@jeremyevans jeremyevans merged commit 3060cde into ruby:master Mar 21, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants