Harden safety around dead and badly typed Gd<T>
instances
#546
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 a wide range of UB in scenarios when interacting with
Gd<T>
instances that are either dead or wrongly typed due to the #23DerefMut
exploit. The latter is done by tracking the runtime type in eachGd<T>
object as debug information.Release mode has the type check disabled, but the object validity one enabled. This might be worth a separate discussion in the future, maybe if performance impact is measured.
Scenarios covered:
Gd<T>
togodot::engine
APIsGd<T>
from#[func]
ToGodot
traitupcast()
andcast()
bind()
andbind_mut()
clone()
free()
on wrong typefree()
that panics when there is already a panic unwind in progressThere might be more, but this significantly improves safety when working with objects, to the point that it catches even deliberate abuse.