Project

General

Profile

Actions

Bug #22383

open

Fix inverted `STR_SHARED` check in `rb_str_tmp_frozen_release`

Bug #22383: Fix inverted `STR_SHARED` check in `rb_str_tmp_frozen_release`

Added by rwstauner (Randy Stauner) about 8 hours ago. Updated about 7 hours ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:126852]

Description

https://github.com/ruby/ruby/commit/45a2c95d0f7184c9cd64ddd26699af31bea8675d#diff-430d86fdb6c4a558ab0f1b6648bbfae1720e8bde84f026e95a52740014752040R1914

mistakenly rewrote

FL_TEST_RAW(orig, STR_SHARED) && !FL_TEST_RAW(orig, STR_TMPLOCK|RUBY_FL_FREEZE)

as

FL_TEST_RAW(orig, STR_SHARED | STR_TMPLOCK) == STR_TMPLOCK && !OBJ_FROZEN_RAW(orig)

requiring orig to not be shared, the opposite of the original
condition. orig always shares the buffer with tmp here, so the buffer
was never given back and the string stayed shared until its next
modification copied it.
The next line of code then reads aux.shared from strings
that are not shared, where the union holds aux.capa.

Actions

Also available in: PDF Atom