Description: Crash vcllo!OutputDevice::RemoveTransparenciesFromMetaFile+0xa68: Steps to Reproduce: 1. open https://documentation.libreoffice.org/assets/Uploads/Documentation/en/WG5.4/WG54-WriterGuideLO.odt 2. Press Print 3. Select Microsoft XPS Printer or a PDF Printer 4. Press OK & Wait (a long, very long time) Crash somewhere at after pag 250 Actual Results: Crash Expected Results: no crash Reproducible: Always User Profile Reset: No Additional Info: Version: 6.3.0.0.alpha1+ Build ID: 959e8ae7ea33ce94dd80ee8ea172b6db64593873 CPU threads: 4; OS: Windows 6.3; UI render: default; VCL: win; TinderBox: Win-x86@42, Branch:master, Time: 2019-05-21_23:35:12 Locale: nl-NL (nl_NL); UI-Language: en-US Calc: CL
Created attachment 151653 [details] bt Windows (windbg) On Windows 10 with master sources updated yesterday + enable-dbgutil, I could reproduce this. (after less than 20 pages)
it doesn't crash in Versión: 6.2.3.2 Id. de compilación: aecc05fe267cc68dde00352a451aa867b3b546ac Subprocs. CPU: 1; SO: Windows 6.1; Repres. IU: predet.; VCL: win; Configuración regional: es-ES (es_ES); Idioma de IU: es-ES Calc: threaded it might be a regression in master...
It could be due to my patch here: https://cgit.freedesktop.org/libreoffice/core/commit/?id=3ff0c23b54ba4e7a534693ba25a3ffb27d1c18e1 I'll test the revert of it locally.
I confirm by reverting the patch locally, it works. I'm trying to find another way to fix this to avoid list use. Of course, if I find nothing quickly (in the very next days), I'll just revert the patch.
It was just a invalidation pb. Since I had replaced list by vector, it's not possible to create a const end iterator for the loop. Here's the patch to apply which includes some simplification: diff --git a/vcl/source/gdi/print2.cxx b/vcl/source/gdi/print2.cxx index 1ca7014778f5..2aec6add9634 100644 --- a/vcl/source/gdi/print2.cxx +++ b/vcl/source/gdi/print2.cxx @@ -917,8 +917,6 @@ bool OutputDevice::RemoveTransparenciesFromMetaFile( const GDIMetaFile& rInMtf, bTreatSpecial = true; } - ConnectedComponentsList::iterator aCurrCC; - const ConnectedComponentsList::iterator aLastCC( aCCList.end() ); bool bSomeComponentsChanged; // now, this is unfortunate: since changing anyone of @@ -934,7 +932,7 @@ bool OutputDevice::RemoveTransparenciesFromMetaFile( const GDIMetaFile& rInMtf, bSomeComponentsChanged = false; // iterate over all current members of aCCList - for( aCurrCC=aCCList.begin(); aCurrCC != aLastCC; ) + for( auto aCurrCC=aCCList.begin(); aCurrCC != aCCList.end(); ) { // first check if current element's bounds are // empty. This ensures that empty actions are not I'll be able to submit it after my day time job. If someone wants to submit it, don't hesitate to! :-)
Patch submitted on gerrit: https://gerrit.libreoffice.org/#/c/72922/
Julien Nabet committed a patch related to this issue. It has been pushed to "master": https://git.libreoffice.org/core/+/7f3d3e74fdcffb55da7fd7f55ac4c1f85d35745c%5E%21 tdf#125472: fix RemoveTransparenciesFromMetaFile(vcl/gdi) It will be available in 6.3.0. The patch should be included in the daily builds available at https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More information about daily builds can be found at: https://wiki.documentfoundation.org/Testing_Daily_Builds Affected users are encouraged to test the fix and report feedback.
@Telesto, Could you please verify this issue is fixed ?
Version: 6.3.0.0.alpha1+ Build ID: 63b39fe87644587210214198fb67d6b3fb3343c5 CPU threads: 4; OS: Windows 6.3; UI render: default; VCL: win; TinderBox: Win-x86@42, Branch:master, Time: 2019-05-27_01:42:59 Locale: it-IT (nl_NL); UI-Language: en-US Calc: CL