poppler/CairoOutputDev.cc | 28 ++++++++++++++++------------ poppler/CairoOutputDev.h | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-)
New commits: commit 22eb01d305ea2560d26417ca8df9c0465d4e9a82 Author: Carlos Garcia Campos <[email protected]> Date: Sat Feb 26 12:17:49 2011 +0100 cairo: Fix a crash when rendering a document with inline images diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc index 7ffeb1f..35f2b45 100644 --- a/poppler/CairoOutputDev.cc +++ b/poppler/CairoOutputDev.cc @@ -2422,7 +2422,7 @@ GBool CairoOutputDev::getStreamData (Stream *str, char **buffer, int *length) return gTrue; } -void CairoOutputDev::setMimeData(Stream *str, Ref ref, cairo_surface_t *image) +void CairoOutputDev::setMimeData(Stream *str, Object *ref, cairo_surface_t *image) { char *strBuffer; int len; @@ -2444,16 +2444,20 @@ void CairoOutputDev::setMimeData(Stream *str, Ref ref, cairo_surface_t *image) cairo_status_t st; #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 2) - GooString *surfaceId = new GooString("poppler-surface-"); - char *idBuffer = copyString(surfaceId->getCString()); - surfaceId->appendf("{0:d}-{1:d}", ref.gen, ref.num); - st = cairo_surface_set_mime_data (image, CAIRO_MIME_TYPE_UNIQUE_ID, - (const unsigned char *)idBuffer, - surfaceId->getLength(), - gfree, idBuffer); - if (st) - gfree(idBuffer); - delete surfaceId; + if (ref && ref->isRef()) { + Ref imgRef = ref->getRef(); + GooString *surfaceId = new GooString("poppler-surface-"); + char *idBuffer = copyString(surfaceId->getCString()); + + surfaceId->appendf("{0:d}-{1:d}", imgRef.gen, imgRef.num); + st = cairo_surface_set_mime_data (image, CAIRO_MIME_TYPE_UNIQUE_ID, + (const unsigned char *)idBuffer, + surfaceId->getLength(), + gfree, idBuffer); + if (st) + gfree(idBuffer); + delete surfaceId; + } #endif st = cairo_surface_set_mime_data (image, @@ -2579,7 +2583,7 @@ void CairoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, cairo_surface_mark_dirty (image); - setMimeData(str, ref->getRef(), image); + setMimeData(str, ref, image); pattern = cairo_pattern_create_for_surface (image); cairo_surface_destroy (image); diff --git a/poppler/CairoOutputDev.h b/poppler/CairoOutputDev.h index fa22059..e6fde85 100644 --- a/poppler/CairoOutputDev.h +++ b/poppler/CairoOutputDev.h @@ -283,7 +283,7 @@ protected: cairo_filter_t getFilterForSurface(cairo_surface_t *image, GBool interpolate); GBool getStreamData (Stream *str, char **buffer, int *length); - void setMimeData(Stream *str, Ref ref, cairo_surface_t *image); + void setMimeData(Stream *str, Object *ref, cairo_surface_t *image); GfxRGB fill_color, stroke_color; cairo_pattern_t *fill_pattern, *stroke_pattern; _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
