Conversation
_startContentRender 는 리렌더마다 필드를 새로 만들면서 _contents 를 비우지만, 버려지는 필드가 슬롯 안 블록의 뷰에 걸어둔 _posObserver/_sizeObserver 는 끊지 않았음. 슬롯 안 블록은 params 에 살아있어 그 옵저버도 함께 남고, 블록을 교체할 때 bumpAway 가 0.15초 뒤 위치를 바꾸면 이미 버려진 필드가 updateValueBlock(undefined) 으로 깨어나 params 를 빈 슬롯 기본값(10)으로 덮어씀. 화면은 현재 필드가 그린 것이라 정상으로 보이고 toJSON/copy 만 params 를 읽으므로, 저장 후 새로고침에서야 값이 바뀐 것이 드러남. _contents 를 비우기 전에 각 필드의 _destroyObservers 를 호출해 옵저버 누적을 막고, 같은 취약점이 있는 FieldOutput 에도 _destroyObservers 메서드를 추출해 적용. destroy() 는 슬롯 안 블록의 뷰까지 파괴하므로 리렌더 경로에서는 쓰지 않음. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
_startContentRender 는 리렌더마다 필드를 새로 만들면서 _contents 를 비우지만, 버려지는 필드가 슬롯 안 블록의 뷰에 걸어둔 _posObserver/_sizeObserver 는 끊지 않았음. 슬롯 안 블록은 params 에 살아있어 그 옵저버도 함께 남고, 블록을 교체할
때 bumpAway 가 0.15초 뒤 위치를 바꾸면 이미 버려진 필드가
updateValueBlock(undefined) 으로 깨어나 params 를 빈 슬롯 기본값(10)으로 덮어씀. 화면은 현재 필드가 그린 것이라 정상으로 보이고 toJSON/copy 만 params 를 읽으므로, 저장 후 새로고침에서야 값이 바뀐 것이 드러남.
_contents 를 비우기 전에 각 필드의 _destroyObservers 를 호출해 옵저버 누적을 막고, 같은 취약점이 있는 FieldOutput 에도 _destroyObservers 메서드를 추출해 적용. destroy() 는 슬롯 안 블록의 뷰까지 파괴하므로 리렌더 경로에서는 쓰지 않음.