include/vcl/vclptr.hxx |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

New commits:
commit 976a4803e4cca4c5104c0ed60544a91a50ada012
Author: Noel Grandin <[email protected]>
Date:   Wed Sep 7 10:19:45 2016 +0200

    disallow calls to ::Create in VclPtr subclasses
    
    where it can be actively dangerous, if the calling code thinks it's
    creating a ScopedVclPtrInstance, and it actually only gets a VclPtr
    
    Change-Id: I638b28207d60e8fc4ca3d31000c0735d06ce2eb3
    Reviewed-on: https://gerrit.libreoffice.org/28714
    Reviewed-by: Noel Grandin <[email protected]>
    Tested-by: Noel Grandin <[email protected]>

diff --git a/include/vcl/vclptr.hxx b/include/vcl/vclptr.hxx
index 436a358..b4ef553 100644
--- a/include/vcl/vclptr.hxx
+++ b/include/vcl/vclptr.hxx
@@ -281,6 +281,12 @@ public:
         : VclPtr<reference_type>( new 
reference_type(std::forward<Arg>(arg)...), SAL_NO_ACQUIRE )
     {
     }
+
+    /**
+     * Override and disallow this, to prevent people accidentally calling it 
and actually
+     * getting VclPtr::Create and getting a naked VclPtr<> instance
+     */
+    template<typename... Arg> static VclPtrInstance< reference_type > 
Create(Arg &&... ) = delete;
 };
 
 template <class reference_type>
@@ -339,6 +345,12 @@ public:
     {
     }
 
+    /**
+     * Override and disallow this, to prevent people accidentally calling it 
and actually
+     * getting VclPtr::Create and getting a naked VclPtr<> instance
+     */
+    template<typename... Arg> static ScopedVclPtr< reference_type > Create(Arg 
&&... ) = delete;
+
     ~ScopedVclPtr()
     {
         VclPtr<reference_type>::disposeAndClear();
@@ -382,6 +394,12 @@ public:
     {
     }
 
+    /**
+     * Override and disallow this, to prevent people accidentally calling it 
and actually
+     * getting VclPtr::Create and getting a naked VclPtr<> instance
+     */
+    template<typename... Arg> static ScopedVclPtrInstance< reference_type > 
Create(Arg &&...) = delete;
+
 private:
     // Prevent the above perfect forwarding ctor from hijacking (accidental)
     // attempts at ScopedVclPtrInstance copy construction (where the hijacking
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to