aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFFormFieldObjectHelper.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-02-18 19:43:26 +0100
committerJay Berkenbilt <ejb@ql.org>2022-02-18 19:46:35 +0100
commit31b45b0fd4196c809357236a6fbf5b5a0a4123e4 (patch)
treef3579dc1cc361c43903ba764d5258c0a8794aee6 /libqpdf/QPDFFormFieldObjectHelper.cc
parent3e2109ab373d8830146efbcb0af735ff58f9ad32 (diff)
downloadqpdf-31b45b0fd4196c809357236a6fbf5b5a0a4123e4.tar.zst
Fix logic error with Tf when generating appearances (fixes #655)
Diffstat (limited to 'libqpdf/QPDFFormFieldObjectHelper.cc')
-rw-r--r--libqpdf/QPDFFormFieldObjectHelper.cc29
1 files changed, 15 insertions, 14 deletions
diff --git a/libqpdf/QPDFFormFieldObjectHelper.cc b/libqpdf/QPDFFormFieldObjectHelper.cc
index be70d2db..2daba03c 100644
--- a/libqpdf/QPDFFormFieldObjectHelper.cc
+++ b/libqpdf/QPDFFormFieldObjectHelper.cc
@@ -798,19 +798,19 @@ class TfFinder: public QPDFObjectHandle::TokenFilter
private:
double tf;
- size_t tf_idx;
+ int tf_idx;
std::string font_name;
double last_num;
- size_t last_num_idx;
+ int last_num_idx;
std::string last_name;
std::vector<std::string> DA;
};
TfFinder::TfFinder() :
tf(11.0),
- tf_idx(0),
+ tf_idx(-1),
last_num(0.0),
- last_num_idx(0)
+ last_num_idx(-1)
{
}
@@ -825,7 +825,7 @@ TfFinder::handleToken(QPDFTokenizer::Token const& token)
case QPDFTokenizer::tt_integer:
case QPDFTokenizer::tt_real:
last_num = strtod(value.c_str(), 0);
- last_num_idx = DA.size() - 1;
+ last_num_idx = QIntC::to_int(DA.size() - 1);
break;
case QPDFTokenizer::tt_name:
@@ -833,16 +833,17 @@ TfFinder::handleToken(QPDFTokenizer::Token const& token)
break;
case QPDFTokenizer::tt_word:
- if ((value == "Tf") &&
- (last_num > 1.0) &&
- (last_num < 1000.0))
+ if (value == "Tf")
{
- // These ranges are arbitrary but keep us from doing
- // insane things or suffering from over/underflow
- tf = last_num;
+ if ((last_num > 1.0) && (last_num < 1000.0))
+ {
+ // These ranges are arbitrary but keep us from doing
+ // insane things or suffering from over/underflow
+ tf = last_num;
+ }
+ tf_idx = last_num_idx;
+ font_name = last_name;
}
- tf_idx = last_num_idx;
- font_name = last_name;
break;
default:
@@ -864,7 +865,7 @@ TfFinder::getDA()
for (size_t i = 0; i < n; ++i)
{
std::string cur = this->DA.at(i);
- if (i == tf_idx)
+ if (QIntC::to_int(i) == tf_idx)
{
double delta = strtod(cur.c_str(), 0) - this->tf;
if ((delta > 0.001) || (delta < -0.001))