diff options
author | Marek Kasik <mkasik@redhat.com> | 2018-04-20 11:38:13 +0200 |
---|---|---|
committer | Albert Astals Cid <tsdgeos@yahoo.es> | 2018-10-16 19:06:14 +0000 |
commit | f162ecdea0dda5dbbdb45503c1d55d9afaa41d44 (patch) | |
tree | a56c0fbd2991df3a1316d70920f43debc1a70a54 /glib/poppler-attachment.cc | |
parent | 114ec1fc50595fdfadd1be6b2ae4fc1923f0cf50 (diff) |
Fix crash on missing embedded file
Check whether an embedded file is actually present in the PDF
and show warning in that case.
https://bugs.freedesktop.org/show_bug.cgi?id=106137
https://gitlab.freedesktop.org/poppler/poppler/issues/236
Diffstat (limited to 'glib/poppler-attachment.cc')
-rw-r--r-- | glib/poppler-attachment.cc | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/glib/poppler-attachment.cc b/glib/poppler-attachment.cc index c6502e9d..11ba5bb5 100644 --- a/glib/poppler-attachment.cc +++ b/glib/poppler-attachment.cc @@ -111,17 +111,25 @@ _poppler_attachment_new (FileSpec *emb_file) attachment->description = _poppler_goo_string_to_utf8 (emb_file->getDescription ()); embFile = emb_file->getEmbeddedFile(); - attachment->size = embFile->size (); + if (embFile != NULL && embFile->streamObject()->isStream()) + { + attachment->size = embFile->size (); - if (embFile->createDate ()) - _poppler_convert_pdf_date_to_gtime (embFile->createDate (), (time_t *)&attachment->ctime); - if (embFile->modDate ()) - _poppler_convert_pdf_date_to_gtime (embFile->modDate (), (time_t *)&attachment->mtime); + if (embFile->createDate ()) + _poppler_convert_pdf_date_to_gtime (embFile->createDate (), (time_t *)&attachment->ctime); + if (embFile->modDate ()) + _poppler_convert_pdf_date_to_gtime (embFile->modDate (), (time_t *)&attachment->mtime); - if (embFile->checksum () && embFile->checksum ()->getLength () > 0) - attachment->checksum = g_string_new_len (embFile->checksum ()->getCString (), - embFile->checksum ()->getLength ()); - priv->obj_stream = embFile->streamObject()->copy(); + if (embFile->checksum () && embFile->checksum ()->getLength () > 0) + attachment->checksum = g_string_new_len (embFile->checksum ()->getCString (), + embFile->checksum ()->getLength ()); + priv->obj_stream = embFile->streamObject()->copy(); + } + else + { + g_warning ("Missing stream object for embedded file"); + g_clear_object (&attachment); + } return attachment; } |