avm1: Fix prototype chain for movies loaded into levels #22688
Merged
+87
−0
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.
Fixes #22395
When a lower-version SWF (e.g., SWF6) loads a higher-version SWF (e.g., SWF8) via loadMovieNum, the loaded movie's _levelN clip had the wrong __proto__. This caused the loaded movie to be unable to see properties added to its version's MovieClip.prototype.
In loader.rs, get_or_create_level creates the level clip using the loader's movie version for the prototype. Then replace_with_movie updates the movie reference but doesn't update __proto__. So when SWF6 loads SWF8 into _level2, the clip ends up with SWF6's prototype instead of SWF8's.