[Libreoffice-commits] core.git: 3 commits - include/sfx2 registry/source sfx2/source vcl/source

Caolán McNamara caolanm at redhat.com
Wed Oct 29 09:03:33 PDT 2014


 include/sfx2/dinfdlg.hxx       |    5 +++--
 registry/source/reflcnst.hxx   |   23 ++++++++++++++---------
 sfx2/source/dialog/dinfdlg.cxx |   24 +++++++++++++++++++-----
 vcl/source/window/window.cxx   |    2 ++
 4 files changed, 38 insertions(+), 16 deletions(-)

New commits:
commit d8bc093dd07ceba42c9d722e7ccca4caedbd91e4
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Oct 29 16:00:18 2014 +0000

    need to initialize mnRefCnt
    
    all sorts of things crash, e.g. format->properties
    
    Change-Id: Ida4fb97dcdddd7adde4b98fa67b107a514eef615

diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index a8617ae..606a4f5 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -1187,6 +1187,8 @@ void Window::ImplInitWindowData( WindowType nType )
     // it will not *be* an OutputDevice
     mpOutputDevice = (OutputDevice*)this;
 
+    mnRefCnt = 0;
+
     mpWindowImpl = new WindowImpl( nType );
 
     meOutDevType        = OUTDEV_WINDOW;
commit f0ffe0c063c8fe32758d77c83f773821ac185ba0
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Oct 29 13:20:13 2014 +0000

    Resolves: fdo#85111 put a border around the custom properties box
    
    Change-Id: Ibdbfb4a88c1c75aaf5d33672d8639a9ea55afbac

diff --git a/include/sfx2/dinfdlg.hxx b/include/sfx2/dinfdlg.hxx
index a70b5ee..340681a 100644
--- a/include/sfx2/dinfdlg.hxx
+++ b/include/sfx2/dinfdlg.hxx
@@ -465,9 +465,10 @@ public:
 
 // class CustomPropertiesControl -----------------------------------------
 
-class CustomPropertiesControl : public VclVBox
+class CustomPropertiesControl : public vcl::Window
 {
 private:
+    VclVBox*                m_pVBox;
     HeaderBar*              m_pHeaderBar;
     VclHBox*                m_pBody;
     CustomPropertiesWindow* m_pPropertiesWin;
@@ -490,7 +491,7 @@ public:
                     GetCustomProperties() const
                         { return m_pPropertiesWin->GetCustomProperties(); }
     void    Init(VclBuilderContainer& rParent);
-    virtual void setAllocation(const Size &rAllocation) SAL_OVERRIDE;
+    virtual void Resize() SAL_OVERRIDE;
 };
 
 // class SfxCustomPropertiesPage -----------------------------------------
diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx
index d6a2a6e..b69a9d6 100644
--- a/sfx2/source/dialog/dinfdlg.cxx
+++ b/sfx2/source/dialog/dinfdlg.cxx
@@ -1985,7 +1985,8 @@ Sequence< beans::PropertyValue > CustomPropertiesWindow::GetCustomProperties() c
 }
 
 CustomPropertiesControl::CustomPropertiesControl(vcl::Window* pParent)
-    : VclVBox(pParent)
+    : Window(pParent, WB_HIDE | WB_CLIPCHILDREN | WB_TABSTOP | WB_DIALOGCONTROL | WB_BORDER)
+    , m_pVBox(NULL)
     , m_pHeaderBar(NULL)
     , m_pBody(NULL)
     , m_pPropertiesWin(NULL)
@@ -1996,8 +1997,9 @@ CustomPropertiesControl::CustomPropertiesControl(vcl::Window* pParent)
 
 void CustomPropertiesControl::Init(VclBuilderContainer& rBuilder)
 {
-    m_pHeaderBar = new HeaderBar(this, WB_BUTTONSTYLE | WB_BOTTOMBORDER);
-    m_pBody = new VclHBox(this);
+    m_pVBox = new VclVBox(this);
+    m_pHeaderBar = new HeaderBar(m_pVBox, WB_BUTTONSTYLE | WB_BOTTOMBORDER);
+    m_pBody = new VclHBox(m_pVBox);
     FixedText* pName = rBuilder.get<FixedText>("name");
     FixedText* pType = rBuilder.get<FixedText>("type");
     FixedText* pValue = rBuilder.get<FixedText>("value");
@@ -2012,6 +2014,12 @@ void CustomPropertiesControl::Init(VclBuilderContainer& rBuilder)
     set_expand(true);
     set_fill(true);
 
+    m_pVBox->set_hexpand(true);
+    m_pVBox->set_vexpand(true);
+    m_pVBox->set_expand(true);
+    m_pVBox->set_fill(true);
+    m_pVBox->Show();
+
     m_pBody->set_hexpand(true);
     m_pBody->set_vexpand(true);
     m_pBody->set_expand(true);
@@ -2048,9 +2056,14 @@ void CustomPropertiesControl::Init(VclBuilderContainer& rBuilder)
     m_pVertScroll->SetScrollHdl( aScrollLink );
 }
 
