[poppler] utils/pdftocairo.cc utils/pdftoppm.cc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Dec 5 23:41:01 UTC 2019
utils/pdftocairo.cc | 13 ++++++++++---
utils/pdftoppm.cc | 11 +++++++++++
2 files changed, 21 insertions(+), 3 deletions(-)
New commits:
commit d8da6fd3b4c92651092d0a73f54b244bb45e1711
Author: Kris Jurka <jurka at ejurka.com>
Date: Wed Dec 4 22:51:16 2019 -0800
pdftoxxx: error out when even/odd selects 0 pages
When page selection options and/or document length result in planned
output of a single page, further even/odd page selection can then
result in no pages being output. Error out instead of producing no
output which is confusing to the user.
Closes: https://gitlab.freedesktop.org/poppler/poppler/issues/815
diff --git a/utils/pdftocairo.cc b/utils/pdftocairo.cc
index 04b9f047..b096cad3 100644
--- a/utils/pdftocairo.cc
+++ b/utils/pdftocairo.cc
@@ -1170,6 +1170,16 @@ int main(int argc, char *argv[]) {
exit(99);
}
+ // If our page range selection and document size indicate we're only
+ // outputting a single page, ensure that even/odd page selection doesn't
+ // filter out that single page.
+ if (firstPage == lastPage &&
+ ((printOnlyEven && firstPage % 2 == 0) ||
+ (printOnlyOdd && firstPage % 2 == 1))) {
+ fprintf(stderr, "Invalid even/odd page selection, no pages match criteria.\n");
+ exit(99);
+ }
+
if (singleFile && firstPage < lastPage) {
if (!quiet) {
fprintf(stderr,
@@ -1197,9 +1207,6 @@ int main(int argc, char *argv[]) {
}
#endif
- // Make sure firstPage is always used so that beginDocument() is called
- if ((printOnlyEven && firstPage % 2 == 0) || (printOnlyOdd && firstPage % 2 == 1))
- firstPage++;
cairoOut = new CairoOutputDev();
cairoOut->startDoc(doc);
diff --git a/utils/pdftoppm.cc b/utils/pdftoppm.cc
index aac1f743..b14312fe 100644
--- a/utils/pdftoppm.cc
+++ b/utils/pdftoppm.cc
@@ -517,6 +517,17 @@ int main(int argc, char *argv[]) {
goto err1;
}
+ // If our page range selection and document size indicate we're only
+ // outputting a single page, ensure that even/odd page selection doesn't
+ // filter out that single page.
+ if (firstPage == lastPage &&
+ ((printOnlyEven && firstPage % 2 == 0) ||
+ (printOnlyOdd && firstPage % 2 == 1))) {
+ fprintf(stderr, "Invalid even/odd page selection, no pages match criteria.\n");
+ goto err1;
+ }
+
+
if (singleFile && firstPage < lastPage) {
if (!quiet) {
fprintf(stderr,
More information about the poppler
mailing list