[Libreoffice-commits] core.git: 2 commits - compilerplugins/clang sal/osl svx/source vcl/workben
Stephan Bergmann
sbergman at redhat.com
Mon Nov 2 07:41:43 PST 2015
compilerplugins/clang/badstatics.cxx | 57 +++++++++++++++++++++++++++++++++++
sal/osl/unx/file_url.cxx | 9 ++++-
svx/source/form/filtnav.cxx | 30 +++---------------
vcl/workben/vcldemo.cxx | 2 -
4 files changed, 71 insertions(+), 27 deletions(-)
New commits:
commit 3e7afe0037d6d165abbeb32d4e5fb68ac8a9aeea
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Mon Nov 2 16:37:29 2015 +0100
Clean up osl_getSystemPathFromFileURL handling of relative //... URLs
(i.e., starting with an authority component); treating input starting with a
single slash (i.e., starting with an absolute path component) as a relative URL
instead of as an absolute pathname would cause e.g. CppunitTest_sal_osl_file to
fail
Change-Id: Ie340881974c5e9451ab7e0a9bfb21176b8f5666d
diff --git a/sal/osl/unx/file_url.cxx b/sal/osl/unx/file_url.cxx
index 45e96e7..1d8c1fd 100644
--- a/sal/osl/unx/file_url.cxx
+++ b/sal/osl/unx/file_url.cxx
@@ -88,8 +88,13 @@ oslFileError SAL_CALL osl_getSystemPathFromFileURL( rtl_uString *ustrFileURL, rt
sal_Unicode encodedSlash[3] = { '%', '2', 'F' };
- /* a valid file url may not start with '/' */
- if( ( 0 == ustrFileURL->length ) || ( '/' == ustrFileURL->buffer[0] ) )
+ // For compatibility with assumptions in other parts of the code base,
+ // assume that anything starting with a slash is a system path instead of a
+ // (relative) file URL (except if it starts with two slashes, in which case
+ // it is a relative URL with an authority component):
+ if (ustrFileURL->length == 0
+ || (ustrFileURL->buffer[0] == '/'
+ && (ustrFileURL->length == 1 || ustrFileURL->buffer[1] != '/')))
{
return osl_File_E_INVAL;
}
commit bf18f1b3535dd17f9bf584cab15ee6a7fd431257
Author: Michael Stahl <mstahl at redhat.com>
Date: Fri Oct 30 16:05:42 2015 +0100
compilerplugins: add "badstatics" to detect abuse of VCL Bitmaps
VCL Image/Bitmap/BitmapEx instances must not have static life-time
because then they will be destructed after DeInitVCL() and that
likely segfaults.
Change-Id: I3ff8d32de729c971b190028094cb4efe206395e2
diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx
new file mode 100644
index 0000000..136e1db
--- /dev/null
+++ b/compilerplugins/clang/badstatics.cxx
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "plugin.hxx"
+
+namespace {
+
+class BadStatics
+ : public clang::RecursiveASTVisitor<BadStatics>
+ , public loplugin::Plugin
+{
+
+public:
+ explicit BadStatics(InstantiationData const& rData) : Plugin(rData) {}
+
+ void run() override {
+ if (compiler.getLangOpts().CPlusPlus) { // no non-trivial dtors in C
+ TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
+ }
+ }
+
+ bool VisitVarDecl(VarDecl const*const pVarDecl)
+ {
+ if (ignoreLocation(pVarDecl)) {
+ return true;
+ }
+
+ if (pVarDecl->hasGlobalStorage()) {
+ auto const type(pVarDecl->getType().getUnqualifiedType().getCanonicalType().getAsString());
+ if ( type == "class Image"
+ || type == "class Bitmap"
+ || type == "class BitmapEx"
+ )
+ {
+ report(DiagnosticsEngine::Warning,
+ "bad static variable causes crash on shutdown",
+ pVarDecl->getLocation())
+ << pVarDecl->getSourceRange();
+ }
+ }
+
+ return true;
+ }
+
+};
+
+loplugin::Plugin::Registration<BadStatics> X("badstatics");
+
+} // namespace
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/form/filtnav.cxx b/svx/source/form/filtnav.cxx
index 8bb80d3..f33c0d1 100644
--- a/svx/source/form/filtnav.cxx
+++ b/svx/source/form/filtnav.cxx
@@ -156,14 +156,8 @@ TYPEINIT1(FmFormItem, FmParentData);
Image FmFormItem::GetImage() const
{
- static Image aImage;
-
- if (!aImage)
- {
- ImageList aNavigatorImages( SVX_RES( RID_SVXIMGLIST_FMEXPL ) );
- aImage = aNavigatorImages.GetImage( RID_SVXIMG_FORM );
- }
- return aImage;
+ ImageList aNavigatorImages( SVX_RES( RID_SVXIMGLIST_FMEXPL ) );
+ return aNavigatorImages.GetImage( RID_SVXIMG_FORM );
}
@@ -187,14 +181,8 @@ FmFilterItem* FmFilterItems::Find( const ::sal_Int32 _nFilterComponentIndex ) co
Image FmFilterItems::GetImage() const
{
- static Image aImage;
-
- if (!aImage)
- {
- ImageList aNavigatorImages( SVX_RES( RID_SVXIMGLIST_FMEXPL ) );
- aImage = aNavigatorImages.GetImage( RID_SVXIMG_FILTER );
- }
- return aImage;
+ ImageList aNavigatorImages( SVX_RES( RID_SVXIMGLIST_FMEXPL ) );
+ return aNavigatorImages.GetImage( RID_SVXIMG_FILTER );
}
@@ -213,14 +201,8 @@ FmFilterItem::FmFilterItem( FmFilterItems* pParent,
Image FmFilterItem::GetImage() const
{
- static Image aImage;
-
- if (!aImage)
- {
- ImageList aNavigatorImages( SVX_RES( RID_SVXIMGLIST_FMEXPL ) );
- aImage = aNavigatorImages.GetImage( RID_SVXIMG_FIELD );
- }
- return aImage;
+ ImageList aNavigatorImages( SVX_RES( RID_SVXIMGLIST_FMEXPL ) );
+ return aNavigatorImages.GetImage( RID_SVXIMG_FIELD );
}
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 03493cd..1e7c5cc 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -650,7 +650,7 @@ public:
// be done with a shader / gradient
static void SimulateBorderStretch(OutputDevice &rDev, const Rectangle& r)
{
- static BitmapEx aPageShadowMask("sw/res/page-shadow-mask.png");
+ BitmapEx aPageShadowMask("sw/res/page-shadow-mask.png");
BitmapEx aRight(aPageShadowMask);
sal_Int32 nSlice = (aPageShadowMask.GetSizePixel().Width() - 3) / 4;
More information about the Libreoffice-commits
mailing list