Sorry, i found a bug in PdfDate::CreateStringRepresentation(), but
didn't find any other way to report it
The error lines are commented out and i appended "// Original code !
(n)" to the corresponding line. n is 1,2,3 or 4
The corrected line is just below the problem line. (4 problem lines)
Sorry i overlooked the bug marked as 3 !
localtime_s(&stm, &m_time ) returns En != 0 on error, En == 0 means NO error
The code :
void PdfDate::CreateStringRepresentation()
{
// struct tm* stm = NULL; //
Original code ! (1)
struct tm stm;
errno_t En = 0;
long Tz = 0;
const int ZONE_STRING_SIZE = 6;
const char* INVALIDDATE = "INVALIDDATE";
char szZone[ZONE_STRING_SIZE];
char szDate[PDF_DATE_BUFFER_SIZE];
// En = localtime_s(stm, &m_time );
// Original code ! (2)
En = localtime_s(&stm, &m_time );
// if (! En) //
Original code ! (3)
if (En != 0)
{
PODOFO_RAISE_ERROR_INFO( ePdfError_Date,INVALIDDATE );
}
#ifdef _WIN32
// On win32, strftime with %z returns a verbose time zone name
// like "W. Australia Standard time". We use tzset and timezone
// instead.
_tzset();
En = _get_timezone(&Tz);
_snprintf_s( szZone, ZONE_STRING_SIZE, "%+03d", -Tz/3600 );
#else
if( strftime( szZone, ZONE_STRING_SIZE, "%z", stm ) == 0 )
{
std::ostringstream ss;
ss << "Generated invalid date from time_t value " << m_time
<< " (couldn't determine time zone)\n";
PdfError::DebugMessage( ss.str().c_str() );
strcpy_s( m_szDate, INVALIDDATE );
return;
}
#endif
// only the first 3 characters are important for the pdf date
representation
// e.g. +01 instead off +0100
szZone[3] = '\0';
// if( strftime( szDate, PDF_DATE_BUFFER_SIZE, "D:%Y%m%d%H%M%S", stm
) == 0 ) // Original code ! (4)
if( strftime( szDate, PDF_DATE_BUFFER_SIZE, "D:%Y%m%d%H%M%S", &stm
) == 0 )
{
std::ostringstream ss;
ss << "Generated invalid date from time_t value " << m_time
<< "\n";
PdfError::DebugMessage( ss.str().c_str() );
strcpy_s( m_szDate, INVALIDDATE );
return;
}
_snprintf_s( m_szDate, PDF_DATE_BUFFER_SIZE, "%s%s'00'", szDate,
szZone );
m_bValid = true;
}
Cheers,
Marc
[email protected]
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Podofo-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/podofo-users