[Libreoffice-commits] core.git: 4 commits - external/curl sal/osl vcl/win

Stephan Bergmann sbergman at redhat.com
Fri Oct 27 14:09:15 UTC 2017


 external/curl/UnpackedTarball_curl.mk |    6 ++++
 external/curl/clang-cl.patch.0        |   11 ++++++++
 sal/osl/w32/backtrace.cxx             |   19 ++++++++-------
 sal/osl/w32/file.cxx                  |   42 ++++++++++++++++++++++++----------
 vcl/win/app/salinst.cxx               |    2 -
 vcl/win/app/saltimer.cxx              |    2 -
 6 files changed, 60 insertions(+), 22 deletions(-)

New commits:
commit 540d5e00714feef70d896d8856dc33db694e6e4b
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Oct 27 16:08:15 2017 +0200

    loplugin:rangedforcopy (clang-cl)
    
    Change-Id: I468d951007089fefc235e245c3cb4baea4aa51f7

diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx
index 68ad7deb994d..40be2b1e4180 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -837,7 +837,7 @@ bool WinSalInstance::AnyInput( VclInputFlags nType )
                 ~VclInputFlags(VclInputFlags::KEYBOARD | VclInputFlags::TIMER);
 
             std::vector<MsgRange> aMsgRangeList( GetOtherRanges( nOtherType ) );
-            for ( MsgRange aRange : aMsgRangeList )
+            for ( MsgRange const & aRange : aMsgRangeList )
                 if ( PeekMessageW( &aMsg, nullptr, aRange.nStart,
                                    aRange.nEnd, PM_NOREMOVE | PM_NOYIELD ) )
                     return true;
commit 6f95909b3351451f96fb40ef6b2c21580d7a4c64
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Oct 27 16:07:30 2017 +0200

    loplugin:redundantcast (clang-cl)
    
    Change-Id: Ib6b314cc94d57ef9a643c14440427a38a9de15fe

diff --git a/vcl/win/app/saltimer.cxx b/vcl/win/app/saltimer.cxx
index 9c67e841956e..d23c7344ef31 100644
--- a/vcl/win/app/saltimer.cxx
+++ b/vcl/win/app/saltimer.cxx
@@ -133,7 +133,7 @@ void CALLBACK SalTimerProc(PVOID data, BOOLEAN)
 {
     __try
     {
-        WinSalTimer *pTimer = reinterpret_cast<WinSalTimer*>( data );
+        WinSalTimer *pTimer = static_cast<WinSalTimer*>( data );
         BOOL const ret = PostMessageW(
             GetSalData()->mpInstance->mhComWnd, SAL_MSG_TIMER_CALLBACK,
             static_cast<WPARAM>(pTimer->GetNextEventVersion()), 0 );
commit 8959043f82e1d00abead9cbd809138d4f6521b14
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Oct 27 16:06:07 2017 +0200

    -Werror,-Wtautological-constant-compare (clang-cl)
    
    ...fixed similarly to recent fixes to sal/osl/unx/file.cxx
    
    Change-Id: I2c82366095e156cd0085a8f60f54f8c822655dcc

diff --git a/sal/osl/w32/backtrace.cxx b/sal/osl/w32/backtrace.cxx
index b8866322e940..408bd655e777 100644
--- a/sal/osl/w32/backtrace.cxx
+++ b/sal/osl/w32/backtrace.cxx
@@ -26,13 +26,19 @@
 
 #include "backtraceasstring.hxx"
 
+namespace {
+
+template<typename T> T clampToULONG(T n) {
+    auto const maxUlong = std::numeric_limits<ULONG>::max();
+    return n > maxUlong ? static_cast<T>(maxUlong) : n;
+}
+
+}
+
 OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth)
 {
     assert(maxDepth != 0);
-    auto const maxUlong = std::numeric_limits<ULONG>::max();
-    if (maxDepth > maxUlong) {
-        maxDepth = static_cast<sal_uInt32>(maxUlong);
-    }
+    maxDepth = clampToULONG(maxDepth);
 
     OUStringBuffer aBuf;
 
@@ -71,10 +77,7 @@ OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth)
 std::unique_ptr<sal::BacktraceState> sal::backtrace_get(sal_uInt32 maxDepth)
 {
     assert(maxDepth != 0);
-    auto const maxUlong = std::numeric_limits<ULONG>::max();
-    if (maxDepth > maxUlong) {
-        maxDepth = static_cast<sal_uInt32>(maxUlong);
-    }
+    maxDepth = clampToULONG(maxDepth);
 
     HANDLE hProcess = GetCurrentProcess();
     SymInitialize( hProcess, nullptr, true );
diff --git a/sal/osl/w32/file.cxx b/sal/osl/w32/file.cxx
index e64e5b306277..7c0b6674c23f 100644
--- a/sal/osl/w32/file.cxx
+++ b/sal/osl/w32/file.cxx
@@ -774,6 +774,14 @@ oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle)
     return result;
 }
 