-void CustomPropertiesControl::setAllocation(const Size &rAllocation)
+void CustomPropertiesControl::Resize()
 {
-    VclVBox::setAllocation(rAllocation);
+    Window::Resize();
+
+    if (!m_pVBox)
+        return;
+
+    m_pVBox->SetSizePixel(GetSizePixel());
 
     bool bWidgetsResized = m_pPropertiesWin->InitControls( m_pHeaderBar, m_pVertScroll );
     sal_Int32 nScrollOffset = m_pPropertiesWin->GetLineHeight();
@@ -2075,6 +2088,7 @@ CustomPropertiesControl::~CustomPropertiesControl()
     delete m_pPropertiesWin;
     delete m_pBody;
     delete m_pHeaderBar;
+    delete m_pVBox;
 }
 
 IMPL_LINK( CustomPropertiesControl, ScrollHdl, ScrollBar*, pScrollBar )
commit 6484bf5f3f33a62670a29bf9a1f08bf62b64f145
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Oct 29 11:04:40 2014 +0000

    untaint registry data
    
    by using a byte-swapping pattern that coverity doesn't detect as such
    
    tested as a scratch coverity attempt with a smaller project which
    has a far higher allocation of coverity attempts per week :-)
    
    unsigned int readTaintedUINT32(const char* buffer)
    {
        unsigned int v = (
                (buffer[0] << 24) |
                (buffer[1] << 16) |
                (buffer[2] << 8)  |
                (buffer[3] << 0)
            );
    
        return v;
    }
    
    unsigned int readUntaintedUINT32(const char* p)
    {
        unsigned int v = *p++; v <<= 8;
        v |= *p++; v <<= 8;
        v |= *p++; v <<= 8;
        return v | *p;
    }
    
    void foo(char *buffer)
    {
        char *pOne = new char[readTaintedUINT32(buffer)];
    	// ^ coverity only reports this
        delete [] pOne;
    
        char *pTwo = new char[readUntaintedUINT32(buffer)];
    	// ^ and not this
        delete [] pTwo;
    }
    
    should silence
    
    coverity#1213371 Untrusted value as argument
    coverity#1213372 Untrusted value as argument
    coverity#1213373 Use of untrusted scalar value
    coverity#1213374 Use of untrusted scalar value
    coverity#1213376 Untrusted loop bound
    coverity#1213388 Use of untrusted scalar value
    coverity#1213389 Use of untrusted scalar value
    coverity#1213390 Use of untrusted scalar value
    coverity#1213423 Untrusted value as argument
    coverity#1213424 Untrusted value as argument
    coverity#1213425 Untrusted value as argument
    coverity#1213432 Untrusted value as argument
    coverity#1215304 Untrusted loop bound
    
    Change-Id: Ib8c7fc9a8e8b36ca227c76577d991c10df7dcd5a

diff --git a/registry/source/reflcnst.hxx b/registry/source/reflcnst.hxx
index b76475e..e9e3944 100644
--- a/registry/source/reflcnst.hxx
+++ b/registry/source/reflcnst.hxx
@@ -138,8 +138,12 @@ inline sal_uInt32 writeUINT16(sal_uInt8* buffer, sal_uInt16 v)
 
 inline sal_uInt32 readUINT16(const sal_uInt8* buffer, sal_uInt16& v)
 {
-    v = ((buffer[0] << 8) | (buffer[1] << 0));
-
+    //This is untainted data which comes from a controlled source
+    //so, using a byte-swapping pattern which coverity doesn't
+    //detect as such
+    //http://security.coverity.com/blog/2014/Apr/on-detecting-heartbleed-with-static-analysis.html
+    v = *buffer++; v <<= 8;
+    v |= *buffer;
     return sizeof(sal_uInt16);
 }
 
@@ -177,13 +181,14 @@ inline sal_uInt32 writeUINT32(sal_uInt8* buffer, sal_uInt32 v)
 
 inline sal_uInt32 readUINT32(const sal_uInt8* buffer, sal_uInt32& v)
 {
-    v = (
-            (buffer[0] << 24) |
-            (buffer[1] << 16) |
-            (buffer[2] << 8)  |
-            (buffer[3] << 0)
-        );
-
+    //This is untainted data which comes from a controlled source
+    //so, using a byte-swapping pattern which coverity doesn't
+    //detect as such
+    //http://security.coverity.com/blog/2014/Apr/on-detecting-heartbleed-with-static-analysis.html
+    v = *buffer++; v <<= 8;
+    v |= *buffer++; v <<= 8;
+    v |= *buffer++; v <<= 8;
+    v |= *buffer;
     return sizeof(sal_uInt32);
 }
 


More information about the Libreoffice-commits mailing list