Commit 685250d7d6cc285be86e2c9e628449b51e08d489
1 parent
48b7de2c
Correct reversed Rectangle coordinates (fixes #363)
Showing
3 changed files
with
18 additions
and
6 deletions
ChangeLog
| 1 | 1 | 2019-09-19 Jay Berkenbilt <ejb@ql.org> |
| 2 | 2 | |
| 3 | + * When converting an array to a Rectangle, ensure that llx <= urx | |
| 4 | + and lly <= ury. This prevents flatten-annotations from flipping | |
| 5 | + fields whose coordinates are messed up in the input. Fixes #363. | |
| 6 | + | |
| 3 | 7 | * Warn when duplicated dictionary keys are found during parsing. |
| 4 | 8 | The behavior remains as before: later keys override earlier ones. |
| 5 | 9 | However, this generates a warning now rather than being silently | ... | ... |
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -30,6 +30,7 @@ |
| 30 | 30 | #include <ctype.h> |
| 31 | 31 | #include <limits.h> |
| 32 | 32 | #include <cstring> |
| 33 | +#include <algorithm> | |
| 33 | 34 | |
| 34 | 35 | class TerminateParsing |
| 35 | 36 | { |
| ... | ... | @@ -717,10 +718,17 @@ QPDFObjectHandle::getArrayAsRectangle() |
| 717 | 718 | Rectangle result; |
| 718 | 719 | if (isRectangle()) |
| 719 | 720 | { |
| 720 | - result = Rectangle(getArrayItem(0).getNumericValue(), | |
| 721 | - getArrayItem(1).getNumericValue(), | |
| 722 | - getArrayItem(2).getNumericValue(), | |
| 723 | - getArrayItem(3).getNumericValue()); | |
| 721 | + // Rectangle coordinates are always supposed to be llx, lly, | |
| 722 | + // urx, ury, but files have been found in the wild where | |
| 723 | + // llx > urx or lly > ury. | |
| 724 | + double i0 = getArrayItem(0).getNumericValue(); | |
| 725 | + double i1 = getArrayItem(1).getNumericValue(); | |
| 726 | + double i2 = getArrayItem(2).getNumericValue(); | |
| 727 | + double i3 = getArrayItem(3).getNumericValue(); | |
| 728 | + result = Rectangle(std::min(i0, i2), | |
| 729 | + std::min(i1, i3), | |
| 730 | + std::max(i0, i2), | |
| 731 | + std::max(i1, i3)); | |
| 724 | 732 | } |
| 725 | 733 | return result; |
| 726 | 734 | } | ... | ... |
qpdf/qtest/qpdf/manual-appearances.pdf