Commit 31b45b0fd4196c809357236a6fbf5b5a0a4123e4

Authored by Jay Berkenbilt
1 parent 3e2109ab

Fix logic error with Tf when generating appearances (fixes #655)

ChangeLog
  1 +2022-02-18 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * Bug fix: when generating appearance streams, the font size was
  4 + substituted incorrectly from /DA if Tf was absent or the number
  5 + preceding Tf was out of range. Fixes #655.
  6 +
1 2022-02-16 Jay Berkenbilt <ejb@ql.org> 7 2022-02-16 Jay Berkenbilt <ejb@ql.org>
2 8
3 * 10.6.2: release 9 * 10.6.2: release
libqpdf/QPDFFormFieldObjectHelper.cc
@@ -798,19 +798,19 @@ class TfFinder: public QPDFObjectHandle::TokenFilter @@ -798,19 +798,19 @@ class TfFinder: public QPDFObjectHandle::TokenFilter
798 798
799 private: 799 private:
800 double tf; 800 double tf;
801 - size_t tf_idx; 801 + int tf_idx;
802 std::string font_name; 802 std::string font_name;
803 double last_num; 803 double last_num;
804 - size_t last_num_idx; 804 + int last_num_idx;
805 std::string last_name; 805 std::string last_name;
806 std::vector<std::string> DA; 806 std::vector<std::string> DA;
807 }; 807 };
808 808
809 TfFinder::TfFinder() : 809 TfFinder::TfFinder() :
810 tf(11.0), 810 tf(11.0),
811 - tf_idx(0), 811 + tf_idx(-1),
812 last_num(0.0), 812 last_num(0.0),
813 - last_num_idx(0) 813 + last_num_idx(-1)
814 { 814 {
815 } 815 }
816 816
@@ -825,7 +825,7 @@ TfFinder::handleToken(QPDFTokenizer::Token const&amp; token) @@ -825,7 +825,7 @@ TfFinder::handleToken(QPDFTokenizer::Token const&amp; token)
825 case QPDFTokenizer::tt_integer: 825 case QPDFTokenizer::tt_integer:
826 case QPDFTokenizer::tt_real: 826 case QPDFTokenizer::tt_real:
827 last_num = strtod(value.c_str(), 0); 827 last_num = strtod(value.c_str(), 0);
828 - last_num_idx = DA.size() - 1; 828 + last_num_idx = QIntC::to_int(DA.size() - 1);
829 break; 829 break;
830 830
831 case QPDFTokenizer::tt_name: 831 case QPDFTokenizer::tt_name:
@@ -833,16 +833,17 @@ TfFinder::handleToken(QPDFTokenizer::Token const&amp; token) @@ -833,16 +833,17 @@ TfFinder::handleToken(QPDFTokenizer::Token const&amp; token)
833 break; 833 break;
834 834
835 case QPDFTokenizer::tt_word: 835 case QPDFTokenizer::tt_word:
836 - if ((value == "Tf") &&  
837 - (last_num > 1.0) &&  
838 - (last_num < 1000.0)) 836 + if (value == "Tf")
839 { 837 {
840 - // These ranges are arbitrary but keep us from doing  
841 - // insane things or suffering from over/underflow  
842 - tf = last_num; 838 + if ((last_num > 1.0) && (last_num < 1000.0))
  839 + {
  840 + // These ranges are arbitrary but keep us from doing
  841 + // insane things or suffering from over/underflow
  842 + tf = last_num;
  843 + }
  844 + tf_idx = last_num_idx;
  845 + font_name = last_name;
843 } 846 }
844 - tf_idx = last_num_idx;  
845 - font_name = last_name;  
846 break; 847 break;
847 848
848 default: 849 default:
@@ -864,7 +865,7 @@ TfFinder::getDA() @@ -864,7 +865,7 @@ TfFinder::getDA()
864 for (size_t i = 0; i < n; ++i) 865 for (size_t i = 0; i < n; ++i)
865 { 866 {
866 std::string cur = this->DA.at(i); 867 std::string cur = this->DA.at(i);
867 - if (i == tf_idx) 868 + if (QIntC::to_int(i) == tf_idx)
868 { 869 {
869 double delta = strtod(cur.c_str(), 0) - this->tf; 870 double delta = strtod(cur.c_str(), 0) - this->tf;
870 if ((delta > 0.001) || (delta < -0.001)) 871 if ((delta > 0.001) || (delta < -0.001))
qpdf/qtest/qpdf.test
@@ -563,11 +563,12 @@ $td-&gt;runtest(&quot;compare files&quot;, @@ -563,11 +563,12 @@ $td-&gt;runtest(&quot;compare files&quot;,
563 show_ntests(); 563 show_ntests();
564 # ---------- 564 # ----------
565 $td->notify("--- Appearance Streams ---"); 565 $td->notify("--- Appearance Streams ---");
566 -$n_tests += 10; 566 +$n_tests += 12;
567 567
568 foreach my $f ('need-appearances', 568 foreach my $f ('need-appearances',
569 'need-appearances-more', 569 'need-appearances-more',
570 - 'need-appearances-more2') 570 + 'need-appearances-more2',
  571 + 'need-appearances-more3')
571 { 572 {
572 $td->runtest("generate appearances and flatten ($f)", 573 $td->runtest("generate appearances and flatten ($f)",
573 {$td->COMMAND => 574 {$td->COMMAND =>
qpdf/qtest/qpdf/appearances-a-more3.pdf 0 → 100644
No preview for this file type
qpdf/qtest/qpdf/need-appearances-more3.pdf 0 → 100644
No preview for this file type