summaryrefslogtreecommitdiff
path: root/include/o3tl
AgeCommit message (Collapse)Author
2019-06-04fix crash in lru_map/SalBitmap on shutdownNoel Grandin
When we shut down, we destroy the various caches, in the process of which SalBitmap calls back into it's owning cache, causing a SIGSEGV. Found while loading files from tdf#83426 Change-Id: I53db1621a0fdb75a8e66582662b0e2666499192b Reviewed-on: https://gerrit.libreoffice.org/73387 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> (cherry picked from commit c27e92b29efe573e2cda9844e9ca38965f502443) Reviewed-on: https://gerrit.libreoffice.org/73415
2019-05-16tdf#125254 Performance: A spreadsheet opens too slow, part1Noel Grandin
This takes the opening time from 55s to 48s for me. Change-Id: Ia60fff33e9948e0bd6906c82b48aa30f8b2551bb Reviewed-on: https://gerrit.libreoffice.org/72394 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-05-09add missing include guardsLuboš Luňák
Change-Id: I337c0f567112f95e2a1d762e511d5b632dd2892f Reviewed-on: https://gerrit.libreoffice.org/71997 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
2019-03-18Adapt o3tl::span to updated C++2a std::spanStephan Bergmann
...where index_type has changed from ptrdiff_t to size_t, see <https:// github.com/cplusplus/draft/commit/7f2493e2e2d34b42a6c12c8806e536d4feb3aee3> "P1227R2 Signed ssize() functions, unsigned size() functions". Ideally, ece27693ba52417bc4b68045f5544a5cc43299dc "Adapt to C++2a std::span<>::index_type being unsigned size_t" could be simplified now to use std::size_t, but there may be build environments that include a C++2a <span> that hasn't been adapted to P1227R2 yet. Change-Id: I7bfc0da65d415ef06e94d95b5f62030aeb8b35f6 Reviewed-on: https://gerrit.libreoffice.org/69391 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-03-07log nice exception messages whereever possibleNoel Grandin
Change-Id: Idd125c18bee1a39b9ea8cc4f8c55cddfd37c33e1 Reviewed-on: https://gerrit.libreoffice.org/68579 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-03-05Introduce o3tl::underlyingEnumValueStephan Bergmann
Change-Id: I6554eb86326159b0da707539f45c411f61c0f3de Reviewed-on: https://gerrit.libreoffice.org/68761 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-02-25Drop include/o3tl/make_unique.hxxGabor Kelemen
In favor of std::make_unique Change-Id: I0428076a10fb7b61c5add994c9970661b375b82c Reviewed-on: https://gerrit.libreoffice.org/68254 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-02-01Introduce O3TL_UNREACHABLE as a better alternative to assert(false)Stephan Bergmann
The code in sw/source/core/fields/reffld.cxx had turned into whack-a-mole: MSVC needed the unreachable default:assert(false); to fall through to init some vars to avoid C4701 ("potentially uninitialized local variable"). But Clang (with !NDEBUG, and an implementation of assert marked as noreturn) reported that as "fallthrough annotation in unreachable code", requiring the #ifdef NDEBUG guards to be added. And now clang-cl (also with !NDEBUG, but with the MSVC implementation of assert apparently not marked as noreturn) complained about "unannotated fall-through between switch labels", which wold require the #ifdef NDEBUG guards to be removed again. O3TL_UNREACHABLE (inspired by LLVM's llvm_unreachable and underyling LLVM_BUILTIN_UNREACHABLE) hopefully improves on that for all compilers involved. For non-MSVC (i.e., Clang or GCC) it assumes that __builtin_unreachable is supported (which it is at least for GCC 7, which is our current baseline per README.md). Change-Id: I4474f95664d97c3d0e506bab90f80d5ab252ec6e Reviewed-on: https://gerrit.libreoffice.org/67232 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-01-13array_view was changed to span in upcoming C++20Stephan Bergmann
...see <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0122r7.pdf> "span: bounds-safe views for sequences of objects". o3tl::span is still an incomplete approximation of std::span; removed those o3tl::array_view members that are not present in std::span (and were not used in the code). Relies on C++17 __has_include to use standard <span> where available (e.g., in LLVM 7 libc++). Change-Id: I82a7e246b61b2456fa6183025d25eec4121ad3c9 Reviewed-on: https://gerrit.libreoffice.org/66215 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-01-11Drop o3tl/clamp.hxx, use C++17 std::clamp insteadStephan Bergmann
Change-Id: I5043c787dcc3b78bc7fdff130564801194e39f46 Reviewed-on: https://gerrit.libreoffice.org/66177 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-01-11Drop o3tl/string_view.hxxStephan Bergmann
...now that all of its uses have been replaced with C++17 <string_view>. The LO-specific o3tl::basic_string_view ctors with OString and OUString params have meanwhile been replaced with OString and OUString conversion functions (in dac7be50cff94e0c34cdca5ac7e35c19685c40c1 "o3tl::string_view -> std::string_view (in configmgr)"), the ctor with OUStringLiteral turned out to be no longer(?) needed anyway, and the LO-specific o3tl::toOUString has meanwhile been replaced with an OUString ctor with std::u16string_view param (in 6856da30665705be6380e84cf55de954c41f15d1 "o3tl::string_view -> std::string_view (in embedserv)"). Change-Id: Ie5215b07e2387560fb7e94de8b5a963241539c64 Reviewed-on: https://gerrit.libreoffice.org/66144 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-16Fix o3tl::string_view streaming operator <<Stephan Bergmann
(The unnecessary os.setstate(std::ios_base::failbit) was due to a misreading of C++17 [ostream.formatted.reqmts]/1.) Change-Id: I7d8285230cb316c7af45c76029e9629517d05d56 Reviewed-on: https://gerrit.libreoffice.org/65217 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-07HAVE_CXX14_CONSTEXPR is always true nowStephan Bergmann
...but for safety, leave the configure.ac check in for some longer. o3tl::array_view::max_size (include/o3tl/array_view.hxx) and o3tl::basic_string_view::max_size (include/o3tl/string_view.hxx) started to produce loplugin:staticmethods warnings, which I silenced by /not/ making the functions static. Those classes are meant to be temporary drop-in replacements for standard classes (std::span slated for C++20, prev. std::array_view; and std::basic_string_view, resp.), so should have the same behavior as their standard counterparts (and making the functions static would likely cause loplugin:staticaccess warnings at call sites). Change-Id: If21674dbf02886f453ca447544e37b184df5a25e Reviewed-on: https://gerrit.libreoffice.org/64768 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-06Remove obsolete GCC version checksStephan Bergmann
...after <https://gerrit.libreoffice.org/63951> "Bump (Linux) GCC baseline to 7.0.0". (In some cases, those checks now need to check for __clang__, which was implicitly covered in the past by Clang consistently reporting to be GCC 4.2.1.) Change-Id: I860fef8c4ca41c22a7541f0fb2d34b37d1d69bed Reviewed-on: https://gerrit.libreoffice.org/63952 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-11-30Remove obsolete _MSC_VER checksStephan Bergmann
...after 206b8c4ae320d7d8614f21800d8f77fa29f8f5ff "On Windows, check for at least Visual Studio 2017 version 15.7" Change-Id: I38ee86e1649bbdc828a7e328f2dbbac0dc163c8a Reviewed-on: https://gerrit.libreoffice.org/64250 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-10-24remove more rtl::OUString and OString prefixesNoel Grandin
which seem to have snuck back in since the great rounds of removals. Change-Id: I85f7f5f4801c0b48dae8b50f51f83595b286d6a1 Reviewed-on: https://gerrit.libreoffice.org/62229 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-10-06Convert ImplFontCache to use o3tl::lru_mapJan-Marek Glogowski
We still do our own cleanup of the LRU map, as we can't drop any fonts in use. Change-Id: I8ec5c6ce8f80893635621357e9085950e7010f5b Reviewed-on: https://gerrit.libreoffice.org/61455 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2018-10-06Add a glyph-bound-rect cache to the font cacheJan-Marek Glogowski
This way the font cache can correctly invalidate the cached glyph rects when a font is dropped from the cache. Change-Id: I050866099742334f01cac1b872228a017ddb5e9b Reviewed-on: https://gerrit.libreoffice.org/61371 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2018-10-06loplugin:useuniqueptr in SwHTMLPosFlyFramesNoel Grandin
and add a new method erase_extract to o3tl::sorted_vector, otherwise there is no decent way to extract an element from such a vector without freeing it. Change-Id: I769782c04a54a2d7433e8349c99134f997a54689 Reviewed-on: https://gerrit.libreoffice.org/61345 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-10-06lru_map: fix std::move insertJan-Marek Glogowski
After the move the std::pair is invalid. That caused invalid iterators on lookups - hard to debug... Also adds an assertion to warn if size of map and list differ. Change-Id: Ib987d47963d5e1009d64a96dcdd588a0bc27cd77 Reviewed-on: https://gerrit.libreoffice.org/61451 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2018-10-04loplugin:useuniqueptr in SetGetExpFieldsNoel Grandin
and a couple more utility methods to o3tl::sorted_vector to make this easier Change-Id: Iebbbb8899b67fffa1ac98ae46b7fa70a7e35f866 Reviewed-on: https://gerrit.libreoffice.org/61344 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-09-19implement find(T*) for o3tl::sorted_vector when it contains unique_ptr<T>Noel Grandin
and add some unit tests Change-Id: I9a01c9fa2fbbf3a553663a980ee6e958f9819645 Reviewed-on: https://gerrit.libreoffice.org/60737 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-09-06make SwWriteTableRows be a vector of std::unique_ptrNoel Grandin
and update o3tl::sorted_vector to handle that Change-Id: I11a9ec3ec09f835cbd7e49ccda133b9f210d761e Reviewed-on: https://gerrit.libreoffice.org/59931 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-08-2932-bit Clang trunk (towards Clang 9) still doesn't have __mulodi4Stephan Bergmann
Change-Id: I7579ff88d34c931a51c820b53960a281e6e3678e Reviewed-on: https://gerrit.libreoffice.org/59763 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-08-15RTF picture sizes are 32-bit signedStephan Bergmann
...not 16-bit unsigned. Word2007RTFSpec9.docx states "A small number of control words take values in the range −2,147,483,648 to 2,147,483,647 (32-bit signed integer)." and for \picwN, \pichN, \picwgoalN, and \pichgoalN it states "The N argument is a long integer." This was found with Clang's new -fsanitize=implicit-conversion during CppunitTest_writerfilter_rtftok, where writerfilter/qa/cppunittests/rtftok/data/pass/TCI-TN65GP-DDRHDLL-partial.rtf contains "\pich81306": > Testing file:///home/sbergman/lo/core/writerfilter/qa/cppunittests/rtftok/data/pass/TCI-TN65GP-DDRHDLL-partial.rtf: [...] > writerfilter/source/rtftok/rtfdispatchvalue.cxx:770:48: runtime error: implicit conversion from type 'int' of value 81306 (32-bit, signed) to type 'sal_uInt16' (aka 'unsigned short') changed the value to 15770 (16-bit, unsigned) > #0 in writerfilter::rtftok::RTFDocumentImpl::dispatchValue(writerfilter::rtftok::RTFKeyword, int) at writerfilter/source/rtftok/rtfdispatchvalue.cxx:770:48 (instdir/program/libwriterfilterlo.so +0xb96f2f) > #1 in writerfilter::rtftok::RTFTokenizer::dispatchKeyword(rtl::OString const&, bool, int) at writerfilter/source/rtftok/rtftokenizer.cxx:311:29 (instdir/program/libwriterfilterlo.so +0xd86c93) > #2 in writerfilter::rtftok::RTFTokenizer::resolveKeyword() at writerfilter/source/rtftok/rtftokenizer.cxx:243:12 (instdir/program/libwriterfilterlo.so +0xd84b06) > #3 in writerfilter::rtftok::RTFTokenizer::resolveParse() at writerfilter/source/rtftok/rtftokenizer.cxx:123:27 (instdir/program/libwriterfilterlo.so +0xd8299a) > #4 in writerfilter::rtftok::RTFDocumentImpl::resolve(writerfilter::Stream&) at writerfilter/source/rtftok/rtfdocumentimpl.cxx:786:27 (instdir/program/libwriterfilterlo.so +0xbf03bd) > #5 in RtfFilter::filter(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) at writerfilter/source/filter/RtfFilter.cxx:144:20 (instdir/program/libwriterfilterlo.so +0x132d911) > #6 in RtfTest::load(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int) at writerfilter/qa/cppunittests/rtftok/testrtftok.cxx:58:27 (workdir/LinkTarget/CppunitTest/libtest_writerfilter_rtftok.so +0x15c6e) > #7 in test::FiltersTest::recursiveScan(test::filterStatus, rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) at unotest/source/cpp/filters-test.cxx:130:20 (workdir/LinkTarget/CppunitTest/../Library/libunotest.so +0x5724c) > #8 in test::FiltersTest::testDir(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) at unotest/source/cpp/filters-test.cxx:155:5 (workdir/LinkTarget/CppunitTest/../Library/libunotest.so +0x57ec9) > #9 in RtfTest::test() at writerfilter/qa/cppunittests/rtftok/testrtftok.cxx:78:5 (workdir/LinkTarget/CppunitTest/libtest_writerfilter_rtftok.so +0x16214) (Needs to add o3tl::clamp as a compatibility wrapper for C++17 std::clamp.) Change-Id: I515e70a435c2585777062fd5a27d1de8ddbe1b74 Reviewed-on: https://gerrit.libreoffice.org/59038 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins
2018-07-30Add missing sal/log.hxx headersGabor Kelemen
rtl/string.hxx and rtl/ustring.hxx both unnecessarily #include <sal/log.hxx> (and don't make use of it themselves), but many other files happen to depend on it. This is a continuation of commit 6ff2d84ade299cb3d14d4110e4cf1a4b8070c030 to be able to remove those unneeded includes. This commit adds missing headers to every file found by: grep -FwL sal/log.hxx $(git grep -Elw 'SAL_INFO|SAL_INFO_IF|SAL_WARN|SAL_WARN_IF|SAL_DETAIL_LOG_STREAM|SAL_WHERE|SAL_STREAM|SAL_DEBUG') to directories from filter to jvmfwk Change-Id: I2a73d63f2aaef5f26d7d08957daaa8a30b412ac5 Reviewed-on: https://gerrit.libreoffice.org/58204 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
2018-07-26o3tl: avoid -Werror=deprecated-copy (GCC trunk towards GCC 9)Stephan Bergmann
...by removing explicitly user-provided functions that do the same as their implicitly-defined counterparts, but may prevent implicitly declared copy functions from being defined as non-deleted in the future Change-Id: If3430e23fff7bb0da12ae20579696869bdf9b3d8 Reviewed-on: https://gerrit.libreoffice.org/58082 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-06-04o3tl: add more strong_int operatorsMichael Stahl
Change-Id: Ibb0f883353b6d172275744eaa59d27ba39930623 Reviewed-on: https://gerrit.libreoffice.org/55264 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
2018-05-25no need declare these tag structs separatelyNoel Grandin
Change-Id: I00f336ee4eced431155c79bee6e2373e145ae95c Reviewed-on: https://gerrit.libreoffice.org/54780 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-05-17New o3tl::temporary to simplify calls of std::modfStephan Bergmann
...that ignore the out-parameter integral part Change-Id: I05f07c1a8909023232f8aecf75ea5541d4eb81ca Reviewed-on: https://gerrit.libreoffice.org/54474 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Stephan Bergmann <sbergman@redhat.com>
2018-04-11improve commit 95eb921ec06ee7Noel Grandin
"tdf#108608 more Draw text editing responsiveness fixes" lru_map is fine on Windows, was a bug in the new clear method I added. Change-Id: I27565675dfe0f57e2ba3c3e0c50297770761dc6a Reviewed-on: https://gerrit.libreoffice.org/52728 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-04-11tdf#108608 more Draw text editing responsiveness fixesNoel Grandin
Turns out Windows is rather slow at at calculating glyph outlines (compared to Linux), I'm guessing it does no caching at all, so just add our own little cache. I tried to use o3tl::lru_map here, but it crashes under MSVC2015. Change-Id: I78d2a787ec8f734fa821f41f13236771efa1c8d4 Reviewed-on: https://gerrit.libreoffice.org/52623 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-02-19ofz#6432 bad-castCaolán McNamara
ofz#6433 head-use-after-free ofz#6435 bad-cast Change-Id: Ic43edbab68d96e852039c3247853074180fd5091 Reviewed-on: https://gerrit.libreoffice.org/49984 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-02-07ofz: Pos2Page returns true on same value that returned false previouslyCaolán McNamara
a failed position returns false, but stays at the failed position, so next time its called without moving it then it returns true store what we return for a given position for reuse if the position doesn't change Change-Id: I404c65ac89eb6f5c867f62a62028b87effdbcbf8 Reviewed-on: https://gerrit.libreoffice.org/49308 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-02-01o3tl: MSVC: pragma warning: make more specific, remove obsoleteMike Kaganski
Change-Id: Id9d038d50d5b6335a2f354c759b2c1e5dd413cec Reviewed-on: https://gerrit.libreoffice.org/49037 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2018-01-29Fix typosAndrea Gelmini
Change-Id: I4f15a41b7a67abe9f2c45b6004948decd58a8360 Reviewed-on: https://gerrit.libreoffice.org/48832 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2018-01-28ofz#5621 Integer-overflowCaolán McNamara
Change-Id: Ie0a7c29428e686e5c480997b84b8d12e5be4539f Reviewed-on: https://gerrit.libreoffice.org/48790 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-01-19Remove include of config_global.h from sal/config.hStephan Bergmann
(where it is not actually needed), and instead include it where needed Change-Id: I107f8d4002d3001393b89834dd30a30b0c53a792 Reviewed-on: https://gerrit.libreoffice.org/48152 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Stephan Bergmann <sbergman@redhat.com>
2018-01-12More loplugin:cstylecast: o3tlStephan Bergmann
auto-rewrite with <https://gerrit.libreoffice.org/#/c/47798/> "Enable loplugin:cstylecast for some more cases" plus solenv/clang-format/reformat-formatted-files Change-Id: I7cb2c6ff2421d615599d178dc6eb3d62dd1becf7
2017-12-11o3tl: 32-bit clang 4.0.1 fails with undefined reference to `__mulodi4'Michael Stahl
... so prevent it from using __builtin_mul_overflow(). Change-Id: Id716f88abb0385701b6df42353b663479abfd496
2017-10-27ofz#3819 Integer-overflowCaolán McNamara
Change-Id: Ic45692152b039c0ee2f5659d7739c3a2517c5e83 Reviewed-on: https://gerrit.libreoffice.org/43876 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-10-26array_view std::hash override should be constNoel Grandin
Change-Id: I8ffdf86e98e261b337cfa81b1be0cb64539c9a9c Reviewed-on: https://gerrit.libreoffice.org/43871 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-26Fix o3tl::saturating_add for negative bStephan Bergmann
Change-Id: I665f6c2f94b6c03d6fb5136fff3054ad6f0ca962
2017-10-25improve o3tl::enumarray const-nessNoel Grandin
Change-Id: I7b0d10b024edf604a7dea0e3b1399073f4bcba92 Reviewed-on: https://gerrit.libreoffice.org/43773 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-25add checked_subCaolán McNamara
Change-Id: I440cd18c249f38194cfd3dfd4a1fc4b7f80858d6 Reviewed-on: https://gerrit.libreoffice.org/43810 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-10-25add checked_addCaolán McNamara
Change-Id: I10cba898bba528f5f1bfbd583e27a6821c789ab9 Reviewed-on: https://gerrit.libreoffice.org/43779 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-10-21coverity#1401307 document checked 'Uncaught exception'Caolán McNamara
markup std::unique_ptr where coverity warns a dtor might throw exceptions which won't throw in practice, or where std::terminate is an acceptable response if they do Change-Id: Icc99cdecf8d8b011e599574f0a05b59efd1c65c2 Reviewed-on: https://gerrit.libreoffice.org/41561 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-10-06Fix -fsanitize=signed-integer-overflowStephan Bergmann
during CppunitTest_sw_uiwriter (see below). vmiklos suggested making that addition saturating, so I introduced o3tl::saturating_add for that. <https://ci.libreoffice.org/job/lo_ubsan/684/console>: > /sw/source/core/layout/sectfrm.cxx:1964:23: runtime error: signed integer overflow: 6203 + 9223372036854774315 cannot be represented in type 'long' > #0 0x2b65623b9a65 in SwSectionFrame::Grow_(long, bool) /sw/source/core/layout/sectfrm.cxx:1964:23 > #1 0x2b65625d6f51 in SwFrame::Grow(long, bool, bool) /sw/source/core/layout/wsfrm.cxx:1172:20 > #2 0x2b6562385999 in SwSectionFrame::MakeAll(OutputDevice*) /sw/source/core/layout/sectfrm.cxx:749:12 > #3 0x2b6561b6c728 in SwFrame::PrepareMake(OutputDevice*) /sw/source/core/layout/calcmove.cxx:346:5 > #4 0x2b656257f355 in SwFrame::Calc(OutputDevice*) const /sw/source/core/layout/trvlfrm.cxx:1769:9 > #5 0x2b656247d232 in lcl_InnerCalcLayout(SwFrame*, long, bool) /sw/source/core/layout/tabfrm.cxx:1522:13 > #6 0x2b656247d635 in lcl_InnerCalcLayout(SwFrame*, long, bool) /sw/source/core/layout/tabfrm.cxx:1524:25 > #7 0x2b656247d635 in lcl_InnerCalcLayout(SwFrame*, long, bool) /sw/source/core/layout/tabfrm.cxx:1524:25 > #8 0x2b65624b9b2e in lcl_RecalcRow(SwRowFrame&, long) /sw/source/core/layout/tabfrm.cxx:1559:16 > #9 0x2b65624b0a9f in SwTabFrame::MakeAll(OutputDevice*) /sw/source/core/layout/tabfrm.cxx:2454:29 > #10 0x2b6561b6c728 in SwFrame::PrepareMake(OutputDevice*) /sw/source/core/layout/calcmove.cxx:346:5 > #11 0x2b656257f355 in SwFrame::Calc(OutputDevice*) const /sw/source/core/layout/trvlfrm.cxx:1769:9 > #12 0x2b6561b68bf1 in SwFrame::PrepareMake(OutputDevice*) /sw/source/core/layout/calcmove.cxx:249:13 > #13 0x2b656257f355 in SwFrame::Calc(OutputDevice*) const /sw/source/core/layout/trvlfrm.cxx:1769:9 > #14 0x2b6561b68bf1 in SwFrame::PrepareMake(OutputDevice*) /sw/source/core/layout/calcmove.cxx:249:13 > #15 0x2b656257f355 in SwFrame::Calc(OutputDevice*) const /sw/source/core/layout/trvlfrm.cxx:1769:9 > #16 0x2b6561b6e7de in SwFrame::OptPrepareMake() /sw/source/core/layout/calcmove.cxx:357:13 > #17 0x2b6561fa557d in SwFrame::OptCalc() const /sw/source/core/inc/frame.hxx:889:9 > #18 0x2b6561f6f40c in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) /sw/source/core/layout/layact.cxx:1368:13 > #19 0x2b6561f6f04a in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) /sw/source/core/layout/layact.cxx:1363:29 > #20 0x2b6561f8737e in SwLayAction::FormatLayoutTab(SwTabFrame*, bool) /sw/source/core/layout/layact.cxx:1576:25 > #21 0x2b6561f6eb14 in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) /sw/source/core/layout/layact.cxx:1360:32 > #22 0x2b6561f6f04a in SwLayAction::FormatLayout(OutputDevice*, SwLayoutFrame*, bool) /sw/source/core/layout/layact.cxx:1363:29 > #23 0x2b6561f50723 in SwLayAction::InternalAction(OutputDevice*) /sw/source/core/layout/layact.cxx:550:25 > #24 0x2b6561f47023 in SwLayAction::Action(OutputDevice*) /sw/source/core/layout/layact.cxx:341:5 > #25 0x2b6564f03b8f in SwViewShell::ImplEndAction(bool) /sw/source/core/view/viewsh.cxx:280:9 > #26 0x2b655ee80f89 in SwViewShell::EndAction(bool) /sw/inc/viewsh.hxx:605:9 > #27 0x2b655edcccbe in SwCursorShell::EndAction(bool, bool) /sw/source/core/crsr/crsrsh.cxx:258:5 > #28 0x2b6567ac5b5b in SwView::OuterResizePixel(Point const&, Size const&) /sw/source/uibase/uiview/viewport.cxx:1116:9 > #29 0x2b65421f88c1 in SfxViewFrame::DoAdjustPosSizePixel(SfxViewShell*, Point const&, Size const&, bool) /sfx2/source/view/viewfrm.cxx:1490:13 > #30 0x2b6542228d89 in SfxViewFrame::Resize(bool) /sfx2/source/view/viewfrm.cxx:2275:17 > #31 0x2b654226038f in SfxFrameViewWindow_Impl::Resize() /sfx2/source/view/viewfrm2.cxx:73:9 > #32 0x2b650ff227aa in vcl::Window::ImplCallResize() /vcl/source/window/event.cxx:522:5 > #33 0x2b6510a8d5f6 in vcl::Window::Show(bool, ShowFlags) /vcl/source/window/window.cxx:2276:13 > #34 0x2b6542132a1e in SfxBaseController::ConnectSfxFrame_Impl(SfxBaseController::ConnectSfxFrame) /sfx2/source/view/sfxbasecontroller.cxx:1250:13 > #35 0x2b654212c985 in SfxBaseController::attachFrame(com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) /sfx2/source/view/sfxbasecontroller.cxx:550:13 > #36 0x2b6542084861 in (anonymous namespace)::SfxFrameLoader_Impl::impl_createDocumentView(com::sun::star::uno::Reference<com::sun::star::frame::XModel2> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, comphelper::NamedValueCollection const&, rtl::OUString const&) /sfx2/source/view/frmload.cxx:599:5 > #37 0x2b65420777e9 in (anonymous namespace)::SfxFrameLoader_Impl::load(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) /sfx2/source/view/frmload.cxx:716:13 > #38 0x2b65b0ed3384 in framework::LoadEnv::impl_loadContent() /framework/source/loadenv/loadenv.cxx:1087:24 > #39 0x2b65b0eb7531 in framework::LoadEnv::startLoading() /framework/source/loadenv/loadenv.cxx:372:20 > #40 0x2b65b0eb0063 in framework::LoadEnv::loadComponentFromURL(com::sun::star::uno::Reference<com::sun::star::frame::XComponentLoader> const&, com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&, rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /framework/source/loadenv/loadenv.cxx:158:9 > #41 0x2b65b10e0078 in framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /framework/source/services/desktop.cxx:618:12 > #42 0x2b65b10e02fa in non-virtual thunk to framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /framework/source/services/desktop.cxx:606:64 > #43 0x2b657183ee13 in unotest::MacrosTest::loadFromDesktop(rtl::OUString const&, rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) /unotest/source/cpp/macros_test.cxx:50:51 > #44 0x2b6533b674a3 in SwModelTestBase::loadURL(rtl::OUString const&, char const*, char const*) /sw/qa/extras/inc/swmodeltestbase.hxx:668:23 > #45 0x2b6533b69aa0 in SwModelTestBase::load(rtl::OUString const&, char const*, char const*) /sw/qa/extras/inc/swmodeltestbase.hxx:639:16 > #46 0x2b6533716c59 in SwUiWriterTest::createDoc(char const*) /sw/qa/extras/uiwriter/uiwriter.cxx:446:9 > #47 0x2b6533b50a9d in SwUiWriterTest::testTdf108524() /sw/qa/extras/uiwriter/uiwriter.cxx:5101:5 > #48 0x2b6533d7e36a in void std::_Mem_fn_base<void (SwUiWriterTest::*)(), true>::operator()<, void>(SwUiWriterTest*) const /home/tdf/lode/opt_private/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/functional:600:11 > #49 0x2b6533d7e073 in void std::_Bind<std::_Mem_fn<void (SwUiWriterTest::*)()> (SwUiWriterTest*)>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /home/tdf/lode/opt_private/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/functional:1073:11 > #50 0x2b6533d7da81 in void std::_Bind<std::_Mem_fn<void (SwUiWriterTest::*)()> (SwUiWriterTest*)>::operator()<, void>() /home/tdf/lode/opt_private/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/functional:1131:11 > #51 0x2b6533d7c459 in std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void (SwUiWriterTest::*)()> (SwUiWriterTest*)> >::_M_invoke(std::_Any_data const&) /home/tdf/lode/opt_private/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/functional:1871:2 > #52 0x2b6533d7edf0 in std::function<void ()>::operator()() const /home/tdf/lode/opt_private/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/../../../../include/c++/5.2.0/functional:2271:14 > #53 0x2b6533d7aaf5 in CppUnit::TestCaller<SwUiWriterTest>::runTest() /workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:175:7 > #54 0x2b64ed1ff0ad in CppUnit::TestCaseMethodFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:32:5 > #55 0x2b6508a28ea6 in (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /test/source/vclbootstrapprotector.cxx:39:14 > #56 0x2b64ed1bdb77 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #57 0x2b64fca7f7f6 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:89:12 > #58 0x2b64ed1bdb77 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #59 0x2b64f8c39e73 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:63:16 > #60 0x2b64ed1bdb77 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #61 0x2b64ed13950f in CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /workdir/UnpackedTarball/cppunit/src/cppunit/DefaultProtector.cpp:15:12 > #62 0x2b64ed1bdb77 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #63 0x2b64ed1b3da0 in CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:86:18 > #64 0x2b64ed288efb in CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) /workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:182:10 > #65 0x2b64ed1fc12d in CppUnit::TestCase::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:91:5 > #66 0x2b64ed2022e3 in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64:5 > #67 0x2b64ed20124d in CppUnit::TestComposite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23:3 > #68 0x2b64ed2022e3 in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64:5 > #69 0x2b64ed20124d in CppUnit::TestComposite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23:3 > #70 0x2b64ed2c88b6 in CppUnit::TestRunner::WrappingSuite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:47:5 > #71 0x2b64ed287049 in CppUnit::TestResult::runTest(CppUnit::Test*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:149:3 > #72 0x2b64ed2c9d57 in CppUnit::TestRunner::run(CppUnit::TestResult&, std::string const&) /workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:96:3 > #73 0x515fdd in (anonymous namespace)::ProtectedFixtureFunctor::run() const /sal/cppunittester/cppunittester.cxx:319:13 > #74 0x51098f in sal_main() /sal/cppunittester/cppunittester.cxx:469:14 > #75 0x50eaa2 in main /sal/cppunittester/cppunittester.cxx:376:1 > #76 0x2b64eeeefc04 in __libc_start_main (/lib64/libc.so.6+0x21c04) > #77 0x433704 in _start (/workdir/LinkTarget/Executable/cppunittester+0x433704)> /sw/source/core/layout/sectfrm.cxx:1964:23: runtime error: signed integer overflow: 6203 + 9223372036854774315 cannot be represented in type 'long' Change-Id: Idda17d4f03997f9cc0555103a27f480f33e43877
2017-10-05Rename and move SAL_U/W to o3tl::toU/WMike Kaganski
Previosly (since commit 9ac98e6e3488e434bf4864ecfb13a121784f640b) it was expected to gradually remove SAL_U/W usage in Windows code by replacing with reinterpret_cast or changing to some bettertypes. But as it's useful to make use of fact that LibreOffice and Windows use compatible representation of strings, this commit puts these functions to a better-suited o3tl, and recommends that the functions be consistently used throughout Windows-specific code to reflect the compatibility and keep the casts safe. Change-Id: I2f7c65606d0e2d0c01a00f08812bb4ab7659c5f6 Reviewed-on: https://gerrit.libreoffice.org/43150 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-09-06const correctness in o3tl::array_viewNoel Grandin
Change-Id: I44c1ace97ae44069c5a0c6a247aa8a0b49896ad3 Reviewed-on: https://gerrit.libreoffice.org/41985 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>