+namespace {
+
+//coverity[result_independent_of_operands]
+template<typename T> bool exceedsMaxSIZE_T(T n)
+{ return n > std::numeric_limits< SIZE_T >::max(); }
+
+}
+
 oslFileError SAL_CALL osl_mapFile(
     oslFileHandle Handle,
     void**        ppAddr,
@@ -800,8 +808,7 @@ oslFileError SAL_CALL osl_mapFile(
         return osl_File_E_INVAL;
     *ppAddr = nullptr;
 
-    static SIZE_T const nLimit = std::numeric_limits< SIZE_T >::max();
-    if (uLength > nLimit)
+    if (exceedsMaxSIZE_T(uLength))
         return osl_File_E_OVERFLOW;
     SIZE_T const nLength = sal::static_int_cast< SIZE_T >(uLength);
 
@@ -919,6 +926,19 @@ oslFileError SAL_CALL osl_writeFile(
     return result;
 }
 
+LONGLONG const g_limit_longlong = std::numeric_limits< LONGLONG >::max();
+
+namespace {
+
+//coverity[result_independent_of_operands]
+template<typename T> bool exceedsMaxLONGLONG(T n)
+{ return n > g_limit_longlong; }
+
+template<typename T> bool exceedsMinLONGLONG(T n)
+{ return n < std::numeric_limits<LONGLONG>::min(); }
+
+}
+
 oslFileError SAL_CALL osl_readFileAt(
     oslFileHandle Handle,
     sal_uInt64    uOffset,
@@ -933,8 +953,7 @@ oslFileError SAL_CALL osl_readFileAt(
     if ((pImpl->m_state & FileHandle_Impl::STATE_SEEKABLE) == 0)
         return osl_File_E_SPIPE;
 
-    static sal_uInt64 const g_limit_longlong = std::numeric_limits< LONGLONG >::max();
-    if (g_limit_longlong < uOffset)
+    if (exceedsMaxLONGLONG(uOffset))
         return osl_File_E_OVERFLOW;
     LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset);
 
@@ -957,8 +976,7 @@ oslFileError SAL_CALL osl_writeFileAt(
     if ((pImpl->m_state & FileHandle_Impl::STATE_SEEKABLE) == 0)
         return osl_File_E_SPIPE;
 
-    static sal_uInt64 const g_limit_longlong = std::numeric_limits< LONGLONG >::max();
-    if (g_limit_longlong < uOffset)
+    if (exceedsMaxLONGLONG(uOffset))
         return osl_File_E_OVERFLOW;
     LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset);
 
@@ -996,8 +1014,7 @@ oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_
     if ((!pImpl) || !IsValidHandle(pImpl->m_hFile))
         return osl_File_E_INVAL;
 
-    static sal_Int64 const g_limit_longlong = std::numeric_limits< LONGLONG >::max();
-    if (g_limit_longlong < uOffset)
+    if (exceedsMaxLONGLONG(uOffset) || exceedsMinLONGLONG(uOffset))
         return osl_File_E_OVERFLOW;
     LONGLONG nPos = 0, nOffset = sal::static_int_cast< LONGLONG >(uOffset);
 
@@ -1013,7 +1030,8 @@ oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_
             nPos = sal::static_int_cast< LONGLONG >(pImpl->getPos());
             if ((nOffset < 0) && (nPos < -1*nOffset))
                 return osl_File_E_INVAL;
-            if (g_limit_longlong < nPos + nOffset)
+            assert(nPos >= 0);
+            if (nOffset > g_limit_longlong - nPos)
                 return osl_File_E_OVERFLOW;
             break;
 
@@ -1021,7 +1039,8 @@ oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_
             nPos = sal::static_int_cast< LONGLONG >(pImpl->getSize());
             if ((nOffset < 0) && (nPos < -1*nOffset))
                 return osl_File_E_INVAL;
-            if (g_limit_longlong < nPos + nOffset)
+            assert(nPos >= 0);
+            if (nOffset > g_limit_longlong - nPos)
                 return osl_File_E_OVERFLOW;
             break;
 
@@ -1053,8 +1072,7 @@ oslFileError SAL_CALL osl_setFileSize(oslFileHandle Handle, sal_uInt64 uSize)
     if ((pImpl->m_state & FileHandle_Impl::STATE_WRITEABLE) == 0)
         return osl_File_E_BADF;
 
-    static sal_uInt64 const g_limit_longlong = std::numeric_limits< LONGLONG >::max();
-    if (g_limit_longlong < uSize)
+    if (exceedsMaxLONGLONG(uSize))
         return osl_File_E_OVERFLOW;
 
     FileHandle_Impl::Guard lock(&(pImpl->m_mutex));
commit c1d0b19b43767e3ead431357e91949e1f548283e
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Oct 27 16:03:02 2017 +0200

    external/curl: Work around clang-cl not knowing /FD
    
    ("IDE Minimal Rebuild", according to
    <https://msdn.microsoft.com/en-us/library/6ce2bkt7.aspx>)
    
    Change-Id: I1b549c50bea4285bc6c89302f757f2e7e0bf1784

diff --git a/external/curl/UnpackedTarball_curl.mk b/external/curl/UnpackedTarball_curl.mk
index b65b3d5cb300..1cdb64c0bca2 100644
--- a/external/curl/UnpackedTarball_curl.mk
+++ b/external/curl/UnpackedTarball_curl.mk
@@ -30,4 +30,10 @@ $(eval $(call gb_UnpackedTarball_add_patches,curl,\
 ))
 endif
 
+ifeq ($(OS)-$(COM_IS_CLANG),WNT-TRUE)
+$(eval $(call gb_UnpackedTarball_add_patches,curl, \
+    external/curl/clang-cl.patch.0 \
+))
+endif
+
 # vim: set noet sw=4 ts=4:
diff --git a/external/curl/clang-cl.patch.0 b/external/curl/clang-cl.patch.0
new file mode 100755
index 000000000000..2f7fe567460c
--- /dev/null
+++ b/external/curl/clang-cl.patch.0
@@ -0,0 +1,11 @@
+--- winbuild/MakefileBuild.vc
++++ winbuild/MakefileBuild.vc
+@@ -60,7 +60,7 @@
+ !ELSE
+ CC_NODEBUG  = $(CC) /O2 /DNDEBUG
+ CC_DEBUG    = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd
+-CFLAGS      = /I. /I ../lib /I../include /nologo /W4 /wd4127 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL $(SOLARINC)
++CFLAGS      = /I. /I ../lib /I../include /nologo /W4 /wd4127 /EHsc /DWIN32 /c /DBUILDING_LIBCURL $(SOLARINC)
+ !ENDIF
+ 
+ LFLAGS     = /nologo /machine:$(MACHINE)


More information about the Libreoffice-commits mailing list