aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-02-11 12:51:21 +0100
committerJay Berkenbilt <ejb@ql.org>2021-02-11 20:26:55 +0100
commit8fbc8579f2481dc3eeb962e99522047291e16fbe (patch)
treee7bffe25a0ffacc3495012e1e42e87a5e5fdb20b
parentdf067c9ab68dd4913a1591f048d9baf4f1c8d09c (diff)
downloadqpdf-8fbc8579f2481dc3eeb962e99522047291e16fbe.tar.zst
Allow zone information to be omitted from timestamp strings
-rw-r--r--include/qpdf/QUtil.hh5
-rw-r--r--libqpdf/QUtil.cc4
-rw-r--r--libtests/qutil.cc4
3 files changed, 9 insertions, 4 deletions
diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh
index 09a6c181..5b1f8aae 100644
--- a/include/qpdf/QUtil.hh
+++ b/include/qpdf/QUtil.hh
@@ -203,8 +203,9 @@ namespace QUtil
// Convert a QPDFTime structure to a PDF timestamp string, which
// is "D:yyyymmddhhmmss<z>" where <z> is either "Z" for UTC or
- // "-hh'mm'" or "+hh'mm'" for timezone offset. Examples:
- // "D:20210207161528-05'00'", "D:20210207211528Z". See
+ // "-hh'mm'" or "+hh'mm'" for timezone offset. <z> may also be
+ // omitted. Examples: "D:20210207161528-05'00'",
+ // "D:20210207211528Z", "D:20210207211528". See
// get_current_qpdf_time and the QPDFTime structure above.
QPDF_DLL
std::string qpdf_time_to_pdf_time(QPDFTime const&);
diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc
index 39d21ea0..4b86c0d4 100644
--- a/libqpdf/QUtil.cc
+++ b/libqpdf/QUtil.cc
@@ -898,7 +898,7 @@ QUtil::pdf_time_to_qpdf_time(std::string const& str, QPDFTime* qtm)
{
static std::regex pdf_date("^D:([0-9]{4})([0-9]{2})([0-9]{2})"
"([0-9]{2})([0-9]{2})([0-9]{2})"
- "(?:(Z)|([\\+\\-])([0-9]{2})'([0-9]{2})')$");
+ "(?:(Z?)|([\\+\\-])([0-9]{2})'([0-9]{2})')$");
std::smatch m;
if (! std::regex_match(str, m, pdf_date))
{
@@ -909,7 +909,7 @@ QUtil::pdf_time_to_qpdf_time(std::string const& str, QPDFTime* qtm)
return QUtil::string_to_int(s.c_str());
};
- if (m[7] == "")
+ if (m[8] != "")
{
tz_delta = ((to_i(m[9]) * 60) +
to_i(m[10]));
diff --git a/libtests/qutil.cc b/libtests/qutil.cc
index b67b7580..965c4352 100644
--- a/libtests/qutil.cc
+++ b/libtests/qutil.cc
@@ -594,6 +594,10 @@ void timestamp_test()
check(QUtil::QPDFTime(2021, 2, 10, 1, 19, 25, -330));
check(QUtil::QPDFTime(2021, 2, 9, 19, 19, 25, 0));
assert(! QUtil::pdf_time_to_qpdf_time("potato"));
+ assert(QUtil::pdf_time_to_qpdf_time("D:20210211064743Z"));
+ assert(QUtil::pdf_time_to_qpdf_time("D:20210211064743-05'00'"));
+ assert(QUtil::pdf_time_to_qpdf_time("D:20210211064743+05'30'"));
+ assert(QUtil::pdf_time_to_qpdf_time("D:20210211064743"));
// Round trip on the current time without actually printing it.
// Manual testing was done to ensure that we are actually getting
// back the current time in various timezones.