libreofficekit/source/gtk/lokdocview.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-)
New commits: commit c1d9fe079a32a0515683236f91892c98ee837f8b Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Mon Jul 28 16:29:43 2014 +0200 Prevent LOK DocView crash if document too large. There seems to be a maximum size that gdk's pixbuf can handle, however I have been unable to find any documentatation. Seeing as the current implementation isn't realistically useable anyway, we might as well set a hard limit here (in practice we'd have much smaller tiles + compositing). Specifically extras/source/shellnew/soffice.ods will fail without this patch. Change-Id: I6ac495adca8e15878989375ef8b2de472788279a diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c index cdc2339..e8fe526 100644 --- a/libreofficekit/source/gtk/lokdocview.c +++ b/libreofficekit/source/gtk/lokdocview.c @@ -108,12 +108,26 @@ void renderDocument( LOKDocView* pDocView ) pDocView->pDocument->pClass->getDocumentSize( pDocView->pDocument, &nWidth, &nHeight ); - // Draw the whole document at once (for now) - // TODO: we really should scale by screen DPI here -- 10 seems to be a vaguely // correct factor for my screen at least. - nRenderWidth = nWidth * pDocView->fZoom / 10; - nRenderHeight = nHeight * pDocView->fZoom / 10; + const float fScaleFactor = 0.1; + + // Various things blow up if we try to draw too large a tile, + // this size seems to be safe. (Very rare/unlikely that + const int nMaxWidth = 100000; + if ( nWidth * fScaleFactor > nMaxWidth ) + { + nWidth = nMaxWidth; + } + if ( nHeight * fScaleFactor > nMaxWidth ) + { + nHeight = nMaxWidth; + } + + // Draw the whole document at once (for now) + + nRenderWidth = nWidth * pDocView->fZoom * fScaleFactor; + nRenderHeight = nHeight * pDocView->fZoom * fScaleFactor; pDocView->pPixBuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, TRUE, 8, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits