summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/pdfinput/pdf-input.cpp
diff options
context:
space:
mode:
authorSergei Izmailov <sergei.a.izmailov@gmail.com>2019-05-28 10:48:16 +0000
committerSergei Izmailov <sergei.a.izmailov@gmail.com>2019-05-28 12:18:48 +0000
commit9bba313d56fd87fc0a5033f566c3d63fe3c3d53e (patch)
tree4961ce86aeb61bee84810ba46bb1a30c53ddbb44 /src/extension/internal/pdfinput/pdf-input.cpp
parentUpdate translation job (diff)
downloadinkscape-9bba313d56fd87fc0a5033f566c3d63fe3c3d53e.tar.gz
inkscape-9bba313d56fd87fc0a5033f566c3d63fe3c3d53e.zip
Fix segfault for bad `--pdf-page` argument values
pdf-page value sanitization should be done after total number of pages is available, so it's can't be done in inkscape.h On negative or greater-than-number-of-pages values 1) the error message is printed to stderr 2) first page gets import pdf-page==0 sanitized elsewhere, so no error message is printed in this case
Diffstat (limited to 'src/extension/internal/pdfinput/pdf-input.cpp')
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index 3ff599ebf..5e0bb16e2 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -62,6 +62,19 @@
#include <gdkmm/general.h>
+
+namespace {
+ void sanitize_page_number(int& page_num, const int num_pages){
+ if (page_num < 1 || page_num > num_pages){
+ std::cerr << "Inkscape::Extension::Internal::PdfInput::open: Bad page number "
+ << page_num
+ << ". Import first page instead."
+ << std::endl;
+ page_num = 1;
+ }
+ }
+}
+
namespace Inkscape {
namespace Extension {
namespace Internal {
@@ -815,6 +828,8 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
sp_repr_get_double(prefs, "cropTo", &crop_setting);
Catalog *catalog = pdf_doc->getCatalog();
+ int const num_pages = catalog->getNumPages();
+ sanitize_page_number(page_num, num_pages);
Page *page = catalog->getPage(page_num);
if ( crop_setting >= 0.0 ) { // Do page clipping
@@ -899,6 +914,8 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
if (document != NULL)
{
double width, height;
+ int const num_pages = poppler_document_get_n_pages(document);
+ sanitize_page_number(page_num, num_pages);
PopplerPage* page = poppler_document_get_page(document, page_num - 1);
poppler_page_get_size(page, &width, &height);