From 71cfbd5e3ec158efcb49c896bd4468764a9a54fb Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Sat, 18 Jun 2005 21:43:31 +0000 Subject: Check for incorrect dvi files. Fix parsing dvi on AMD64 platform. Thanks * dvi/dvi-document.c: (dvi_document_load): * dvi/mdvi-lib/dviread.c: (mdvi_init_context): * po/POTFILES.in: Check for incorrect dvi files. Fix parsing dvi on AMD64 platform. Thanks to tester@tester.ca (Olivier Crete). --- diff --git a/ChangeLog b/ChangeLog index 57cb4cf..f77e17c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-06-19 Nickolay V. Shmyrev + + * dvi/dvi-document.c: (dvi_document_load): + * dvi/mdvi-lib/dviread.c: (mdvi_init_context): + * po/POTFILES.in: + + Check for incorrect dvi files. Fix parsing dvi on AMD64 + platform. Thanks to tester@tester.ca (Olivier Crete). + 2005-06-18 Nickolay V. Shmyrev * shell/ev-page-action.c: (match_selected_cb), diff --git a/dvi/dvi-document.c b/dvi/dvi-document.c index 4285f68..d0307e3 100644 --- a/dvi/dvi-document.c +++ b/dvi/dvi-document.c @@ -28,6 +28,7 @@ #include "pixbuf-device.h" #include +#include GMutex *dvi_context_mutex = NULL; @@ -81,14 +82,27 @@ dvi_document_load (EvDocument *document, filename = g_filename_from_uri (uri, NULL, error); - if (!filename) - return FALSE; + if (!filename) { + g_set_error (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("File not available")); + return FALSE; + } if (dvi_document->context) mdvi_destroy_context (dvi_document->context); dvi_document->context = mdvi_init_context(dvi_document->params, dvi_document->spec, filename); + if (!dvi_document->context) { + g_set_error (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("DVI document has incorrect format")); + return FALSE; + } + mdvi_pixbuf_device_init (&dvi_document->context->device); dvi_document->base_width = dvi_document->context->dvi_page_w * dvi_document->context->params.conv diff --git a/dvi/mdvi-lib/dviread.c b/dvi/mdvi-lib/dviread.c index 2f9b5cd..d4eddcc 100644 --- a/dvi/mdvi-lib/dviread.c +++ b/dvi/mdvi-lib/dviread.c @@ -853,7 +853,7 @@ DviContext *mdvi_init_context(DviParams *par, DviPageSpec *spec, const char *fil for(i = 1; i <= 10; i++) page[i] = fsget4(p); page[0] = offset; - offset = (long)fuget4(p); + offset = fsget4(p); /* check if the page is selected */ if(spec && mdvi_page_selected(spec, page, n) == 0) { DEBUG((DBG_DVI, "Page %d (%ld.%ld.%ld.%ld.%ld.%ld.%ld.%ld.%ld.%ld) ignored by request\n", diff --git a/po/POTFILES.in b/po/POTFILES.in index 80fff69..e9da774 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -11,6 +11,7 @@ data/evince.schemas.in pdf/ev-poppler.cc ps/gsdefaults.c ps/ps-document.c +dvi/dvi-document.c shell/eggfindbar.c shell/ev-application.c shell/ev-document-types.c -- cgit v0.9.1