On 07/01/2021 11.15, Dominik Seichter wrote:
Hi Federico,
Updated set of patches is pushed with an additional test.
One weird issue:
void DateTest::testParseDateInvalid()
{
PdfString tmp("D:2012020");
PdfDate date(tmp);
struct tm _tm;
memset (&_tm, 0, sizeof(struct tm));
const time_t t = date.GetTime();
localtime_r(&t, &_tm);
CPPUNIT_ASSERT_EQUAL(false, date.IsValid());
CPPUNIT_ASSERT_EQUAL_MESSAGE("Year", 1970, _tm.tm_year + 1900);
CPPUNIT_ASSERT_EQUAL_MESSAGE("Month", 1, _tm.tm_mon + 1);
CPPUNIT_ASSERT_EQUAL_MESSAGE("Day", 1, _tm.tm_mday);
CPPUNIT_ASSERT_EQUAL_MESSAGE("Hour", 0, _tm.tm_hour);
CPPUNIT_ASSERT_EQUAL_MESSAGE("Minute", 59, _tm.tm_min); // Why 59
and not 0?
CPPUNIT_ASSERT_EQUAL_MESSAGE("Second", 59, _tm.tm_sec); // Why 59
and not 0?
}
Any quick ideas why we get 59 here and not 0?
Best regards,
Dominik
Sorry, missed your mail.
`time_t(0)` is 1970, so time_t(-1) is one second before, the values make
sense, even if -1 is "often" (as in PDFDate) used to denote an invalid
value.
https://en.cppreference.com/w/c/chrono/time_t
time_t(-1) is set in the constructor before parsing, and the value is
updated to something else only on successful parsing.
It was already the case before my patches.
But does it make sense to test `date.GetTime()` if `!date.IsValid()`?
AFAIK if `isValid()` is false, then there are no guarantees for the user
of the library about the internal state.
FWIW the test case is equivalent to
void DateTest::testParseDateInvalid()
{
PdfString tmp("D:2012020");
PdfDate date(tmp);
CPPUNIT_ASSERT_EQUAL(false, date.IsValid());
const time_t t = date.GetTime();
CPPUNIT_ASSERT_EQUAL_MESSAGE(time_t(-1), t);
}
while you asked why it's not
void DateTest::testParseDateInvalid()
{
PdfString tmp("D:2012020");
PdfDate date(tmp);
CPPUNIT_ASSERT_EQUAL(false, date.IsValid());
const time_t t = date.GetTime();
CPPUNIT_ASSERT_EQUAL_MESSAGE(time_t(0), t);
}
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users