summaryrefslogtreecommitdiff
path: root/sot
AgeCommit message (Collapse)AuthorFilesLines
2018-08-20Avoid further downstream overflowStephan Bergmann4-11/+11
...after 004304eb2fd1703d22dec0abf0170bb2ce493d0c "try to avoid overflows in some compare functions" had changed the return type of just one function, but not its callers. Found with Clang's new -fsanitize=implicit-conversion during CppunitTest_sd_filters_test: > Testing file:///home/sbergman/lo/core/sd/qa/unit/data/ppt/pass/hang-17.ppt: [...] > sot/source/sdstor/stgdir.cxx:101:19: runtime error: implicit conversion from type 'sal_Int32' (aka 'int') of value -57120 (32-bit, signed) to type 'short' changed the value to 8416 (16-bit, signed) > #0 in StgDirEntry::Compare(StgAvlNode const*) const at sot/source/sdstor/stgdir.cxx:101:19 (instdir/program/libsotlo.so +0x217699) > #1 in StgAvlNode::Find(StgAvlNode const*) at sot/source/sdstor/stgavl.cxx:43:29 (instdir/program/libsotlo.so +0x1db72b) > #2 in StgDirStrm::Find(StgDirEntry&, rtl::OUString const&) at sot/source/sdstor/stgdir.cxx:907:57 (instdir/program/libsotlo.so +0x22f2dc) > #3 in Storage::IsStream(rtl::OUString const&) const at sot/source/sdstor/stg.cxx:773:39 (instdir/program/libsotlo.so +0x1d2cdf) > #4 in SotStorage::IsStream(rtl::OUString const&) const at sot/source/sdstor/storage.cxx:654:27 (instdir/program/libsotlo.so +0x29ebdb) > #5 in PropRead::PropRead(SotStorage&, rtl::OUString const&) at sd/source/filter/ppt/propread.cxx:543:19 (instdir/program/libsdfiltlo.so +0x6b72ee) > #6 in ImplSdPPTImport::Import() at sd/source/filter/ppt/pptin.cxx:262:32 (instdir/program/libsdfiltlo.so +0x5d0dc4) > #7 in SdPPTImport::Import() at sd/source/filter/ppt/pptin.cxx:167:21 (instdir/program/libsdfiltlo.so +0x5cf733) > #8 in ImportPPT at sd/source/filter/ppt/pptin.cxx:2761:26 (instdir/program/libsdfiltlo.so +0x618f64) > #9 in SdPPTFilter::Import() at sd/source/filter/sdpptwrp.cxx:106:32 (instdir/program/libsdlo.so +0x2877ed3) > #10 in sd::DrawDocShell::ConvertFrom(SfxMedium&) at sd/source/ui/docshell/docshel4.cxx:474:46 (instdir/program/libsdlo.so +0x2e1607c) > #11 in SfxObjectShell::DoLoad(SfxMedium*) at sfx2/source/doc/objstor.cxx:786:23 (instdir/program/libsfxlo.so +0x2c8c762) > #12 in SdFiltersTest::load(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int) at sd/qa/unit/filters-test.cxx:75:31 (workdir/LinkTarget/CppunitTest/libtest_sd_filters_test.so +0x19771) > #13 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) > #14 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) > #15 in SdFiltersTest::testCVEs() at sd/qa/unit/filters-test.cxx:83:5 (workdir/LinkTarget/CppunitTest/libtest_sd_filters_test.so +0x19d6d) Change-Id: Iaffd35d33f0e1109195e3bd56538104d395af01b Reviewed-on: https://gerrit.libreoffice.org/59274 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com> (cherry picked from commit 4cb69cf33b5bf17030bcd263fe31258177c76d5e) Reviewed-on: https://gerrit.libreoffice.org/59277 Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
2018-05-18loplugin:unusedfields in sfx2Noel Grandin2-3/+4
and fix leak of HelpListener_Impl in SfxHelpWindow_Impl Change-Id: I7450be10c8deaf63b7c7f1f4359b4eaf0083bdd4 Reviewed-on: https://gerrit.libreoffice.org/54451 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-04-21cppcheck: identicalInnerConditionJochen Nitschke1-2/+1
renamed temporary list in EnhancedCustomShape2d.cxx to avoid shadow of a local variable Change-Id: I17a2261dafd2067480fcc5314af4f48765d6b690 Reviewed-on: https://gerrit.libreoffice.org/53244 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Jochen Nitschke <j.nitschke+logerrit@ok.de>
2018-04-07tdf#89453 - Improve the wording of "Paste Special" optionsheiko tietze1-1/+1
User fiendly captions with short names in parenthesis Change-Id: I07a1effa5b03423c4b48e6ca6066f7d1e3445248 Reviewed-on: https://gerrit.libreoffice.org/52336 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Heiko Tietze <tietze.heiko@gmail.com>
2018-04-01remove unused processfactory.hxx includesJochen Nitschke2-2/+0
and fix fallout Change-Id: Id06bf31f2075111e426ba40c84c885ae70697bee Reviewed-on: https://gerrit.libreoffice.org/52206 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Jochen Nitschke <j.nitschke+logerrit@ok.de>
2018-04-01Fix typoAndrea Gelmini1-1/+1
Change-Id: Ice18bb667b2f8da3321ee61904915079075fd136 Reviewed-on: https://gerrit.libreoffice.org/52196 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Jens Carl <j.carl43@gmx.de>
2018-03-29tdf#115574 sot: fix Excel -> Writer pasteMiklos Vajna4-15/+70
Reported problem is that nothing happens for paste. Direct cause is that BITMAP is selected as the format, and Excel advertises BITMAP, but when we try to import that, it fails. There are 3 interesting commits in the recent history for this topic: - commit c47db038f98aaf7aec3cbe57c4e5683591afa23e (fdo#52547 SOT: Prefer embedding image data to embedding linked image., 2014-02-07) was a bugfix due to newer firefox - commit 538c13f3d1756f2d105115f64ab1bc0b7426eebc (fdo#78801 fdo#52547 Paste preference is image, then html, then text., 2014-05-28) was a regression fix from the previous fix - commit a96a7ce51aa98fb9ee97ea3803e2b7e648611008 (fdo#81835 Don't prefer GDI Metafiles to RTF/HTML, 2014-08-05), was a regression fix from the previous fixes Going back to the original state shows that the Excel -> Writer use-case used to be RTF. Restore the old Excel -> Writer (RTF) behavior by: - going back to the original state, ignoring the enum class conversions - re-fix fdo#52547: prefer bitmap over html, but leave everything else unchanged - fdo#78801 needs no fix in this case - fdo#81835 needs no fix in this case - tdf#115574 selects RTF -> table shows up After all these complications, the actual fix is surprisingly simple. Change-Id: I2d728afa7d1dd7888fa43525366c197d806eea6c Reviewed-on: https://gerrit.libreoffice.org/52120 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
2018-02-07ofz: Pos2Page returns true on same value that returned false previouslyCaolán McNamara5-47/+63
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-06pOptionalCalcSize is never nullCaolán McNamara2-7/+5
Change-Id: I830d02cbac6d281ab7fbeaf43e7af6136896b503
2018-02-02sot: MSVC: pragma warning: make more specific, remove obsoleteMike Kaganski2-10/+0
Change-Id: I0a0dc82561968cd1ff179c9930525e188060d9b7 Reviewed-on: https://gerrit.libreoffice.org/49050 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2018-01-29ofz#2976 TimeoutCaolán McNamara4-4/+4
Change-Id: Iff085d6bdbbfc7f2c821fdcef8e412aa91152d93 Reviewed-on: https://gerrit.libreoffice.org/48804 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-01-28ofz#5747 short->sal_Int32 like in StgDataStrmCaolán McNamara1-4/+4
Change-Id: I254c00b1142d7187beabe5d18532efec036de494 Reviewed-on: https://gerrit.libreoffice.org/48751 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-01-19new loplugin:emptyifNoel Grandin1-3/+0
Change-Id: I1092115a0ceb3a5e6680a4b724b129f98a892c42 Reviewed-on: https://gerrit.libreoffice.org/48128 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-01-15remove local copies of std::min,std::maxNoel Grandin1-3/+1
Change-Id: I067c4dcabad55180e4734fb06338a8e843713936 Reviewed-on: https://gerrit.libreoffice.org/47692 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-01-15More loplugin:cstylecast: sotStephan Bergmann1-1/+1
Change-Id: Ic591422ad8b643d690a43a599e99352160fea480
2018-01-12More loplugin:cstylecast: sotStephan Bergmann10-43/+43
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: I7387e4c7877faba8bc82372734c14d2263457300
2018-01-09loplugin:convertlong in ucb,sotNoel Grandin3-10/+10
Change-Id: I6fa355448834701f11b84584649dfcdecd0f7b2c Reviewed-on: https://gerrit.libreoffice.org/47596 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-23loplugin:passstuffbyref improved returns in vclNoel Grandin1-1/+1
Change-Id: I0b103df2e7ce59093869f547225c95865d33da27 Reviewed-on: https://gerrit.libreoffice.org/46916 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-21new loplugin: convertlongNoel Grandin2-9/+9
merge the droplong and convertuintptr into one new plugin. Limit the analysis to looking at var decl's, since that seems to be safest proposition, even if that too needs some careful analysis. Change-Id: Id005baaf05cfb157ce44a06a1c81f08559a07d1f Reviewed-on: https://gerrit.libreoffice.org/46851 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-13tools: remove unused #include from solar.hMichael Stahl2-0/+2
Change-Id: I214e13add371380701ae39403d90a574a63e495d
2017-12-11loplugin:salcall fix functionsNoel Grandin2-2/+2
since cdecl is the default calling convention on Windows for such functions, the annotation is redundant. Change-Id: I1a85fa27e5ac65ce0e04a19bde74c90800ffaa2d Reviewed-on: https://gerrit.libreoffice.org/46164 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-08tdf#114243 sot: catch exceptions in SotStorage::GetFormatID()Michael Stahl1-1/+9
This function returns an error code so it might as well convert exceptions to that for the benefit of clients like lcl_ReadSections(). Change-Id: Iccf21bf64ee81b66dd9b9902b9b952fa48a318e5
2017-11-29ofz#4476 Integer-overflowCaolán McNamara1-2/+3
Change-Id: I7ee197b396026fb25872f9e79c3be098329a5cee Reviewed-on: https://gerrit.libreoffice.org/45467 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-11-29loplugin:unusedmethodsNoel Grandin2-22/+0
Change-Id: I2efb5c0e5735c179314c6c5de87821cee3b033e1 Reviewed-on: https://gerrit.libreoffice.org/45386 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-11-23Make loplugin:unnecessaryparen look through implicitStephan Bergmann1-2/+2
...similar to how <https://gerrit.libreoffice.org/#/c/45083/2> "Make not warning about !! in loplugin:simplifybool consistent" does for loplugin:simplifybool Change-Id: I23eef400af71c582d380c9bae6546ce06e8a1e18 Reviewed-on: https://gerrit.libreoffice.org/45122 Tested-by: Stephan Bergmann <sbergman@redhat.com> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2017-11-22drop duplicate methodCaolán McNamara3-4/+4
Change-Id: Idadd0a64e41cd02f5167b275081c3576a6224b12 Reviewed-on: https://gerrit.libreoffice.org/45075 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-11-20sot: Simplify UCBStorageElement_Impl with std::unique_ptrTakeshi Abe1-29/+16
Change-Id: Ia2de0a990ed8157095e03aabf65c0f7cd9fc4c87 Reviewed-on: https://gerrit.libreoffice.org/44700 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-11-16ofz#4079 check for error earlierCaolán McNamara1-2/+5
Change-Id: I141417811b0d64dbf1ad898f9f3a00e4e02d33c8 Reviewed-on: https://gerrit.libreoffice.org/44826 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-11-13SotClipboardFormatId::STRING_TSVC "Unformatted text [TSV-Calc]", tdf#113571Eike Rathke1-1/+2
In preparation to solve tdf#113571 *AND* keeping tdf#32213 fixed we need two separate unformatted text formats to distinguish between in-Calc on-cell paste and external or in-cell paste. Change-Id: Ic81a0c17d0643af2f5f4be50e67b690fd8846388
2017-11-13sot: Simplify SotData_Impl with std::unique_ptrTakeshi Abe1-26/+13
Change-Id: I08752c66fd2680aa5f2eb2968d7e23cf797090f9 Reviewed-on: https://gerrit.libreoffice.org/44667 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-11-04ofz short read considered as a successful full block readCaolán McNamara1-11/+24
i.e StgDataStrm::Read takes the bool of no error and multiplies it by the block size to report the length read. A short read isn't an error so full buffer is considered valid. To keep #i73846# working and get deterministic fuzzing results, zero out the trailing space of a successful but short read. Changing this to return the truthful number of bytes read makes #i73846# stop working. There's wonderful nonsense here calculating nPg2, determining nBytes to read derived from this, reading nBytes into the buffer and then considering it an error if nPg2 is not 1 after the presumably potentially fatal buffer overflow if nPg2 wasn't initially 1, but this doesn't seem possible in practice Change-Id: I2bac6066deb8a2902677e04696367ba2c351b325 Reviewed-on: https://gerrit.libreoffice.org/44310 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-11-02improve constparam lopluginNoel Grandin1-2/+2
lots of little fixes to make the logic less pessimistic Change-Id: If368822984250b11b98c56f5890177a1402e8660 Reviewed-on: https://gerrit.libreoffice.org/44168 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-26loplugin:constmethod in basegfx,sotNoel Grandin8-23/+23
Change-Id: I05d2cdefb7faf489ec29ba28dc5e3c28d08b9780 Reviewed-on: https://gerrit.libreoffice.org/43863 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-23loplugin:includeform: sotStephan Bergmann11-14/+14
Change-Id: Ibdc9e9d2f9912172fe18a960fb67c874585ec09a
2017-10-20ofz+ubsan: runtime error: left shift cannot be represented in typeCaolán McNamara1-3/+5
Change-Id: Ic153b39475abbd562e4c81b47089ca8280080cff Reviewed-on: https://gerrit.libreoffice.org/43569 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-10-04add << operator for css::uno::ExceptionNoel Grandin1-3/+3
Change-Id: Ia23dafd07133779144965682df3b7125a3214235 Reviewed-on: https://gerrit.libreoffice.org/43046 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Jenkins <ci@libreoffice.org>
2017-10-02coverity#1418672 silence Explicit null derefCaolán McNamara1-5/+5
Change-Id: I9c39da02a344316b09c190a3c12bdb17201cf176 Reviewed-on: https://gerrit.libreoffice.org/43027 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-26AddressSanitizer: undefined-behaviorCaolán McNamara4-6/+19
Change-Id: I55a92512ad9e1508c49ee3149394196f5be5f162 Reviewed-on: https://gerrit.libreoffice.org/42784 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-26check sot multiplyCaolán McNamara1-1/+7
Change-Id: I9d1e86834af87cd92c2792f66ac722ba94dff040 Reviewed-on: https://gerrit.libreoffice.org/42768 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-22Fresh run of bin/update_pch.shMike Kaganski1-10/+10
Change-Id: I69d4157aaf6570cecd51ea59df20556914942e06 Reviewed-on: https://gerrit.libreoffice.org/42565 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-09-22move TestImportOLE2 where it can be used by fftesterCaolán McNamara2-1/+48
Change-Id: I7b41d9ec673cfb96f51b5008540df63fe78a7581 Reviewed-on: https://gerrit.libreoffice.org/42639 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-22ofz#2976 timeout in olefuzzerCaolán McNamara2-4/+18
Change-Id: Ic64e5eaa6b524403e46f9907499b0b853792a971 Reviewed-on: https://gerrit.libreoffice.org/42640 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-19tdf#112399 ignore size of unknown/unused ole2 entriesCaolán McNamara3-0/+12
Change-Id: I9908453c1a11997141f7d6c4e1dccff53984321c Reviewed-on: https://gerrit.libreoffice.org/42436 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-04loplugin:unnecessaryparen include c++ castsNoel Grandin1-1/+1
Change-Id: I132d3c66f0562e2c37a02eaf4c168d06c2b473eb Reviewed-on: https://gerrit.libreoffice.org/41874 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-17remove UL/L suffixes from integer constants on the RHS of expressionsNoel Grandin2-4/+4
Change-Id: I899a8126c9d971601fea6c77eca165718aea0ac5 Reviewed-on: https://gerrit.libreoffice.org/41237 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-17remove UL/L suffixes from integer constants in initialiser/call expressionsNoel Grandin7-23/+23
Change-Id: Iae081567c4fa5b88edbd12cf2fbafd2b8f31b300 Reviewed-on: https://gerrit.libreoffice.org/41214 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-10loplugin:unusedenumconstantsNoel Grandin1-5/+0
Change-Id: I54c0c1fca8ea5c89e71c6cd1110fad081ed3d334 Reviewed-on: https://gerrit.libreoffice.org/40953 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-07EditEngine: Removing BIN format from sotVarun Dhall1-3/+2
Change-Id: I495e2749b961dfca63bb1e27239ac6a09b80fd19 Reviewed-on: https://gerrit.libreoffice.org/40333 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
2017-07-17loplugin:constparams in i18nutil,sotNoel Grandin6-12/+12
Change-Id: I8e91b11baa855b1049130746b34f53158010948b Reviewed-on: https://gerrit.libreoffice.org/40050 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-07-13Translate German comments/debug strings (leftovers in the sot dir)Johnny_M11-77/+71
Translates leftovers found using a custom regex and manually checking the rest of the affected file. Change-Id: I0e44957d58e089b82738c65a8774d1a45ea7068d Reviewed-on: https://gerrit.libreoffice.org/39879 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>