mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 00:17:46 +00:00
AK: Stop allowing implicit downcast with RefPtr and NonnullRefPtr
We were allowing this dangerous kind of thing: RefPtr<Base> base; RefPtr<Derived> derived = base; This patch changes the {Nonnull,}RefPtr constructors so this is no longer possible. To downcast one of these pointers, there is now static_ptr_cast<T>: RefPtr<Derived> derived = static_ptr_cast<Derived>(base); Fixing this exposed a ton of cowboy-downcasts in various places, which we're now forced to fix. :^)
This commit is contained in:
parent
058c614110
commit
1d468ed6d3
11 changed files with 68 additions and 54 deletions
|
@ -68,7 +68,7 @@ public:
|
|||
template<typename U>
|
||||
RETURN_TYPESTATE(unconsumed)
|
||||
NonnullRefPtr(const U& object)
|
||||
: m_ptr(&const_cast<T&>(static_cast<const T&>(object)))
|
||||
: m_ptr(&const_cast<U&>(object))
|
||||
{
|
||||
m_ptr->ref();
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ public:
|
|||
template<typename U>
|
||||
RETURN_TYPESTATE(unconsumed)
|
||||
NonnullRefPtr(NonnullRefPtr<U>&& other)
|
||||
: m_ptr(static_cast<T*>(&other.leak_ref()))
|
||||
: m_ptr(&other.leak_ref())
|
||||
{
|
||||
}
|
||||
RETURN_TYPESTATE(unconsumed)
|
||||
|
@ -97,7 +97,7 @@ public:
|
|||
template<typename U>
|
||||
RETURN_TYPESTATE(unconsumed)
|
||||
NonnullRefPtr(const NonnullRefPtr<U>& other)
|
||||
: m_ptr(const_cast<T*>(static_cast<const T*>((other.ptr()))))
|
||||
: m_ptr(const_cast<U*>(other.ptr()))
|
||||
{
|
||||
m_ptr->ref();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue