File r1793-Address-some-of-the-issues-reported-by-CoverityScan.patch of Package podofo.23799
------------------------------------------------------------------------
r1793 | aja_ | 2016-11-18 20:08:56 +0100 (vie, 18 nov 2016) | 2 lines
Address some of the issues reported by CoverityScan
Index: examples/helloworld/helloworld.cpp
===================================================================
--- examples/helloworld/helloworld.cpp (revision 1792)
+++ examples/helloworld/helloworld.cpp (revision 1793)
@@ -49,7 +49,7 @@
std::cout << " examplehelloworld [outputfile.pdf]" << std::endl << std::endl;
}
-void HelloWorld( const char* pszFilename )
+void HelloWorld( const char* pszFilename )
{
/*
* PdfStreamedDocument is the class that can actually write a PDF file.
@@ -68,7 +68,7 @@
PdfPainter painter;
/*
- * This pointer will hold the page object later.
+ * This pointer will hold the page object later.
* PdfSimpleWriter can write several PdfPage's to a PDF file.
*/
PdfPage* pPage;
@@ -77,7 +77,7 @@
* A PdfFont object is required to draw text on a PdfPage using a PdfPainter.
* PoDoFo will find the font using fontconfig on your system and embedd truetype
* fonts automatically in the PDF file.
- */
+ */
PdfFont* pFont;
try {
@@ -98,7 +98,7 @@
* The raise error macro initializes a PdfError object with a given error code and
* the location in the file in which the error ocurred and throws it as an exception.
*/
- if( !pPage )
+ if( !pPage )
{
PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
}
@@ -117,7 +117,7 @@
* The created PdfFont will be deleted by the PdfDocument.
*/
pFont = document.CreateFont( "Arial" );
-
+
/*
* If the PdfFont object cannot be allocated return an error.
*/
@@ -147,11 +147,11 @@
/*
* Actually draw the line "Hello World!" on to the PdfPage at
- * the position 2cm,2cm from the top left corner.
- * Please remember that PDF files have their origin at the
- * bottom left corner. Therefore we substract the y coordinate
+ * the position 2cm,2cm from the top left corner.
+ * Please remember that PDF files have their origin at the
+ * bottom left corner. Therefore we substract the y coordinate
* from the page height.
- *
+ *
* The position specifies the start of the baseline of the text.
*
* All coordinates in PoDoFo are in PDF units.
@@ -180,7 +180,7 @@
* The last step is to close the document.
*/
document.Close();
- } catch ( const PdfError & e ) {
+ } catch ( PdfError & e ) {
/*
* All PoDoFo methods may throw exceptions
* make sure that painter.FinishPage() is called
@@ -227,7 +227,7 @@
* with the filename of the output file as argument.
*/
HelloWorld( argv[1] );
- } catch( const PdfError & eCode ) {
+ } catch( PdfError & eCode ) {
/*
* We have to check if an error has occurred.
* If yes, we return and print an error message
@@ -238,11 +238,27 @@
}
- /**
- * Free global memory allocated by PoDoFo.
- * This is normally not necessary.
#- * This is normally not necessary as memory
#- * will be free'd when the application terminates.
#- *
#- * If you want to free all memory allocated by
#- * PoDoFo you have to call this method.
#- *
#- * PoDoFo will reallocate the memory if necessary.
- */
- PdfEncodingFactory::FreeGlobalEncodingInstances();
+ try {
+ /**
+ * Free global memory allocated by PoDoFo.
+ * This is normally not necessary as memory
+ * will be free'd when the application terminates.
+ *
+ * If you want to free all memory allocated by
+ * PoDoFo you have to call this method.
+ *
+ * PoDoFo will reallocate the memory if necessary.
+ */
+ PdfEncodingFactory::FreeGlobalEncodingInstances();
+ } catch( PdfError & eCode ) {
+ /*
+ * We have to check if an error has occurred.
+ * If yes, we return and print an error message
+ * to the commandline.
+ */
+ eCode.PrintErrorMsg();
+ return eCode.GetError();
+ }
/*
* The PDF was created sucessfully.
@@ -255,6 +265,6 @@
*/
std::cout << std::endl
<< "Created a PDF file containing the line \"Hello World!\": " << argv[1] << std::endl << std::endl;
-
+
return 0;
}
Index: examples/helloworld-base14/helloworld-base14.cpp
===================================================================
--- examples/helloworld-base14/helloworld-base14.cpp (revision 1792)
+++ examples/helloworld-base14/helloworld-base14.cpp (revision 1793)
@@ -174,7 +174,7 @@
*/
document.Close();
- } catch ( const PdfError & e ) {
+ } catch ( PdfError & e ) {
/*
* All PoDoFo methods may throw exceptions
* make sure that painter.FinishPage() is called
@@ -221,7 +221,7 @@
* with the filename of the output file as argument.
*/
HelloWorld( argv[1] );
- } catch( const PdfError & eCode ) {
+ } catch( PdfError & eCode ) {
/*
* We have to check if an error has occurred.
* If yes, we return and print an error message
Index: examples/pdfcontentsgraph/PdfContentsGraph.cpp
===================================================================
--- examples/pdfcontentsgraph/PdfContentsGraph.cpp (revision 1792)
+++ examples/pdfcontentsgraph/PdfContentsGraph.cpp (revision 1793)
@@ -4,7 +4,6 @@
#error This module requires boost::graph
#endif
-#include <cassert>
#include <string>
#include <iostream>
#include <map>
@@ -354,7 +353,7 @@
Vertex v = add_vertex( m_graph );
// Switch any waiting arguments into the new node's data.
m_graph[v].first.GetArgs().swap( args );
- assert(!args.size());
+ PODOFO_ASSERT( !args.size() );
if (ki.kw == KW_Unknown)
{
@@ -361,40 +360,40 @@
// No idea what this keyword is. We have to assume it's an ordinary
// one, possibly with arguments, and just push it in as a node at the
// current level.
- assert(!m_graph[v].first.IsDefined());
+ PODOFO_ASSERT( !m_graph[v].first.IsDefined() );
m_graph[v].first.SetKw( string(kwText) );
add_edge( parentage.top(), v, m_graph );
- assert( m_graph[v].first.GetKwId() == ki.kw );
- assert( m_graph[v].first.GetKwString() == kwText );
+ PODOFO_ASSERT( m_graph[v].first.GetKwId() == ki.kw );
+ PODOFO_ASSERT( m_graph[v].first.GetKwString() == kwText );
}
else if (ki.kt == KT_Standalone)
{
// Plain operator, shove it in the newly reserved vertex (which might already contain
// arguments) and add an edge from the top to it.
- assert(ki.kw != KW_Undefined && ki.kw != KW_Unknown && ki.kw != KW_RootNode );
- assert(!m_graph[v].first.IsDefined());
+ PODOFO_ASSERT( ki.kw != KW_Undefined && ki.kw != KW_Unknown && ki.kw != KW_RootNode );
+ PODOFO_ASSERT( !m_graph[v].first.IsDefined() );
m_graph[v].first.SetKw( ki.kw );
add_edge( parentage.top(), v, m_graph );
- assert( m_graph[v].first.GetKwId() == ki.kw );
- assert( m_graph[v].first.GetKwString() == kwText );
+ PODOFO_ASSERT( m_graph[v].first.GetKwId() == ki.kw );
+ PODOFO_ASSERT( m_graph[v].first.GetKwString() == kwText );
}
else if (ki.kt == KT_Opening)
{
PrintStack(m_graph, parentage, "OS: ");
- assert(ki.kw != KW_Undefined && ki.kw != KW_Unknown && ki.kw != KW_RootNode );
- assert(!m_graph[v].first.IsDefined());
+ PODOFO_ASSERT( ki.kw != KW_Undefined && ki.kw != KW_Unknown && ki.kw != KW_RootNode );
+ PODOFO_ASSERT( !m_graph[v].first.IsDefined() );
m_graph[v].first.SetKw( ki.kw );
// add an edge from the current top to it
add_edge( parentage.top(), v, m_graph );
// and push it to the top of the parentage stack
parentage.push( v );
- assert( m_graph[v].first.GetKwId() == ki.kw );
- assert( m_graph[v].first.GetKwString() == kwText );
+ PODOFO_ASSERT( m_graph[v].first.GetKwId() == ki.kw );
+ PODOFO_ASSERT( m_graph[v].first.GetKwString() == kwText );
PrintStack(m_graph, parentage, "OF: ");
}
else
{
- assert(false);
+ PODOFO_ASSERT( false );
}
}
else if (ki.kt == KT_Closing)
@@ -403,7 +402,7 @@
// be a node whose KWInstance is the matching opening keyword. We'll check
// that, then set the second KWInstance appropriately.
PrintStack(m_graph, parentage, "CS: ");
- assert(ki.kw != KW_Undefined && ki.kw != KW_Unknown && ki.kw != KW_RootNode );
+ PODOFO_ASSERT( ki.kw != KW_Undefined && ki.kw != KW_Unknown && ki.kw != KW_RootNode );
// Get a reference to the node data for the current parent
NodeData & n ( m_graph[parentage.top()] );
PODOFO_RAISE_LOGIC_IF( n.second.IsDefined(), "Closing already closed group" );
@@ -411,7 +410,7 @@
// a valid match for
PdfContentStreamKeyword expectedCloseKw = n.first.GetKwInfo().kwClose;
// Ensure there aren't any args to the close kw
- assert(!args.size());
+ PODOFO_ASSERT( !args.size() );
// and handle the close matching
if ( ki.kw != expectedCloseKw )
{
@@ -437,12 +436,12 @@
}
else
{
- assert(false);
+ PODOFO_ASSERT( false );
}
}
else
{
- assert(false);
+ PODOFO_ASSERT( false );
}
}
Index: examples/pdfcontentsgraph/main.cpp
===================================================================
--- examples/pdfcontentsgraph/main.cpp (revision 1792)
+++ examples/pdfcontentsgraph/main.cpp (revision 1793)
@@ -85,7 +85,7 @@
cout << " - page ok" << endl;
}
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
e.PrintErrorMsg();
return e.GetError();
Index: src/base/PdfDataType.h
===================================================================
--- src/base/PdfDataType.h (revision 1792)
+++ src/base/PdfDataType.h (revision 1793)
@@ -145,7 +145,7 @@
{
if(m_bImmutable)
{
- throw PdfError( ePdfError_ChangeOnImmutable );
+ PODOFO_RAISE_ERROR( ePdfError_ChangeOnImmutable );
}
}
Index: src/base/PdfDate.cpp
===================================================================
--- src/base/PdfDate.cpp (revision 1792)
+++ src/base/PdfDate.cpp (revision 1793)
@@ -56,6 +56,8 @@
PdfDate::PdfDate( const PdfString & sDate )
: m_bValid( false )
{
+ m_time = -1;
+
if ( !sDate.IsValid() )
{
m_szDate[0] = 0;
Index: src/base/PdfDate.h
===================================================================
--- src/base/PdfDate.h (revision 1792)
+++ src/base/PdfDate.h (revision 1793)
@@ -130,7 +130,7 @@
private:
time_t m_time;
- char m_szDate[PDF_DATE_BUFFER_SIZE];
+ char m_szDate[PDF_DATE_BUFFER_SIZE + 1]; // include also room for a nul-terminator in the buffer
bool m_bValid;
};
Index: src/base/PdfFilter.cpp
===================================================================
--- src/base/PdfFilter.cpp (revision 1792)
+++ src/base/PdfFilter.cpp (revision 1793)
@@ -187,7 +187,7 @@
try {
m_filter->DecodeBlock( pBuffer, lLen );
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
m_bFilterFailed = true;
throw e;
Index: src/base/PdfFilter.h
===================================================================
--- src/base/PdfFilter.h (revision 1792)
+++ src/base/PdfFilter.h (revision 1793)
@@ -326,7 +326,7 @@
try {
BeginEncodeImpl();
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// Clean up and close stream
this->FailEncodeDecode();
throw e;
@@ -342,7 +342,7 @@
try {
EncodeBlockImpl(pBuffer, lLen);
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// Clean up and close stream
this->FailEncodeDecode();
throw e;
@@ -358,7 +358,7 @@
try {
EndEncodeImpl();
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// Clean up and close stream
this->FailEncodeDecode();
throw e;
@@ -378,7 +378,7 @@
try {
BeginDecodeImpl( pDecodeParms );
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// Clean up and close stream
this->FailEncodeDecode();
throw e;
@@ -394,7 +394,7 @@
try {
DecodeBlockImpl(pBuffer, lLen);
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// Clean up and close stream
this->FailEncodeDecode();
throw e;
@@ -410,7 +410,7 @@
try {
EndDecodeImpl();
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// Clean up and close stream
this->FailEncodeDecode();
throw e;
@@ -442,7 +442,7 @@
// Note that we can't do this for the user, since EndEncode() might
// throw and we can't safely have that in a dtor. That also means
// we can't throw here, but must abort.
- assert(!m_pOutputStream);
+ assert( !m_pOutputStream );
}
Index: src/base/PdfFiltersPrivate.cpp
===================================================================
--- src/base/PdfFiltersPrivate.cpp (revision 1792)
+++ src/base/PdfFiltersPrivate.cpp (revision 1793)
@@ -230,6 +230,11 @@
// Hex
// -------------------------------------------------------
+PdfHexFilter::PdfHexFilter()
+ : m_cDecodedByte( 0 ), m_bLow( true )
+{
+}
+
void PdfHexFilter::EncodeBlockImpl( const char* pBuffer, pdf_long lLen )
{
char data[2];
@@ -301,6 +306,11 @@
// Paul Haahr - http://www.webcom.com/~haahr/
// -------------------------------------------------------
+PdfAscii85Filter::PdfAscii85Filter()
+ : m_count( 0 ), m_tuple( 0 )
+{
+}
+
void PdfAscii85Filter::EncodeTuple( unsigned long tuple, int count )
{
int i = 5;
@@ -606,6 +616,11 @@
// RLE
// -------------------------------------------------------
+PdfRLEFilter::PdfRLEFilter()
+ : m_nCodeLen( 0 )
+{
+}
+
void PdfRLEFilter::BeginEncodeImpl()
{
PODOFO_RAISE_ERROR( ePdfError_UnsupportedFilter );
@@ -862,6 +877,8 @@
PdfDCTFilter::PdfDCTFilter()
: m_pDevice( NULL )
{
+ memset( &m_cinfo, 0, sizeof( struct jpeg_decompress_struct ) );
+ memset( &m_jerr, 0, sizeof( struct jpeg_error_mgr ) );
}
PdfDCTFilter::~PdfDCTFilter()
Index: src/base/PdfFiltersPrivate.h
===================================================================
--- src/base/PdfFiltersPrivate.h (revision 1792)
+++ src/base/PdfFiltersPrivate.h (revision 1793)
@@ -93,6 +93,8 @@
*/
class PdfHexFilter : public PdfFilter {
public:
+ PdfHexFilter();
+
virtual ~PdfHexFilter() { }
/** Check wether the encoding is implemented for this filter.
@@ -200,6 +202,7 @@
*/
class PdfAscii85Filter : public PdfFilter {
public:
+ PdfAscii85Filter();
virtual ~PdfAscii85Filter() { }
/** Check wether the encoding is implemented for this filter.
@@ -460,6 +463,7 @@
*/
class PdfRLEFilter : public PdfFilter {
public:
+ PdfRLEFilter();
virtual ~PdfRLEFilter() {}
/** Check wether the encoding is implemented for this filter.
Index: src/base/PdfImmediateWriter.cpp
===================================================================
--- src/base/PdfImmediateWriter.cpp (revision 1792)
+++ src/base/PdfImmediateWriter.cpp (revision 1793)
@@ -172,7 +172,7 @@
if( pFileStream )
{
// Only one open file stream is allowed at a time
- assert( !m_bOpenStream );
+ PODOFO_ASSERT( !m_bOpenStream );
m_bOpenStream = true;
if( m_pEncrypt )
@@ -186,7 +186,7 @@
if( pFileStream )
{
// A PdfFileStream has to be opened before
- assert( m_bOpenStream );
+ PODOFO_ASSERT( m_bOpenStream );
m_bOpenStream = false;
}
}
Index: src/base/PdfInputDevice.cpp
===================================================================
--- src/base/PdfInputDevice.cpp (revision 1792)
+++ src/base/PdfInputDevice.cpp (revision 1793)
@@ -174,16 +174,23 @@
int PdfInputDevice::Look() const
{
- if (m_pStream)
- return m_pStream->peek();
- if (m_pFile) {
- pdf_long lOffset = ftello( m_pFile );
- int ch = GetChar();
- fseeko( m_pFile, lOffset, SEEK_SET );
- return ch;
- }
+ if (m_pStream)
+ return m_pStream->peek();
+ if (m_pFile) {
+ pdf_long lOffset = ftello( m_pFile );
- return 0;
+ if( lOffset == -1 )
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read the current file position" );
+
+ int ch = GetChar();
+
+ if( fseeko( m_pFile, lOffset, SEEK_SET ) == -1 )
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek back to the previous position" );
+
+ return ch;
+ }
+
+ return 0;
}
std::streamoff PdfInputDevice::Tell() const
@@ -229,7 +236,8 @@
# whence = SEEK_CUR;
# break;
# }
#- fseeko( m_pFile, off, whence );
#+ if( fseeko( m_pFile, off, whence ) == -1)
if (m_pFile)
{
- fseeko( m_pFile, off, dir );
+ if( fseeko( m_pFile, off, dir ) == -1)
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to given position in the file" );
}
}
else
Index: src/base/PdfInputStream.cpp
===================================================================
--- src/base/PdfInputStream.cpp (revision 1792)
+++ src/base/PdfInputStream.cpp (revision 1793)
@@ -91,10 +91,19 @@
pdf_long lOffset = ftello( m_hFile );
pdf_long lLen;
- fseeko( m_hFile, 0L, SEEK_END );
+ if( lOffset == -1 )
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read current position in the file" );
+
+ if( fseeko( m_hFile, 0L, SEEK_END ) == -1 )
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek at the end of the file" );
+
lLen = ftello( m_hFile );
- fseeko( m_hFile, lOffset, SEEK_SET );
+ if( lLen == -1 )
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read file length" );
+ if( fseeko( m_hFile, lOffset, SEEK_SET ) == -1 )
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek back to the previous position of the file" );
+
return lLen;
}
Index: src/base/PdfLocale.cpp
===================================================================
--- src/base/PdfLocale.cpp (revision 1792)
+++ src/base/PdfLocale.cpp (revision 1793)
@@ -16,14 +16,14 @@
try {
s.imbue( cachedLocale );
} catch (const std::runtime_error & e) {
- std::ostringstream s;
- s << "Failed to set safe locale on stream being used for PDF I/O.";
- s << "Locale set was: \"" << PdfIOLocale << "\".";
- s << "Error reported by STL std::locale: \"" << e.what() << "\"";
+ std::ostringstream err;
+ err << "Failed to set safe locale on stream being used for PDF I/O.";
+ err << "Locale set was: \"" << PdfIOLocale << "\".";
+ err << "Error reported by STL std::locale: \"" << e.what() << "\"";
// The info string is copied by PdfError so we're ok to just:
PODOFO_RAISE_ERROR_INFO(
ePdfError_InvalidDeviceOperation,
- s.str().c_str()
+ err.str().c_str()
);
}
#endif
Index: src/base/PdfMemStream.cpp
===================================================================
--- src/base/PdfMemStream.cpp (revision 1792)
+++ src/base/PdfMemStream.cpp (revision 1793)
@@ -87,8 +87,12 @@
{
m_pStream->Close();
- if( !m_pBufferStream )
- m_lLength = dynamic_cast<PdfBufferOutputStream*>(m_pStream)->GetLength();
+ if( !m_pBufferStream )
+ {
+ PdfBufferOutputStream* pBufferOutputStream = dynamic_cast<PdfBufferOutputStream*>(m_pStream);
+ if( pBufferOutputStream )
+ m_lLength = pBufferOutputStream->GetLength();
+ }
delete m_pStream;
m_pStream = NULL;
Index: src/base/PdfMemoryManagement.cpp
===================================================================
--- src/base/PdfMemoryManagement.cpp (revision 1792)
+++ src/base/PdfMemoryManagement.cpp (revision 1793)
@@ -32,6 +32,7 @@
***************************************************************************/
#include "PdfMemoryManagement.h"
+#include "PdfDefines.h"
#include "PdfDefinesPrivate.h"
# #ifndef SIZE_MAX
namespace PoDoFo {
Index: src/base/PdfMemoryManagement.h
===================================================================
--- src/base/PdfMemoryManagement.h (revision 1792)
+++ src/base/PdfMemoryManagement.h (revision 1793)
@@ -34,7 +34,10 @@
#ifndef _PDF_MEMORY_MANAGEMENT_H_
#define _PDF_MEMORY_MANAGEMENT_H_
-#include "PdfDefines.h"
+// PdfMemoryManagement.h should not include PdfDefines.h, since it is included by it.
+// It should avoid depending on anything defined in PdfDefines.h .
+
+#include "podofoapi.h"
#include <stdlib.h>
namespace PoDoFo {
@@ -75,5 +78,5 @@
};
-#endif // _PDF_XREF_STREAM_PARSER_OBJECT_H_
+#endif // _PDF_MEMORY_MANAGEMENT_H_
Index: src/base/PdfName.cpp
===================================================================
--- src/base/PdfName.cpp (revision 1792)
+++ src/base/PdfName.cpp (revision 1793)
@@ -176,7 +176,10 @@
PdfName PdfName::FromEscaped( const char * pszName, pdf_long ilen )
{
- if( !ilen && pszName )
+ if( !pszName )
+ return PdfName();
+
+ if( !ilen )
ilen = strlen( pszName );
return PdfName(UnescapeName(pszName, ilen));
Index: src/base/PdfObject.cpp
===================================================================
--- src/base/PdfObject.cpp (revision 1792)
+++ src/base/PdfObject.cpp (revision 1793)
@@ -44,7 +44,6 @@
#include <sstream>
#include <fstream>
-#include <cassert>
#include <string.h>
@@ -143,8 +142,8 @@
#if defined(PODOFO_EXTRA_CHECKS)
// Must've been demand loaded or already done
- assert(DelayedLoadDone());
- assert(DelayedStreamLoadDone());
+ PODOFO_ASSERT( DelayedLoadDone() );
+ PODOFO_ASSERT( DelayedStreamLoadDone() );
#endif
}
@@ -323,8 +322,8 @@
#if defined(PODOFO_EXTRA_CHECKS)
// Must've been demand loaded or already done
- assert(DelayedLoadDone());
- assert(DelayedStreamLoadDone());
+ PODOFO_ASSERT( DelayedLoadDone() );
+ PODOFO_ASSERT( DelayedStreamLoadDone() );
#endif
return *this;
Index: src/base/PdfObjectStreamParserObject.cpp
===================================================================
--- src/base/PdfObjectStreamParserObject.cpp (revision 1792)
+++ src/base/PdfObjectStreamParserObject.cpp (revision 1793)
@@ -76,7 +76,7 @@
delete m_vecObjects->RemoveObject( m_pParser->Reference() );
m_pParser = NULL;
- } catch( const PdfError & rError ) {
+ } catch( PdfError & rError ) {
# podofo_free( pBuffer );
free( pBuffer );
throw rError;
}
Index: src/base/PdfOutputStream.cpp
===================================================================
--- src/base/PdfOutputStream.cpp (revision 1792)
+++ src/base/PdfOutputStream.cpp (revision 1793)
@@ -51,6 +51,11 @@
}
}
+PdfFileOutputStream::~PdfFileOutputStream()
+{
+ Close();
+}
+
pdf_long PdfFileOutputStream::Write( const char* pBuffer, pdf_long lLen )
{
return fwrite( pBuffer, sizeof(char), lLen, m_hFile );
@@ -58,8 +63,11 @@
void PdfFileOutputStream::Close()
{
- if( m_hFile )
+ if( m_hFile )
+ {
fclose( m_hFile );
+ m_hFile = NULL;
+ }
}
PdfMemoryOutputStream::PdfMemoryOutputStream( pdf_long lInitial )
Index: src/base/PdfOutputStream.h
===================================================================
--- src/base/PdfOutputStream.h (revision 1792)
+++ src/base/PdfOutputStream.h (revision 1793)
@@ -93,6 +93,8 @@
*/
PdfFileOutputStream( const char* pszFilename );
+ virtual ~PdfFileOutputStream();
+
/** Write data to the output stream
*
* \param pBuffer the data is read from this buffer
Index: src/base/PdfParser.cpp
===================================================================
--- src/base/PdfParser.cpp (revision 1792)
+++ src/base/PdfParser.cpp (revision 1793)
@@ -952,6 +952,9 @@
{
i = pEncrypt->GetReference().ObjectNumber();
pObject = new PdfParserObject( m_vecObjects, m_device, m_buffer, m_offsets[i].lOffset );
+ if( !pObject )
+ PODOFO_RAISE_ERROR( ePdfError_OutOfMemory );
+
pObject->SetLoadOnDemand( false ); // Never load this on demand, as we will use it immediately
try {
pObject->ParseFile( NULL ); // The encryption dictionary is not encrypted :)
@@ -963,12 +966,9 @@
delete pObject;
} catch( PdfError & e ) {
std::ostringstream oss;
- if( pObject )
- {
- oss << "Error while loading object " << pObject->Reference().ObjectNumber() << " "
- << pObject->Reference().GenerationNumber() << std::endl;
- delete pObject;
- }
+ oss << "Error while loading object " << pObject->Reference().ObjectNumber() << " "
+ << pObject->Reference().GenerationNumber() << std::endl;
+ delete pObject;
e.AddToCallstack( __FILE__, __LINE__, oss.str().c_str() );
throw e;
@@ -1024,6 +1024,9 @@
//printf("Reading object %i 0 R from %li\n", i, m_offsets[i].lOffset );
pObject = new PdfParserObject( m_vecObjects, m_device, m_buffer, m_offsets[i].lOffset );
+ if( !pObject )
+ PODOFO_RAISE_ERROR( ePdfError_OutOfMemory );
+
pObject->SetLoadOnDemand( m_bLoadOnDemand );
try {
# pObject->ParseFile( m_pEncrypt );
pObject->ParseFile( m_pEncrypt );
@@ -1062,14 +1065,11 @@
m_vecObjects->push_back( pObject );
} catch( PdfError & e ) {
std::ostringstream oss;
- if( pObject )
- {
- oss << "Error while loading object " << pObject->Reference().ObjectNumber()
- << " " << pObject->Reference().GenerationNumber()
- << " Offset = " << m_offsets[i].lOffset
- << " Index = " << i << std::endl;
- delete pObject;
- }
+ oss << "Error while loading object " << pObject->Reference().ObjectNumber()
+ << " " << pObject->Reference().GenerationNumber()
+ << " Offset = " << m_offsets[i].lOffset
+ << " Index = " << i << std::endl;
+ delete pObject;
if( m_bIgnoreBrokenObjects )
{
Index: src/base/PdfParserObject.cpp
===================================================================
--- src/base/PdfParserObject.cpp (revision 1792)
+++ src/base/PdfParserObject.cpp (revision 1793)
@@ -43,7 +43,6 @@
#include "PdfVariant.h"
#include "PdfDefinesPrivate.h"
-#include <cassert>
#include <iostream>
#include <sstream>
@@ -177,8 +176,8 @@
void PdfParserObject::ParseFileComplete( bool bIsTrailer )
{
#if defined(PODOFO_EXTRA_CHECKS)
- assert(DelayedLoadInProgress());
- assert(!DelayedLoadDone());
+ PODOFO_ASSERT( DelayedLoadInProgress() );
+ PODOFO_ASSERT( !DelayedLoadDone() );
#endif
const char* pszToken;
@@ -244,9 +243,9 @@
void PdfParserObject::ParseStream()
{
#if defined(PODOFO_EXTRA_CHECKS)
- assert(DelayedLoadDone());
- assert(DelayedStreamLoadInProgress());
- assert(!DelayedStreamLoadDone());
+ PODOFO_ASSERT( DelayedLoadDone() );
+ PODOFO_ASSERT( DelayedStreamLoadInProgress() );
+ PODOFO_ASSERT( !DelayedStreamLoadDone() );
#endif
# pdf_int64 lLen = -1;
long long lLen = -1;
@@ -365,8 +364,8 @@
#if defined(PODOFO_EXTRA_CHECKS)
// DelayedLoadImpl() should only ever be called via DelayedLoad(),
// which ensures that it is never called repeatedly.
- assert(!DelayedLoadDone());
- assert(DelayedLoadInProgress());
+ PODOFO_ASSERT( !DelayedLoadDone() );
+ PODOFO_ASSERT( DelayedLoadInProgress() );
#endif
ParseFileComplete( m_bIsTrailer );
@@ -381,12 +380,12 @@
// DelayedLoad() must've been called, either directly earlier
// or via DelayedStreamLoad. DelayedLoad() will throw if the load
// failed, so if we're being called this condition must be true.
- assert(DelayedLoadDone());
+ PODOFO_ASSERT( DelayedLoadDone() );
// Similarly, we should not be being called unless the stream isn't
// already loaded.
- assert(!DelayedStreamLoadDone());
- assert(DelayedStreamLoadInProgress());
+ PODOFO_ASSERT( !DelayedStreamLoadDone() );
+ PODOFO_ASSERT( DelayedStreamLoadInProgress() );
#endif
// Note: we can't use HasStream() here because it'll call DelayedStreamLoad()
Index: src/base/PdfRefCountedInputDevice.cpp
===================================================================
--- src/base/PdfRefCountedInputDevice.cpp (revision 1792)
+++ src/base/PdfRefCountedInputDevice.cpp (revision 1793)
@@ -39,7 +39,7 @@
try {
m_pDevice->m_pDevice = new PdfInputDevice( pszFilename );
- } catch( const PdfError & rError ) {
+ } catch( PdfError & rError ) {
delete m_pDevice;
throw rError;
}
@@ -56,7 +56,7 @@
try {
m_pDevice->m_pDevice = new PdfInputDevice( pszFilename );
- } catch( const PdfError & rError ) {
+ } catch( PdfError & rError ) {
delete m_pDevice;
throw rError;
}
@@ -73,7 +73,7 @@
try {
m_pDevice->m_pDevice = new PdfInputDevice( pBuffer, lLen );
- } catch( const PdfError & rError ) {
+ } catch( PdfError & rError ) {
delete m_pDevice;
throw rError;
}
Index: src/base/PdfStream.cpp
===================================================================
--- src/base/PdfStream.cpp (revision 1792)
+++ src/base/PdfStream.cpp (revision 1793)
@@ -71,7 +71,7 @@
pDecodeStream->Write( const_cast<char*>(this->GetInternalBuffer()), this->GetInternalBufferSize() );
pDecodeStream->Close();
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
delete pDecodeStream;
throw e;
Index: src/base/PdfString.cpp
===================================================================
--- src/base/PdfString.cpp (revision 1792)
+++ src/base/PdfString.cpp (revision 1793)
@@ -1108,7 +1108,7 @@
target += bytesToWrite;
}
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
if( bOwnBuf )
delete[] const_cast<pdf_utf16be *>(pszUtf16);
Index: src/base/PdfVariant.h
===================================================================
--- src/base/PdfVariant.h (revision 1792)
+++ src/base/PdfVariant.h (revision 1793)
@@ -1037,7 +1037,7 @@
{
if(m_bImmutable)
{
#- throw PdfError( ePdfError_ChangeOnImmutable );
- throw new PdfError( ePdfError_ChangeOnImmutable );
+ PODOFO_RAISE_ERROR( ePdfError_ChangeOnImmutable );
}
}
#Index: src/base/PdfWriter.cpp
#===================================================================
#--- src/base/PdfWriter.cpp (revision 1792)
#+++ src/base/PdfWriter.cpp (revision 1793)
#@@ -234,20 +234,36 @@
# // is positioned at the end of the original file by the caller
# if( pSourceInputDevice )
# {
#- #define BUFFER_SIZE 16384
#-
# // copy the original file content first
#- char pBuffer[ BUFFER_SIZE ];
#+ unsigned int uBufferLen = 65535;
#+ char *pBuffer;
#
#- pSourceInputDevice->Seek(0);
#-
#- while( !pSourceInputDevice->Eof() )
#+ while( pBuffer = reinterpret_cast<char *>( podofo_malloc( sizeof( char ) * uBufferLen) ), !pBuffer )
# {
#- std::streamoff didRead;
#+ uBufferLen = uBufferLen / 2;
#+ if( !uBufferLen )
#+ break;
#+ }
#
#- didRead = pSourceInputDevice->Read( pBuffer, BUFFER_SIZE );
#- if( didRead > 0)
#- pDevice->Write( pBuffer, didRead );
#+ if( !pBuffer )
#+ PODOFO_RAISE_ERROR (ePdfError_OutOfMemory);
#+
#+ try {
#+ pSourceInputDevice->Seek(0);
#+
#+ while( !pSourceInputDevice->Eof() )
#+ {
#+ std::streamoff didRead;
#+
#+ didRead = pSourceInputDevice->Read( pBuffer, uBufferLen );
#+ if( didRead > 0)
#+ pDevice->Write( pBuffer, didRead );
#+ }
#+
#+ podofo_free( pBuffer );
#+ } catch( PdfError & e ) {
#+ podofo_free( pBuffer );
#+ throw e;
# }
# }
#
Index: src/base/PdfXRef.cpp
===================================================================
--- src/base/PdfXRef.cpp (revision 1792)
+++ src/base/PdfXRef.cpp (revision 1793)
@@ -92,7 +92,8 @@
return false;
}
-PdfXRef::PdfXRef()
+PdfXRef::PdfXRef()
+ : m_offset( 0 )
{
}
Index: src/base/util/PdfMutexWrapper.h
===================================================================
--- src/base/util/PdfMutexWrapper.h (revision 1792)
+++ src/base/util/PdfMutexWrapper.h (revision 1793)
@@ -89,7 +89,7 @@
try {
m_rMutex.UnLock();
}
- catch( const PdfError & rError )
+ catch( PdfError & rError )
{
rError.PrintErrorMsg();
throw rError;
Index: src/doc/PdfDocument.cpp
===================================================================
--- src/doc/PdfDocument.cpp (revision 1792)
+++ src/doc/PdfDocument.cpp (revision 1793)
@@ -544,7 +544,7 @@
}
else
{
- throw ePdfError_InvalidStream;
+ PODOFO_RAISE_ERROR( ePdfError_InvalidStream );
break;
}
}
#Index: src/doc/PdfDocument.h
#===================================================================
#--- src/doc/PdfDocument.h (revision 1792)
#+++ src/doc/PdfDocument.h (revision 1793)
#@@ -694,8 +694,6 @@
##
## PdfOutlines* m_pOutlines;
## PdfNamesTree* m_pNamesTree;
# PdfNamesTree* m_pNamesTree;
# PdfPagesTree* m_pPagesTree;
# PdfAcroForm* m_pAcroForms;
#-
#- EPdfVersion m_eVersion;
# };
#
# // -----------------------------------------------------
Index: src/doc/PdfFontCID.cpp
===================================================================
--- src/doc/PdfFontCID.cpp (revision 1792)
+++ src/doc/PdfFontCID.cpp (revision 1793)
@@ -118,6 +118,7 @@
# PdfFontCID::PdfFontCID( PdfFontMetrics* pMetrics, const PdfEncoding* const pEncoding, PdfObject* pObject, bool PODOFO_UNUSED_PARAM(bEmbed) )
# : PdfFont( pMetrics, pEncoding, pObject ), m_pDescendantFonts( NULL )
# {
PdfVecObjects* pParent, bool bEmbed )
: PdfFont( pMetrics, pEncoding, pParent )
{
+ m_pDescriptor = NULL;
# /* this->Init( bEmbed, false ); No changes to dictionary */
# m_bWasEmbedded = true; /* embedding on this path is not allowed at all, so
# pretend like it's already done */
this->Init( bEmbed );
}
@@ -127,6 +128,8 @@
# PdfVecObjects* pParent, bool bEmbed, bool bSubset )
# : PdfFont( pMetrics, pEncoding, pParent ), m_pDescendantFonts( NULL )
# {
PdfFontCID::PdfFontCID( PdfFontMetrics* pMetrics, const PdfEncoding* const pEncoding, PdfObject* pObject, bool )
: PdfFont( pMetrics, pEncoding, pObject )
{
+ m_pDescriptor = NULL;
+
# this->Init( bEmbed, bSubset );
# }
#
/* this->Init( bEmbed ); */
}
Index: src/doc/PdfFontConfigWrapper.cpp
===================================================================
--- src/doc/PdfFontConfigWrapper.cpp (revision 1792)
+++ src/doc/PdfFontConfigWrapper.cpp (revision 1793)
@@ -57,6 +57,7 @@
}
PdfFontConfigWrapper::PdfFontConfigWrapper(const PdfFontConfigWrapper & rhs)
+ : m_pFontConfig( NULL )
{
this->operator=(rhs);
}
Index: src/doc/PdfFontMetricsBase14.cpp
===================================================================
--- src/doc/PdfFontMetricsBase14.cpp (revision 1792)
+++ src/doc/PdfFontMetricsBase14.cpp (revision 1793)
@@ -144,7 +144,7 @@
const char* PdfFontMetricsBase14::GetFontname() const
{
#ifdef MYASSERT
- assert(font_name != NULL);
+ PODOFO_ASSERT(font_name != NULL);
#endif
return font_name;
}
Index: src/doc/PdfFontMetricsObject.cpp
===================================================================
--- src/doc/PdfFontMetricsObject.cpp (revision 1792)
+++ src/doc/PdfFontMetricsObject.cpp (revision 1793)
@@ -46,6 +46,8 @@
: PdfFontMetrics( ePdfFontType_Unknown, "", NULL ),
m_pEncoding( pEncoding ), m_dDefWidth(0.0)
{
+ m_missingWidth = NULL;
+
# const PdfName & rSubType = pFont->GetDictionary().GetKey( PdfName::KeySubtype )->GetName();
#
# // OC 15.08.2010 BugFix: /FirstChar /LastChar /Widths are in the Font dictionary and not in the FontDescriptor
if( !pDescriptor )
{
PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
@@ -85,8 +87,8 @@
# if( widths == NULL )
# {
# PODOFO_RAISE_ERROR_INFO( ePdfError_NoObject, "Font object defines neither Widths, nor MissingWidth values!" );
#- m_missingWidth = widths;
# }
#+ m_missingWidth = widths;
# }
# } else if ( rSubType == PdfName("CIDFontType0") || rSubType == PdfName("CIDFontType2") ) {
# PdfObject *pObj = pDescriptor->GetIndirectKey( "FontName" );
if( widths == NULL )
{
PODOFO_RAISE_ERROR_INFO( ePdfError_NoObject, "Font object defines neither Widths, nor MissingWidth values!" );
- m_missingWidth = widths;
}
+ m_missingWidth = widths;
}
} else if ( rSubType == PdfName("CIDFontType0") || rSubType == PdfName("CIDFontType2") ) {
PdfObject *pObj = pDescriptor->GetIndirectKey( "FontName" );
Index: src/doc/PdfFontSimple.cpp
===================================================================
--- src/doc/PdfFontSimple.cpp (revision 1792)
+++ src/doc/PdfFontSimple.cpp (revision 1793)
@@ -56,6 +56,11 @@
void PdfFontSimple::Init( bool bEmbed, const PdfName & rsSubType )
{
+ if( !m_pEncoding )
+ {
+ PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
+ }
+
PdfObject* pWidth;
PdfObject* pDescriptor;
PdfVariant var;
#Index: src/doc/PdfFontTTFSubset.cpp
#===================================================================
#--- src/doc/PdfFontTTFSubset.cpp (revision 1792)
#+++ src/doc/PdfFontTTFSubset.cpp (revision 1793)
#@@ -173,7 +173,7 @@
# if (it->tag == tag)
# return it->offset;
# }
#- throw PdfError(ePdfError_InternalLogic, __FILE__, __LINE__, "table missing");
#+ PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "table missing" );
# }
#
# void PdfFontTTFSubset::GetNumberOfGlyphs()
#@@ -278,7 +278,7 @@
# }
# if ((tableMask & 0x3f )!= 0x3f) {
# //std::cout << "ttfTables=" << std::hex << tableMask << std::dec << std::endl;
#- throw PdfError(ePdfError_UnsupportedFontFormat, __FILE__, __LINE__, "Required TrueType table missing");
#+ PODOFO_RAISE_ERROR_INFO( ePdfError_UnsupportedFontFormat, "Required TrueType table missing" );
# }
# if ((tableMask & 0x0100 ) == 0x00) {
# tbl.tag = TTAG_cmap;
#@@ -311,7 +311,7 @@
# break;
# case eFontFileType_Unknown:
# default:
#- throw PdfError(ePdfError_InternalLogic, __FILE__, __LINE__, "Invalid font type");
#+ PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Invalid font type" );
# }
# }
#
#@@ -407,7 +407,7 @@
# }
# return;
# }
#- throw PdfError(ePdfError_InternalLogic, __FILE__, __LINE__, "GID out of range");
#+ PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "GID out of range" );
# }
#
# void PdfFontTTFSubset::LoadCompound(GlyphContext& ctx, unsigned long offset)
#@@ -522,7 +522,7 @@
# CodePointToGid::const_iterator it = usedCodes.lower_bound(gid);
# do {
# if (it == usedCodes.end()) {
#- throw PdfError(ePdfError_InternalLogic, __FILE__, __LINE__, "Unexpected");
#+ PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "Unexpected" );
# }
# m_sCMap.glyphArray.push_back(it->second);
# ++it;
#@@ -811,8 +811,8 @@
# //std::cout << " finalSize=" << tableOffset << " alloced=" << fontData.GetSize() << std::endl;
# /* head table */
# if (!headOffset) {
#- throw PdfError(ePdfError_InternalLogic, __FILE__, __LINE__, "'head' table missing");
#- }
#+ PODOFO_RAISE_ERROR_INFO( ePdfError_InternalLogic, "'head' table missing" );
#+ }
# TTFWriteUInt32(bufp + headOffset + 8, TableCheksum(bufp, tableLength) - 0xB1B0AFBA);
# }
#
Index: src/doc/PdfFontType1.cpp
===================================================================
--- src/doc/PdfFontType1.cpp (revision 1792)
+++ src/doc/PdfFontType1.cpp (revision 1793)
@@ -147,10 +147,25 @@
PODOFO_RAISE_ERROR_INFO( ePdfError_FileNotFound, m_pMetrics->GetFilename() );
}
- fseek( hFile, 0L, SEEK_END );
- lSize = ftell( hFile );
- fseek( hFile, 0L, SEEK_SET );
+ if( fseeko( hFile, 0L, SEEK_END ) == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the end of the file" );
+ }
+ lSize = ftello( hFile );
+ if( lSize == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read size of the file" );
+ }
+
+ if( fseeko( hFile, 0L, SEEK_SET ) == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the beginning of the file" );
+ }
+
# pAllocated = static_cast<char*>(podofo_calloc( lSize, sizeof(char) ));
pAllocated = static_cast<char*>(malloc( sizeof(char) * lSize ));
if( !pAllocated )
{
@@ -158,7 +173,14 @@
PODOFO_RAISE_ERROR( ePdfError_OutOfMemory );
}
- fread( pAllocated, sizeof(char), lSize, hFile );
+ if( static_cast<pdf_long>( fread( pAllocated, sizeof( char ), lSize, hFile ) ) != lSize )
+ {
+ podofo_free( pAllocated );
+ fclose( hFile );
+
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read whole file into the memory" );
+ }
+
fclose( hFile );
pBuffer = pAllocated;
@@ -437,10 +459,25 @@
PODOFO_RAISE_ERROR_INFO( ePdfError_FileNotFound, m_pMetrics->GetFilename() );
}
- fseek( hFile, 0L, SEEK_END );
- lSize = ftell( hFile );
- fseek( hFile, 0L, SEEK_SET );
+ if( fseeko( hFile, 0L, SEEK_END ) == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the end of the file" );
+ }
+ lSize = ftello( hFile );
+ if( lSize == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read size of the file" );
+ }
+
+ if( fseeko( hFile, 0L, SEEK_SET ) == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the beginning of the file" );
+ }
+
# pAllocated = static_cast<char*>(podofo_calloc( lSize, sizeof(char) ));
pAllocated = static_cast<char*>(malloc( sizeof(char) * lSize ));
if( !pAllocated )
{
@@ -448,7 +485,14 @@
PODOFO_RAISE_ERROR( ePdfError_OutOfMemory );
}
- fread( pAllocated, sizeof(char), lSize, hFile );
+ if( static_cast<pdf_long>( fread( pAllocated, sizeof( char ), lSize, hFile ) ) != lSize )
+ {
+ podofo_free( pAllocated );
+ fclose( hFile );
+
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read whole file into the memory" );
+ }
+
fclose( hFile );
pBuffer = pAllocated;
Index: src/doc/PdfFontType1Base14.cpp
===================================================================
--- src/doc/PdfFontType1Base14.cpp (revision 1792)
+++ src/doc/PdfFontType1Base14.cpp (revision 1793)
@@ -71,6 +71,11 @@
{
PdfVariant var;
+ if( !m_pEncoding )
+ {
+ PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
+ }
+
this->GetObject()->GetDictionary().AddKey( PdfName::KeySubtype, PdfName("Type1"));
# this->GetObject()->GetDictionary().AddKey("BaseFont", PdfName( pMetrics->GetFontname() ) );
#
this->GetObject()->GetDictionary().AddKey("BaseFont", this->GetBaseFont() );
#Index: src/doc/PdfIdentityEncoding.cpp
#===================================================================
#--- src/doc/PdfIdentityEncoding.cpp (revision 1792)
#+++ src/doc/PdfIdentityEncoding.cpp (revision 1793)
#@@ -127,8 +127,9 @@
# else
# {
# PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
#- return PdfRefCountedBuffer();
# }
#+
#+ return PdfRefCountedBuffer();
# }
#
# }; /* namespace PoDoFo */
Index: src/doc/PdfImage.cpp
===================================================================
--- src/doc/PdfImage.cpp (revision 1792)
+++ src/doc/PdfImage.cpp (revision 1793)
@@ -857,8 +857,8 @@
# {
# FILE* hFile = pInStream->GetHandle();
# png_byte header[8];
#- fread(header, 1, 8, hFile);
#- if( png_sig_cmp(header, 0, 8) )
#+ if( fread( header, 1, 8, hFile ) != 8 ||
#+ png_sig_cmp( header, 0, 8 ) )
# {
# PODOFO_RAISE_ERROR_INFO( ePdfError_UnsupportedImageFormat, "The file could not be recognized as a PNG file." );
# }
}
png_byte header[8];
- fread(header, 1, 8, hFile);
- if( png_sig_cmp(header, 0, 8) )
+ if( fread( header, 1, 8, hFile ) != 8 ||
+ png_sig_cmp( header, 0, 8 ) )
{
fclose( hFile );
PODOFO_RAISE_ERROR_INFO( ePdfError_UnsupportedImageFormat, "The file could not be recognized as a PNG file." );
Index: src/doc/PdfPagesTree.cpp
===================================================================
--- src/doc/PdfPagesTree.cpp (revision 1792)
+++ src/doc/PdfPagesTree.cpp (revision 1793)
@@ -836,7 +836,7 @@
}
// we should never exit from here - we should always have been able to return a page from above
- // assert( false ) ;
+ // PODOFO_ASSERT( false ) ;
return NULL;
}
*/
Index: src/doc/PdfPainter.cpp
===================================================================
--- src/doc/PdfPainter.cpp (revision 1792)
+++ src/doc/PdfPainter.cpp (revision 1793)
@@ -146,7 +146,7 @@
PdfError::LogMessage( eLogSeverity_Error,
"PdfPainter::~PdfPainter(): FinishPage() has to be called after a page is completed!" );
- assert(!m_pCanvas);
+ PODOFO_ASSERT( !m_pCanvas );
}
void PdfPainter::SetPage( PdfCanvas* pPage )
@@ -187,7 +187,7 @@
try {
if( m_pCanvas )
m_pCanvas->EndAppend();
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
// clean up, even in case of error
m_pCanvas = NULL;
m_pPage = NULL;
@@ -994,11 +994,11 @@
// fast and easy individual characters access
const std::string& stringUtf8 = rsText.GetStringUtf8();
std::vector<pdf_utf16be> stringUtf16(stringUtf8.length() + 1, 0);
- assert(stringUtf16.size() > 0);
+ PODOFO_ASSERT( stringUtf16.size() > 0 );
const pdf_long converted = PdfString::ConvertUTF8toUTF16(
reinterpret_cast<const pdf_utf8*>(stringUtf8.c_str()), &stringUtf16[0], stringUtf16.size());
//const pdf_long len = rsText.GetCharacterLength();
- assert( converted == (rsText.GetCharacterLength() + 1) );
+ PODOFO_ASSERT( converted == (rsText.GetCharacterLength() + 1) );
const pdf_utf16be* const stringUtf16Begin = &stringUtf16[0];
const pdf_utf16be* pszLineBegin = stringUtf16Begin;
Index: test/ContentParser/main.cpp
===================================================================
--- test/ContentParser/main.cpp (revision 1792)
+++ test/ContentParser/main.cpp (revision 1793)
@@ -173,7 +173,7 @@
cout << " - page ok" << endl;
}
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
e.PrintErrorMsg();
return e.GetError();
Index: test/CreationTest/CreationTest.cpp
===================================================================
--- test/CreationTest/CreationTest.cpp (revision 1792)
+++ test/CreationTest/CreationTest.cpp (revision 1793)
@@ -20,8 +20,9 @@
#include "../PdfTest.h"
-#include <stdlib.h>
+#include <cstdlib>
#include <cstdio>
+#include <iostream>
using namespace PoDoFo;
@@ -36,7 +37,7 @@
pdf_long lLen = 0;
char* pBuffer = NULL;
- std::auto_ptr<PdfFilter> pFilter = PdfFilterFactory::Create( ePdfFilter_ASCIIHexDecode );
+ std::auto_ptr<PdfFilter> pFilter = PdfFilterFactory::Create( ePdfFilter_ASCIIHexDecode );
pFilter->Encode( buffer.GetBuffer(), buffer.GetSize(), &pBuffer, &lLen );
oss << "<";
@@ -49,7 +50,7 @@
# void CreateUnicodeAnnotationText( PdfPage* pPage, PdfDocument* /*pDocument*/ )
void CreateUnicodeAnnotationText( PdfPage* pPage, PdfDocument* pDocument )
{
PdfString sJap(reinterpret_cast<const pdf_utf8*>("「PoDoFo」は今から日本語も話せます。"));
- PdfAnnotation* pAnnotation =
+ PdfAnnotation* pAnnotation =
pPage->CreateAnnotation( ePdfAnnotation_Text, PdfRect( 400.0, 200.0, 20.0, 20.0 ) );
PdfString sGerman(reinterpret_cast<const pdf_utf8*>("Unicode Umlauts: ÄÖÜß"));
@@ -61,12 +62,12 @@
void CreateUnicodeAnnotationFreeText( PdfPage* pPage, PdfDocument* pDocument )
{
PdfString sJap(reinterpret_cast<const pdf_utf8*>("「PoDoFo」は今から日本語も話せます。"));
#- PdfFont* pFont = pDocument->CreateFont( "Arial Unicode MS", false, new PdfIdentityEncoding( 0, 0xffff, true ) );
- PdfFont* pFont = pDocument->CreateFont( "Arial Unicode MS", new PdfIdentityEncoding( 0, 0xffff, true ) );
#+ PdfFont* pFont = pDocument->CreateFont( "Arial Unicode MS", false, new PdfIdentityEncoding( 0, 0xffff, true ) );
+ PdfFont* pFont = pDocument->CreateFont( "Arial Unicode MS", new PdfIdentityEncoding( 0, 0xffff, true ) );
PdfRect rect( 200.0, 200.0, 200.0, 200.0 );
/*
PdfXObject xObj( rect, pDocument );
-
+
PdfPainter painter;
painter.SetPage( &xObj );
painter.SetFont( pFont );
@@ -90,7 +91,7 @@
PdfDictionary resources;
resources.AddKey( PdfName("Fonts"), fonts );
- PdfAnnotation* pAnnotation =
+ PdfAnnotation* pAnnotation =
pPage->CreateAnnotation( ePdfAnnotation_FreeText, rect );
PdfString sGerman(reinterpret_cast<const pdf_utf8*>("Unicode Umlauts: ÄÖÜß"));
@@ -99,8 +100,8 @@
//pAnnotation->SetAppearanceStream( &xObj );
pAnnotation->GetObject()->GetDictionary().AddKey( PdfName("DA"), PdfString(oss.str()) );
pAnnotation->GetObject()->GetDictionary().AddKey( PdfName("DR"), resources );
-
+
}
void LineTest( PdfPainter* pPainter, PdfPage* pPage, PdfDocument* pDocument )
@@ -265,10 +266,10 @@
double dStroke = 0.01;
double dLine = pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
#- for( i=0;i<23; i++ )
- for( int i=0;i<23; i++ )
+ for( i=0;i<23; i++ )
{
sprintf( buffer, "Linewidth: %.3fpt", dStroke );
- pPainter->DrawText( x, y, PdfString( buffer ) );
+ pPainter->DrawText( x, y, PdfString( buffer ) );
pPainter->Save();
pPainter->SetStrokeWidth( dStroke );
@@ -281,7 +282,7 @@
pPainter->Restore();
dStroke += 0.05;
-
+
y -= dLine*2.0;
}
}
@@ -400,7 +401,7 @@
pPainter->SetColor( 0.0, 0.0, 0.0 );
pPainter->DrawText( x, y, "Hallo Welt!" );
-
+
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
pPainter->GetFont()->SetUnderlined( true );
pPainter->SetStrokingColor( 1.0, 0.0, 0.0 );
@@ -410,10 +411,10 @@
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
pPainter->DrawText( x, y, "Disabled the underline again..." );
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
-
+
PdfFont* pFont = pDocument->CreateFont( "Arial" );
pFont->SetFontSize( 12.0 );
-
+
pPainter->SetFont( pFont );
pPainter->DrawText( x, y, "Normal" );
@@ -427,7 +428,7 @@
pFont->SetFontCharSpace( 100.0 );
pPainter->DrawText( x, y, "Mormal+spaced" );
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
-
+
pPainter->GetFont()->SetUnderlined( true );
pPainter->DrawText( x, y, "Normal+underlined+spaced" );
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
@@ -452,7 +453,7 @@
pPainter->DrawText( x, y, "Condensed+spaced" );
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
-
+
pPainter->GetFont()->SetUnderlined( true );
pPainter->DrawText( x, y, "Condensed+underlined+spaced" );
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
@@ -469,7 +470,7 @@
pPainter->GetFont()->SetUnderlined( true );
pPainter->DrawText( x, y, "Expanded+underlinded" );
y -= pPainter->GetFont()->GetFontMetrics()->GetLineSpacing();
-
+
pPainter->GetFont()->SetUnderlined( false );
pFont->SetFontCharSpace( 100.0 );
pPainter->DrawText( x, y, "Expanded+spaced" );
@@ -529,7 +530,7 @@
pnt.FinishPage();
printf("Drawing on the page!\n");
- // Draw onto the page
+ // Draw onto the page
#ifdef PODOFO_HAVE_JPEG_LIB
/*
#@@ -602,24 +603,24 @@
#
# pPainter->SetColor( 1.0, 0.8, 0.8 );
# pPainter->Rectangle( x, y - dHeight, dWidth, dHeight );
# pPainter->Fill();
#-
#+
# // Das funktioniert immer
# PdfXObject xObj1( "resources/Illust.pdf", 0, pDocument );
#- pPainter->DrawXObject( x + 90000 * CONVERSION_CONSTANT,
#+ pPainter->DrawXObject( x + 90000 * CONVERSION_CONSTANT,
# y - dHeight,
# &xObj1 );
# pPainter->SetColor( 1.0, 0.0, 0.0 );
#- pPainter->Rectangle( x + 90000 * CONVERSION_CONSTANT,
#+ pPainter->Rectangle( x + 90000 * CONVERSION_CONSTANT,
# y - dHeight,
# 1000 * CONVERSION_CONSTANT,
# 1000 * CONVERSION_CONSTANT );
# pPainter->Fill();
#-
#
#+
# // Test XObject in XObject
# PdfRect rectX( 0, 0, 50000 * CONVERSION_CONSTANT, 50000 * CONVERSION_CONSTANT );
# PdfXObject xObj3( rectX, pDocument );
# PdfXObject xObj4( rectX, pDocument );
#-
#+
# // Draw text onto the XObject3
# pPainter->SetPage( &xObj3 );
# pPainter->SetColor( 0.0, 1.0, 0.0 );
@@ -630,7 +631,7 @@
pPainter->SetColor( 0.0, 0.0, 0.0 );
pPainter->DrawText( 0, 1000 * CONVERSION_CONSTANT, "I am XObject 3." );
pPainter->FinishPage();
-
+
// Draw text and pdf onto the XObject4
pPainter->SetPage( &xObj4 );
pPainter->SetColor( 0.0, 1.0, 0.0 );
@@ -640,21 +641,21 @@
pPainter->SetColor( 0.0, 0.0, 0.0 );
pPainter->DrawText( 0, 1000 * CONVERSION_CONSTANT, "I am XObject 4." );
PdfXObject xObj5( "resources/Illust.pdf", 0, pDocument );
- pPainter->DrawXObject( 5000 * CONVERSION_CONSTANT,
- 5000 * CONVERSION_CONSTANT,
- &xObj5,
- 0.1,
+ pPainter->DrawXObject( 5000 * CONVERSION_CONSTANT,
+ 5000 * CONVERSION_CONSTANT,
+ &xObj5,
+ 0.1,
0.1 );
pPainter->FinishPage();
-
-
+
+
// Switch back to page and draw Xobject 3+4
pPainter->SetPage( pPage );
- pPainter->DrawXObject( 20000 * CONVERSION_CONSTANT,
- y - 60000 * CONVERSION_CONSTANT,
+ pPainter->DrawXObject( 20000 * CONVERSION_CONSTANT,
+ y - 60000 * CONVERSION_CONSTANT,
&xObj3 );
- pPainter->DrawXObject( 120000 * CONVERSION_CONSTANT,
- y - 60000 * CONVERSION_CONSTANT,
+ pPainter->DrawXObject( 120000 * CONVERSION_CONSTANT,
+ y - 60000 * CONVERSION_CONSTANT,
&xObj4 );
}
@@ -706,7 +707,7 @@
const int nRows = 10;
PdfSimpleTableModel model( nCols, nRows );
for(i=0;i<nCols;i++)
- for(z=0;z<nRows;z++)
+ for(z=0;z<nRows;z++)
{
std::ostringstream oss;
oss << "Cell " << i << " " << z;
@@ -730,7 +731,7 @@
model2.SetBackgroundColor( PdfColor( 0.3 ) );
model2.SetBackgroundEnabled( true );
for(i=0;i<nCols2;i++)
- for(z=0;z<nRows2;z++)
+ for(z=0;z<nRows2;z++)
{
std::ostringstream oss;
oss << rand();
#@@ -739,7 +740,7 @@
#
# PdfTable table2( nCols2, nRows2 );
# table2.SetModel( &model2 );
#- table2.Draw( dX, dY, pPainter );
#+ table2.Draw( dX, dY, pPainter );
# }
#
# void LargeMultiLineTextTest( PdfPainter* pPainter, PdfPage* pPage, PdfDocument* pDocument )
#@@ -776,7 +777,7 @@
# pPainter->Stroke();
#
# pFont->SetFontSize( 12.0 );
#- pPainter->DrawMultiLineText( x, y, dWidth, dHeight, sMultiLine, ePdfAlignment_Left, ePdfVerticalAlignment_Top );
#+ pPainter->DrawMultiLineText( x, y, dWidth, dHeight, sMultiLine, ePdfAlignment_Left, ePdfVerticalAlignment_Top );
#
# y = y - dHeight - dHeight / 2.0;
#
#@@ -821,167 +822,173 @@
# pFont->SetFontSize( 32.0 );
# pPainter->DrawText(x, y, "Subsetting in action!");
# }
#-
#-int main( int argc, char* argv[] )
#+
#+int main( int argc, char* argv[] )
# {
#- PdfMemDocument writer;
#- //PdfStreamedDocument writer ( argv[1], ePdfVersion_1_5, &PdfEncrypt( "dominik", "owner" ) );
#- PdfPage* pPage;
#- PdfPainter painter;
#- PdfPainterMM painterMM;
#- PdfOutlines* outlines;
#- PdfOutlineItem* pRoot;
#- if( argc != 2 )
#- {
#- printf("Usage: CreationTest [output_filename]\n");
#- return 0;
#- }
#+ try {
#+ PdfMemDocument writer;
#+ //PdfStreamedDocument writer ( argv[1], ePdfVersion_1_5, &PdfEncrypt( "dominik", "owner" ) );
#+ PdfPage* pPage;
#+ PdfPainter painter;
#+ PdfPainterMM painterMM;
#+ PdfOutlines* outlines;
#+ PdfOutlineItem* pRoot;
#+ if( argc != 2 )
#+ {
#+ printf("Usage: CreationTest [output_filename]\n");
#+ return 0;
#+ }
#
#- printf("This test tests the PdfWriter and PdfDocument classes.\n");
#- printf("It creates a new PdfFile from scratch.\n");
#- printf("---\n");
#+ printf("This test tests the PdfWriter and PdfDocument classes.\n");
#+ printf("It creates a new PdfFile from scratch.\n");
#+ printf("---\n");
#
#- printf("PoDoFo DataType Size Information:\n");
#- printf("---\n");
#- printf("sizeof variant=%lu\n", sizeof(PdfVariant) );
#- printf("sizeof object=%lu\n", sizeof(PdfObject) );
#- printf("sizeof reference=%lu\n", sizeof(PdfReference) );
#- printf("---\n\n");
#-
#- outlines = writer.GetOutlines();
#- pRoot = outlines->CreateRoot("PoDoFo Test Document" );
#+ printf("PoDoFo DataType Size Information:\n");
#+ printf("---\n");
#+ printf("sizeof variant=%lu\n", sizeof(PdfVariant) );
#+ printf("sizeof object=%lu\n", sizeof(PdfObject) );
#+ printf("sizeof reference=%lu\n", sizeof(PdfReference) );
#+ printf("---\n\n");
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->CreateChild( "Line Test", PdfDestination( pPage ) );
#+ outlines = writer.GetOutlines();
#+ pRoot = outlines->CreateRoot("PoDoFo Test Document" );
#
#- printf("Drawing the first page with various lines.\n");
#- TEST_SAFE_OP( LineTest( &painter, pPage, &writer ) );
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->CreateChild( "Line Test", PdfDestination( pPage ) );
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_Letter ) );
#- painter.SetPage( pPage );
#+ printf("Drawing the first page with various lines.\n");
#+ TEST_SAFE_OP( LineTest( &painter, pPage, &writer ) );
#
#- PdfString sLoremIpsum( pszLoremIpsum );
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_Letter ) );
#+ painter.SetPage( pPage );
#
#- painter.DrawMultiLineText( 50.0, 50.0,
#- pPage->GetMediaBox().GetWidth() - 100.0,
#- pPage->GetMediaBox().GetHeight() - 100.0, sLoremIpsum );
#- painter.FinishPage();
#+ PdfString sLoremIpsum( pszLoremIpsum );
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_Letter ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "Rectangles Test", PdfDestination( pPage ) );
#+ painter.DrawMultiLineText( 50.0, 50.0,
#+ pPage->GetMediaBox().GetWidth() - 100.0,
#+ pPage->GetMediaBox().GetHeight() - 100.0, sLoremIpsum );
#+ painter.FinishPage();
#
#- printf("Drawing the second page with various rectangle and triangles.\n");
#- TEST_SAFE_OP( RectTest( &painter, pPage, &writer ) );
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_Letter ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "Rectangles Test", PdfDestination( pPage ) );
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "Text Test", PdfDestination( pPage ) );
#+ printf("Drawing the second page with various rectangle and triangles.\n");
#+ TEST_SAFE_OP( RectTest( &painter, pPage, &writer ) );
#
#- printf("Drawing some text.\n");
#- TEST_SAFE_OP( TextTest( &painter, pPage, &writer ) );
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "Text Test", PdfDestination( pPage ) );
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "Image Test", PdfDestination( pPage ) );
#+ printf("Drawing some text.\n");
#+ TEST_SAFE_OP( TextTest( &painter, pPage, &writer ) );
#
#- printf("Drawing some images.\n");
#- TEST_SAFE_OP( ImageTest( &painter, pPage, &writer ) );
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "Image Test", PdfDestination( pPage ) );
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "Circle Test", PdfDestination( pPage ) );
#+ printf("Drawing some images.\n");
#+ TEST_SAFE_OP( ImageTest( &painter, pPage, &writer ) );
#
#- printf("Drawing some circles and ellipsis.\n");
#- TEST_SAFE_OP( EllipseTest( &painter, pPage, &writer ) );
#- painter.FinishPage();
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "Circle Test", PdfDestination( pPage ) );
#
#- printf("Drawing some XObject's.\n");
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- TEST_SAFE_OP( XObjectTest( &painter, pPage, &writer ) );
#- painter.FinishPage();
#+ printf("Drawing some circles and ellipsis.\n");
#+ TEST_SAFE_OP( EllipseTest( &painter, pPage, &writer ) );
#+ painter.FinishPage();
#
#- printf("Drawing using PdfTable.\n");
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "PdfTable Test", PdfDestination( pPage ) );
#- TEST_SAFE_OP( TableTest( &painter, pPage, &writer ) );
#- painter.FinishPage();
#+ printf("Drawing some XObject's.\n");
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ TEST_SAFE_OP( XObjectTest( &painter, pPage, &writer ) );
#+ painter.FinishPage();
#
#- printf("Drawing using PdfPainterMM.\n");
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painterMM.SetPage( pPage );
#- pRoot->Last()->CreateNext( "MM Test", PdfDestination( pPage ) );
#- TEST_SAFE_OP( MMTest( &painterMM, pPage, &writer ) );
#- painterMM.FinishPage();
#+ printf("Drawing using PdfTable.\n");
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "PdfTable Test", PdfDestination( pPage ) );
#+ TEST_SAFE_OP( TableTest( &painter, pPage, &writer ) );
#+ painter.FinishPage();
#
#- printf("Drawing using PdfPainter MultilineText.\n");
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "Large MultilineText Test", PdfDestination( pPage ) );
#- TEST_SAFE_OP( LargeMultiLineTextTest( &painter, pPage, &writer ) );
#- painter.FinishPage();
#+ printf("Drawing using PdfPainterMM.\n");
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painterMM.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "MM Test", PdfDestination( pPage ) );
#+ TEST_SAFE_OP( MMTest( &painterMM, pPage, &writer ) );
#+ painterMM.FinishPage();
#
#- printf("Drawing using Font Subset.\n");
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- painter.SetPage( pPage );
#- pRoot->Last()->CreateNext( "Font Subset Test", PdfDestination( pPage ) );
#- TEST_SAFE_OP( FontSubsetTest( &painter, pPage, &writer ) );
#- painter.FinishPage();
#-
#+ printf("Drawing using PdfPainter MultilineText.\n");
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "Large MultilineText Test", PdfDestination( pPage ) );
#+ TEST_SAFE_OP( LargeMultiLineTextTest( &painter, pPage, &writer ) );
#+ painter.FinishPage();
#+
#+ printf("Drawing using Font Subset.\n");
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ painter.SetPage( pPage );
#+ pRoot->Last()->CreateNext( "Font Subset Test", PdfDestination( pPage ) );
#+ TEST_SAFE_OP( FontSubsetTest( &painter, pPage, &writer ) );
#+ painter.FinishPage();
#+
# #if 0
#- /** Create a really large name tree to test the name tree implementation
#- */
#- for( int zz=1;zz<500;zz++ )
#- {
#- std::ostringstream oss;
#- oss << "A" << zz;
#+ /** Create a really large name tree to test the name tree implementation
#+ */
#+ for( int zz=1;zz<500;zz++ )
#+ {
#+ std::ostringstream oss;
#+ oss << "A" << zz;
#
#- writer.GetNamesTree()->AddValue( "TestDict", PdfString( oss.str() ), PdfVariant( static_cast<long>(zz) ) );
#- }
#+ writer.GetNamesTree()->AddValue( "TestDict", PdfString( oss.str() ), PdfVariant( static_cast<long>(zz) ) );
#+ }
#
#- writer.GetNamesTree()->AddValue( "TestDict", PdfString( "Berta" ), PdfVariant( 42L ) );
#+ writer.GetNamesTree()->AddValue( "TestDict", PdfString( "Berta" ), PdfVariant( 42L ) );
# #endif
#
#- printf("Setting document informations.\n\n");
#- // Setup the document information dictionary
#- TEST_SAFE_OP( writer.GetInfo()->SetCreator ( PdfString("CreationTest - A simple test application") ) );
#- TEST_SAFE_OP( writer.GetInfo()->SetAuthor ( PdfString("Dominik Seichter") ) );
#- TEST_SAFE_OP( writer.GetInfo()->SetTitle ( PdfString("Test Document") ) );
#- //TEST_SAFE_OP( writer.GetInfo()->SetSubject ( PdfString("Testing the PDF Library") ) );
#- TEST_SAFE_OP( writer.GetInfo()->SetSubject (
#- PdfString(reinterpret_cast<const pdf_utf8*>("「PoDoFo」は今から日本語も話せます。") ) ) );
#- TEST_SAFE_OP( writer.GetInfo()->SetKeywords( PdfString("Test;PDF;") ) );
#+ printf("Setting document informations.\n\n");
#+ // Setup the document information dictionary
#+ TEST_SAFE_OP( writer.GetInfo()->SetCreator ( PdfString("CreationTest - A simple test application") ) );
#+ TEST_SAFE_OP( writer.GetInfo()->SetAuthor ( PdfString("Dominik Seichter") ) );
#+ TEST_SAFE_OP( writer.GetInfo()->SetTitle ( PdfString("Test Document") ) );
#+ //TEST_SAFE_OP( writer.GetInfo()->SetSubject ( PdfString("Testing the PDF Library") ) );
#+ TEST_SAFE_OP( writer.GetInfo()->SetSubject (
#+ PdfString(reinterpret_cast<const pdf_utf8*>("「PoDoFo」は今から日本語も話せます。") ) ) );
#+ TEST_SAFE_OP( writer.GetInfo()->SetKeywords( PdfString("Test;PDF;") ) );
#
#- //xTEST_SAFE_OP( writer.AttachFile( PdfFileSpec("../../../podofo/test/CreationTest/CreationTest.cpp", true, &writer ) ) );
#+ //xTEST_SAFE_OP( writer.AttachFile( PdfFileSpec("../../../podofo/test/CreationTest/CreationTest.cpp", true, &writer ) ) );
#
#- TEST_SAFE_OP( writer.Write( argv[1] ) );
#- //TEST_SAFE_OP( writer.Close() );
#+ TEST_SAFE_OP( writer.Write( argv[1] ) );
#+ //TEST_SAFE_OP( writer.Close() );
#
# #ifdef TEST_MEM_BUFFER
#- // ---
#- const char* pszMemFile = "./mem_out.pdf";
#- FILE* hFile;
#+ // ---
#+ const char* pszMemFile = "./mem_out.pdf";
#+ FILE* hFile;
#
#- PdfRefCountedBuffer buffer;
#- PdfOutputDevice device( &buffer );
#- printf("Writing document from a memory buffer to: %s\n", pszMemFile );
#- TEST_SAFE_OP( writer.Write( &device ) );
#+ PdfRefCountedBuffer buffer;
#+ PdfOutputDevice device( &buffer );
#+ printf("Writing document from a memory buffer to: %s\n", pszMemFile );
#+ TEST_SAFE_OP( writer.Write( &device ) );
#
#- hFile = fopen( pszMemFile, "wb" );
#- if( !hFile )
#- {
#- fprintf( stderr, "Cannot open file %s for writing.\n", pszMemFile );
#- return ePdfError_InvalidHandle;
#- }
#+ hFile = fopen( pszMemFile, "wb" );
#+ if( !hFile )
#+ {
#+ fprintf( stderr, "Cannot open file %s for writing.\n", pszMemFile );
#+ return ePdfError_InvalidHandle;
#+ }
#
#- long lBufferLen = device.GetLength();
#- printf("lBufferLen=%li\n", lBufferLen );
#- printf("Wrote=%i\n", static_cast<int>(fwrite( buffer.GetBuffer(), lBufferLen, sizeof( char ), hFile )) );
#- fclose( hFile );
#+ long lBufferLen = device.GetLength();
#+ printf("lBufferLen=%li\n", lBufferLen );
#+ printf("Wrote=%i\n", static_cast<int>(fwrite( buffer.GetBuffer(), lBufferLen, sizeof( char ), hFile )) );
#+ fclose( hFile );
# #endif
#+ } catch( PdfError & e ) {
#+ std::cerr << "Error: An error " << e.GetError() << " ocurred." << std::endl;
#+ e.PrintErrorMsg();
#+ return e.GetError();
#+ }
#
# return 0;
# }
Index: test/FilterTest/FilterTest.cpp
===================================================================
--- test/FilterTest/FilterTest.cpp (revision 1792)
+++ test/FilterTest/FilterTest.cpp (revision 1793)
@@ -34,7 +34,7 @@
// We treat the buffer as _excluding_ the trailing \0
const pdf_long lTestLength1 = strlen(pTestBuffer1);
-const char pTestBuffer2[] = {
+const char pTestBuffer2[] = {
0x01, 0x64, 0x65, static_cast<char>(0xFE), 0x6B, static_cast<char>(0x80), 0x45, 0x32,
static_cast<char>(0x88), 0x12, static_cast<char>(0x71), static_cast<char>(0xEA), 0x01,
0x01, 0x64, 0x65, static_cast<char>(0xFE), 0x6B, static_cast<char>(0x80), 0x45, 0x32,
# 0x01, 0x64, 0x65, 0xFE, 0x6B, 0x80, 0x45, 0x32, 0x88, 0x12, 0x71, 0xEA, 0x01,
# 0x01, 0x64, 0x65, 0xFE, 0x6B, 0x80, 0x45, 0x32, 0x88, 0x12, 0x71, 0xEA, 0x03,
# 0x01, 0x64, 0x65, 0xFE, 0x6B, 0x80, 0x45, 0x32, 0x88, 0x12, 0x71, 0xEA, 0x02,
@@ -56,7 +56,7 @@
char* pDecoded;
pdf_long lEncoded;
pdf_long lDecoded;
-
+
std::auto_ptr<PdfFilter> pFilter = PdfFilterFactory::Create( eFilter );
if( !pFilter.get() )
{
@@ -69,7 +69,7 @@
try {
pFilter->Encode( pTestBuffer, lTestLength, &pEncoded, &lEncoded );
} catch( PdfError & e ) {
- if( e == ePdfError_UnsupportedFilter )
+ if( e == ePdfError_UnsupportedFilter )
{
printf("\t-> Encoding not supported for filter %i.\n", eFilter );
return;
@@ -85,7 +85,7 @@
try {
pFilter->Decode( pEncoded, lEncoded, &pDecoded, &lDecoded );
} catch( PdfError & e ) {
- if( e == ePdfError_UnsupportedFilter )
+ if( e == ePdfError_UnsupportedFilter )
{
printf("\t-> Decoding not supported for filter %i.\n", eFilter);
return;
@@ -101,7 +101,7 @@
printf("\t-> Encoded Data Length: %li\n", lEncoded );
printf("\t-> Decoded Data Length: %li\n", lDecoded );
- if( static_cast<pdf_long>(lTestLength) != lDecoded )
+ if( static_cast<pdf_long>(lTestLength) != lDecoded )
{
fprintf( stderr, "Error: Decoded Length != Original Length\n");
@@ -147,7 +147,7 @@
PdfMemoryOutputStream stream;
PdfOutputStream* pEncode = PdfFilterFactory::CreateEncodeStream( filters, &stream );
-
+
pEncode->Write( pBuffer, lLen );
pEncode->Close();
@@ -158,10 +158,10 @@
PdfMemoryOutputStream stream2;
PdfOutputStream* pDecode = PdfFilterFactory::CreateDecodeStream( filters, &stream2 );
-
+
pDecode->Write( pEncoded, lEncoded );
pDecode->Close();
-
+
delete pDecode;
lDecoded = stream2.GetLength();
@@ -171,7 +171,7 @@
printf("\t-> Encoded Data Length: %li\n", lEncoded );
printf("\t-> Decoded Data Length: %li\n", lDecoded );
- if( lDecoded != lLen )
+ if( lDecoded != lLen )
{
fprintf( stderr, "Error: Decoded data length does not match original data length.\n");
PODOFO_RAISE_ERROR( ePdfError_TestFailed );
@@ -209,7 +209,7 @@
printf("\t-> Encoded Data Length: %lu\n", stream.GetLength() );
printf("\t-> Decoded Data Length: %li\n", lDecoded );
- if( lDecoded != lLen )
+ if( lDecoded != lLen )
{
fprintf( stderr, "Error: Decoded data length does not match original data length.\n");
PODOFO_RAISE_ERROR( ePdfError_TestFailed );
@@ -225,13 +225,13 @@
}
free( pDecoded );
-
-
+
+
}
} // end anon namespace
-int main()
+int main()
{
printf("This test tests all filters of PoDoFo\n");
printf("---\n");
@@ -247,7 +247,7 @@
printf("ePdfFilter_JPXDecode = 8\n");
printf("ePdfFilter_Crypt = 9\n");
- // Data from stream of obj 9 0 R
+ // Data from stream of obj 9 0 R
const char pszInputAscii85Lzw[] = "J..)6T`?q0\"W37&!thJ^C,m/iL/?:-g&uFOK1b,*F;>>qM[VuU#oJ230p2o6!o^dK\r=tpu7Tr'VZ1gWb9&Im[N#Q~>";
pdf_long lLargeBufer1 = strlen(pszInputAscii85Lzw) * 6;
@@ -255,35 +255,35 @@
char* pLargeBuffer1 = static_cast<char*>(malloc( strlen(pszInputAscii85Lzw) * 6 ));
char* pLargeBuffer2 = static_cast<char*>(malloc( strlen(pszInputAscii85Lzw) * 6 ));
- std::auto_ptr<PdfFilter> pFilter = PdfFilterFactory::Create( ePdfFilter_ASCII85Decode );
- pFilter->Decode( pszInputAscii85Lzw, strlen(pszInputAscii85Lzw),
- &pLargeBuffer1, &lLargeBufer1 );
- pFilter->Encode( pLargeBuffer1, lLargeBufer1,
- &pLargeBuffer2, &lLargeBufer2 );
+ try {
+ std::auto_ptr<PdfFilter> pFilter = PdfFilterFactory::Create( ePdfFilter_ASCII85Decode );
+ pFilter->Decode( pszInputAscii85Lzw, strlen(pszInputAscii85Lzw),
+ &pLargeBuffer1, &lLargeBufer1 );
+ pFilter->Encode( pLargeBuffer1, lLargeBufer1,
+ &pLargeBuffer2, &lLargeBufer2 );
- if( memcmp( pszInputAscii85Lzw, pLargeBuffer2, lLargeBufer2 ) != 0 )
- {
- printf("\tROACH -> Original Data: <%s>\n", pszInputAscii85Lzw );
- printf("\tROACH -> Encoded Data: <%s>\n", pLargeBuffer1 );
- printf("\tROACH -> Decoded Data: <%s>\n", pLargeBuffer2 );
+ if( memcmp( pszInputAscii85Lzw, pLargeBuffer2, lLargeBufer2 ) != 0 )
+ {
+ printf("\tROACH -> Original Data: <%s>\n", pszInputAscii85Lzw );
+ printf("\tROACH -> Encoded Data: <%s>\n", pLargeBuffer1 );
+ printf("\tROACH -> Decoded Data: <%s>\n", pLargeBuffer2 );
- fprintf( stderr, "Error: Decoded Data does not match original data.\n");
- PODOFO_RAISE_ERROR( ePdfError_TestFailed );
- }
+ fprintf( stderr, "Error: Decoded Data does not match original data.\n");
+ PODOFO_RAISE_ERROR( ePdfError_TestFailed );
+ }
- if( static_cast<pdf_long>(strlen(pszInputAscii85Lzw)) != lLargeBufer2 )
- {
- fprintf( stderr, "ROACH Error: Decoded Length != Original Length\n");
- fprintf( stderr, "ROACH Original: %li\n", strlen(pszInputAscii85Lzw) );
- fprintf( stderr, "ROACH Encode: %li\n", lLargeBufer2 );
- PODOFO_RAISE_ERROR( ePdfError_TestFailed );
- }
+ if( static_cast<pdf_long>(strlen(pszInputAscii85Lzw)) != lLargeBufer2 )
+ {
+ fprintf( stderr, "ROACH Error: Decoded Length != Original Length\n");
+ fprintf( stderr, "ROACH Original: %li\n", strlen(pszInputAscii85Lzw) );
+ fprintf( stderr, "ROACH Encode: %li\n", lLargeBufer2 );
+ PODOFO_RAISE_ERROR( ePdfError_TestFailed );
+ }
- // ASCII 85 decode and re-encode delivers same results
- printf("ROACH ASCII encode/decode OK\n");
+ // ASCII 85 decode and re-encode delivers same results
+ printf("ROACH ASCII encode/decode OK\n");
- try {
for( int i =0; i<=ePdfFilter_Crypt; i++ )
{
test_filter( static_cast<EPdfFilter>(i), pTestBuffer1, lTestLength1 );
@@ -293,7 +293,7 @@
test_filter_queque( pTestBuffer1, lTestLength1 );
test_filter_queque( pTestBuffer2, lTestLength2 );
-
+
test_stream( pTestBuffer1, lTestLength1 );
test_stream( pTestBuffer2, lTestLength2 );
Index: test/FormTest/FormTest.cpp
===================================================================
--- test/FormTest/FormTest.cpp (revision 1792)
+++ test/FormTest/FormTest.cpp (revision 1793)
@@ -55,7 +55,7 @@
// Name
y -= 10000.0 * CONVERSION_CONSTANT;
painter.DrawText( x, y, "Your Name:" );
- PdfTextField textName( pPage, PdfRect( 80000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
+ PdfTextField textName( pPage, PdfRect( 80000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
80000.0 * CONVERSION_CONSTANT, h ), pDoc );
textName.SetFieldName("field_name");
textName.SetBorderColor( 1.0 );
@@ -63,16 +63,16 @@
// E-Mail
y -= 10000.0 * CONVERSION_CONSTANT;
painter.DrawText( x, y, "E-Mail Address:" );
- PdfTextField textMail( pPage, PdfRect( 80000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
+ PdfTextField textMail( pPage, PdfRect( 80000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
80000.0 * CONVERSION_CONSTANT, h ), pDoc );
textMail.SetFieldName("field_mail");
textMail.SetBorderColor( 1.0 );
-
+
// Interest
y -= 10000.0 * CONVERSION_CONSTANT;
painter.DrawText( x, y, "Job:" );
- PdfComboBox comboJob( pPage, PdfRect( 80000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
+ PdfComboBox comboJob( pPage, PdfRect( 80000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
80000.0 * CONVERSION_CONSTANT, h ), pDoc );
comboJob.SetFieldName("field_combo");
comboJob.SetBorderColor( 1.0 );
@@ -85,7 +85,7 @@
// Open Source
y -= 11000.0 * CONVERSION_CONSTANT;
painter.DrawText( x, y, "I wan't to use PoDoFo in an Open Source application" );
- PdfCheckBox checkOpenSource( pPage, PdfRect( 120000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
+ PdfCheckBox checkOpenSource( pPage, PdfRect( 120000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
h, h ), pDoc );
checkOpenSource.SetFieldName("field_check_oss");
@@ -92,7 +92,7 @@
// Commercial
y -= 11000.0 * CONVERSION_CONSTANT;
painter.DrawText( x, y, "I wan't to use PoDoFo in a commercial application" );
- PdfCheckBox checkCom( pPage, PdfRect( 120000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
+ PdfCheckBox checkCom( pPage, PdfRect( 120000.0 * CONVERSION_CONSTANT, y - 2500.0 * CONVERSION_CONSTANT,
h, h ), pDoc );
checkCom.SetFieldName("field_check_com");
@@ -118,10 +118,10 @@
buttonClear.SetBackgroundColor( 0.5 );
PdfAction actionClear( ePdfAction_JavaScript, pDoc );
- actionClear.SetScript(
+ actionClear.SetScript(
PdfString("this.getField(\"field_name\").value = \"\";" \
"this.getField(\"field_mail\").value = \"\";" \
- "this.getField(\"field_combo\").value = \"\";"
+ "this.getField(\"field_combo\").value = \"\";"
"this.getField(\"field_check_oss.\").checkThisBox( 0, false );" \
"this.getField(\"field_check_com.\").checkThisBox( 0, false );" \
"this.getField(\"field_comment\").value = \"\";" ) );
@@ -128,11 +128,11 @@
buttonClear.SetMouseDownAction( actionClear );
-
+
PdfAction actionSubmit( ePdfAction_SubmitForm, pDoc );
buttonSend.SetMouseDownAction( actionSubmit );
-
+
painter.FinishPage();
}
@@ -156,7 +156,7 @@
PdfAction action( ePdfAction_JavaScript, pDoc );
- action.SetScript(
+ action.SetScript(
PdfString("var str = this.getField(\"TextFieldName\").value;" \
"var j = 4*5;" \
"app.alert(\"Hello World! 4 * 5 = \" + j + \" Text Field: \" + str );") );
@@ -201,7 +201,7 @@
listBox.SetSelectedItem( 2 );
}
-void FillTextField( PdfTextField & rField )
+void FillTextField( PdfTextField & rField )
{
const char* pszCur = rField.GetText().GetString();
std::cout << " Current value:" << (pszCur ? pszCur : "") << std::endl;
@@ -224,13 +224,13 @@
}
}
-void FillListField( PdfListField & rField )
+void FillListField( PdfListField & rField )
{
- const char* pszCur = ( rField.GetSelectedItem() == -1 ? NULL :
+ const char* pszCur = ( rField.GetSelectedItem() == -1 ? NULL :
rField.GetItemDisplayText( rField.GetSelectedItem() ).GetString() );
std::cout << " Current value:" << (pszCur ? pszCur : "") << std::endl;
std::cout << " Values:" << std::endl;
-
+
for( int i=0;i<static_cast<int>(rField.GetItemCount());i++ )
{
pszCur = rField.GetItemDisplayText( i ).GetString();
@@ -245,7 +245,7 @@
rField.SetSelectedItem( nValue );
}
-void FillForm( const char* pszFilename, const char* pszOutput )
+void FillForm( const char* pszFilename, const char* pszOutput )
{
PdfMemDocument doc( pszFilename );
PdfPage* pPage;
@@ -281,7 +281,7 @@
case ePdfField_TextField:
{
std::cout << "TextField" << std::endl;
- PdfTextField text( field );
+ PdfTextField text( field );
FillTextField( text );
break;
}
@@ -289,7 +289,7 @@
{
std::cout << "ComboBox" << std::endl;
PdfListField lst( field );
- FillListField( lst );
+ FillListField( lst );
break;
}
case ePdfField_ListBox:
@@ -296,7 +296,7 @@
{
std::cout << "ListBox" << std::endl;
PdfListField lst( field );
- FillListField( lst );
+ FillListField( lst );
break;
}
case ePdfField_Signature:
@@ -315,7 +315,7 @@
doc.Write( pszOutput );
}
-int main( int argc, char* argv[] )
+int main( int argc, char* argv[] )
{
PdfPage* pPage;
@@ -323,26 +323,32 @@
{
printf("Usage: FormTest [output_filename]\n");
printf(" - Create a new example PDF form\n");
- printf(" Formtest [input_filename] [output_filename]\n");
+ printf(" Formtest [input_filename] [output_filename]\n");
printf(" - Fill out an existing form and save it to a PDF file\n");
return 0;
}
- if( argc == 3 )
- {
- TEST_SAFE_OP( FillForm( argv[1], argv[2] ) );
- }
- else
- {
- PdfStreamedDocument writer( argv[1] );
+ try {
+ if( argc == 3 )
+ {
+ TEST_SAFE_OP( FillForm( argv[1], argv[2] ) );
+ }
+ else
+ {
+ PdfStreamedDocument writer( argv[1] );
- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
- TEST_SAFE_OP( CreateComplexForm( pPage, &writer ) );
+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
+ TEST_SAFE_OP( CreateComplexForm( pPage, &writer ) );
- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
- TEST_SAFE_OP( CreateSimpleForm( pPage, &writer ) );
+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
+ TEST_SAFE_OP( CreateSimpleForm( pPage, &writer ) );
- TEST_SAFE_OP( writer.Close() );
+ TEST_SAFE_OP( writer.Close() );
+ }
+ } catch( PdfError & e ) {
+ std::cerr << "Error: An error " << e.GetError() << " ocurred." << std::endl;
+ e.PrintErrorMsg();
+ return e.GetError();
}
return 0;
Index: test/LargeTest/LargeTest.cpp
===================================================================
--- test/LargeTest/LargeTest.cpp (revision 1792)
+++ test/LargeTest/LargeTest.cpp (revision 1793)
@@ -39,7 +39,7 @@
try {
pFont = pDoc->CreateFont( pszFontName );
- } catch ( const PdfError & e ) {
+ } catch ( PdfError & e ) {
e.PrintErrorMsg();
return;
}
@@ -86,7 +86,7 @@
try {
pImage->LoadFromFile( pszImagePath );
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
e.PrintErrorMsg();
}
Index: test/ObjectParserTest/ObjectParserTest.cpp
===================================================================
--- test/ObjectParserTest/ObjectParserTest.cpp (revision 1792)
+++ test/ObjectParserTest/ObjectParserTest.cpp (revision 1793)
@@ -206,7 +206,7 @@
cerr << " -> Has Stream, loading ... " << flush;
PdfMemStream * const ps = dynamic_cast<PdfMemStream*>(obj.GetStream());
- assert(ps);
+ PODOFO_ASSERT(ps);
cerr << " ok, length: " << ps->GetLength() << endl;
ps->GetFilteredCopy( &pBuffer, &lLen );
@@ -214,6 +214,8 @@
cerr << "Data:\n" << endl;
cerr.write( pBuffer, lLen );
cerr << "\n====\n" << endl;
+
+ podofo_free( pBuffer );
}
string str;
@@ -297,7 +299,7 @@
// This may only be used for objects without associated streams.
void TestObject_String( const string & sData, long lObjNo, long lGenNo, const char * expectedData )
{
- TestObject_String(sData, lObjNo, lGenNo, expectedData != NULL, string(expectedData), false);
+ TestObject_String(sData, lObjNo, lGenNo, expectedData != NULL, string( expectedData ? expectedData : "" ), false);
}
// Test an object stored in a file against the expected value, also a file (if provided).
@@ -404,7 +406,7 @@
"endobj\n";
// Comment tokenizer test adapted from PDF Reference, section 3.1.2 . Should parse as [ /abc 123 ] .
-const char* pszCommentObject = "91 0 obj\n[/abc\% comment {/%) blah blah blah\n123]\nendobj\n";
+const char* pszCommentObject = "91 0 obj\n[/abc% comment {/%) blah blah blah\n123]\nendobj\n";
// Use a FULL statement in this macro, it will not add any trailing
// semicolons etc.
Index: test/ParserTest/ParserTest.cpp
===================================================================
--- test/ParserTest/ParserTest.cpp (revision 1792)
+++ test/ParserTest/ParserTest.cpp (revision 1793)
@@ -205,7 +205,7 @@
parser.SetPassword( pw );
bIncorrectPw = false;
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
if( e.GetError() == ePdfError_InvalidPassword )
{
cout << endl << "Password :";
Index: test/SignTest/SignTest.cpp
===================================================================
--- test/SignTest/SignTest.cpp (revision 1792)
+++ test/SignTest/SignTest.cpp (revision 1793)
@@ -51,7 +51,7 @@
}
-int main( int argc, char* argv[] )
+int main( int argc, char* argv[] )
{
PdfPage* pPage;
@@ -62,42 +62,47 @@
return 0;
}
- PdfSignOutputDevice signer(argv[1]);
- // Reserve space for signature
- signer.SetSignatureSize(1024);
+ try {
+ PdfSignOutputDevice signer(argv[1]);
+ // Reserve space for signature
+ signer.SetSignatureSize(1024);
- PdfStreamedDocument writer( &signer, PoDoFo::ePdfVersion_1_5 );
- // Disable default appearance
- writer.GetAcroForm(ePdfCreateObject, PdfAcroForm::ePdfAcroFormDefaultAppearance_None);
+ PdfStreamedDocument writer( &signer, PoDoFo::ePdfVersion_1_5 );
+ // Disable default appearance
+ writer.GetAcroForm(ePdfCreateObject, PdfAcroForm::ePdfAcroFormDefaultAppearance_None);
- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
- TEST_SAFE_OP( CreateSimpleForm( pPage, &writer, *signer.GetSignatureBeacon() ) );
+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
+ TEST_SAFE_OP( CreateSimpleForm( pPage, &writer, *signer.GetSignatureBeacon() ) );
- TEST_SAFE_OP( writer.Close() );
+ TEST_SAFE_OP( writer.Close() );
- // Adjust ByteRange for signature
- if(signer.HasSignaturePosition()) {
- signer.AdjustByteRange();
-
- // read data for signature and count it
- signer.Seek(0);
+ // Adjust ByteRange for signature
+ if(signer.HasSignaturePosition()) {
+ signer.AdjustByteRange();
- // generate digest and count signature
- // use NSS, MS Crypto API or OpenSSL
- // to generate signature in DER format
- char buff[65536];
- size_t len;
- while( (len = signer.ReadForSignature(buff, 65536))>0 )
- {
- }
+ // read data for signature and count it
+ signer.Seek(0);
- // Paste signature to the file
- PdfData sigData("my-real-signature");
- signer.SetSignature(sigData);
- }
+ // generate digest and count signature
+ // use NSS, MS Crypto API or OpenSSL
+ // to generate signature in DER format
+ char buff[65536];
+ size_t len;
+ while( (len = signer.ReadForSignature(buff, 65536))>0 )
+ {
+ }
- signer.Flush();
+ // Paste signature to the file
+ PdfData sigData("my-real-signature");
+ signer.SetSignature(sigData);
+ }
+ signer.Flush();
+ } catch( PdfError & e ) {
+ std::cerr << "Error: An error " << e.GetError() << " ocurred." << std::endl;
+ e.PrintErrorMsg();
+ return e.GetError();
+ }
return 0;
}
Index: test/SignatureTest/SignTest.cpp
===================================================================
--- test/SignatureTest/SignTest.cpp (revision 1792)
+++ test/SignatureTest/SignTest.cpp (revision 1793)
@@ -79,7 +79,7 @@
}
-int main( int argc, char* argv[] )
+int main( int argc, char* argv[] )
{
PdfPage* pPage;
#@@ -90,75 +90,80 @@
# return 0;
# }
#
#- PdfSignOutputDevice signer(argv[1]);
#- // Reserve space for signature
#- signer.SetSignatureSize(1024);
#+ try {
#+ PdfSignOutputDevice signer(argv[1]);
#+ // Reserve space for signature
#+ signer.SetSignatureSize(1024);
#
#- PdfStreamedDocument writer( &signer, PoDoFo::ePdfVersion_1_5 );
#- // Disable default appearance
#- writer.GetAcroForm(ePdfCreateObject, ePdfAcroFormDefaultAppearance_None);
#+ PdfStreamedDocument writer( &signer, PoDoFo::ePdfVersion_1_5 );
#+ // Disable default appearance
#+ writer.GetAcroForm(ePdfCreateObject, ePdfAcroFormDefaultAppearance_None);
#
#- pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#- TEST_SAFE_OP( CreateSimpleForm( pPage, &writer, *signer.GetSignatureBeacon() ) );
#+ pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) );
#+ TEST_SAFE_OP( CreateSimpleForm( pPage, &writer, *signer.GetSignatureBeacon() ) );
#
#- TEST_SAFE_OP( writer.Close() );
#+ TEST_SAFE_OP( writer.Close() );
#
#- // Check if position of signature was found
#- if(signer.HasSignaturePosition()) {
#- // Adjust ByteRange for signature
#- signer.AdjustByteRange();
#-
#- // Read data for signature and count it
#- // We have to seek at the beginning of the file
#- signer.Seek(0);
#+ // Check if position of signature was found
#+ if(signer.HasSignaturePosition()) {
#+ // Adjust ByteRange for signature
#+ signer.AdjustByteRange();
#
#- // Generate digest and count signature
#- // use NSS, MS Crypto API or OpenSSL
#- // to generate signature in DER format
#+ // Read data for signature and count it
#+ // We have to seek at the beginning of the file
#+ signer.Seek(0);
#
#- // This is example of generation process
#- // with dummy generator. Check example for
#- // NSS generator
#- /*
#- SimpleSignatureGenerator sg;
#+ // Generate digest and count signature
#+ // use NSS, MS Crypto API or OpenSSL
#+ // to generate signature in DER format
#
#- // Read data to be signed and send them to the
#- // signature generator
#- char buff[65536];
#- size_t len;
#- while( (len = signer.ReadForSignature(buff, 65536))>0 )
#- {
#- sg.appendData(buff, len);
#- }
#- sg.finishData();
#+ // This is example of generation process
#+ // with dummy generator. Check example for
#+ // NSS generator
#+ /*
#+ SimpleSignatureGenerator sg;
#
#- // Paste signature to the file
#- const PdfData *pSignature = sg.getSignature();
#- */
#- /*
#- CERTCertificate* pCert = read_cert();
#- NSSSignatureGenerator ng(pCert);
#- char buff[65536];
#- size_t len;
#- while( (len = signer.ReadForSignature(buff, 65536))>0 )
#- {
#- ng.appendData(buff, len);
#- }
#- ng.finishData();
#+ // Read data to be signed and send them to the
#+ // signature generator
#+ char buff[65536];
#+ size_t len;
#+ while( (len = signer.ReadForSignature(buff, 65536))>0 )
#+ {
#+ sg.appendData(buff, len);
#+ }
#+ sg.finishData();
#
#- // Paste signature to the file
#- const PdfData *pSignature = ng.getSignature();
#+ // Paste signature to the file
#+ const PdfData *pSignature = sg.getSignature();
#+ */
#+ /*
#+ CERTCertificate* pCert = read_cert();
#+ NSSSignatureGenerator ng(pCert);
#+ char buff[65536];
#+ size_t len;
#+ while( (len = signer.ReadForSignature(buff, 65536))>0 )
#+ {
#+ ng.appendData(buff, len);
#+ }
#+ ng.finishData();
#
#- CERT_DestroyCertificate(pCert);
#+ // Paste signature to the file
#+ const PdfData *pSignature = ng.getSignature();
#
#- if(pSignature!=NULL) {
#- signer.SetSignature(*pSignature);
#- }
#- */
#- }
#+ CERT_DestroyCertificate(pCert);
#
#- signer.Flush();
#+ if(pSignature!=NULL) {
#+ signer.SetSignature(*pSignature);
#+ }
#+ */
#+ }
#
#+ signer.Flush();
#+ } catch( PdfError & e ) {
#+ std::cerr << "Error: An error " << e.GetError() << " ocurred." << std::endl;
#+ e.PrintErrorMsg();
#+ return e.GetError();
#+ }
#
# return 0;
# }
Index: test/TokenizerTest/TokenizerTest.cpp
===================================================================
--- test/TokenizerTest/TokenizerTest.cpp (revision 1792)
+++ test/TokenizerTest/TokenizerTest.cpp (revision 1793)
@@ -48,7 +48,7 @@
printf("Got token: %s\n", pszToken );
}
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
e.PrintErrorMsg();
return e.GetError();
}
Index: test/WatermarkTest/WatermarkTest.cpp
===================================================================
--- test/WatermarkTest/WatermarkTest.cpp (revision 1792)
+++ test/WatermarkTest/WatermarkTest.cpp (revision 1793)
@@ -72,7 +72,7 @@
try {
WatermarkFile( argv[1], argv[2] );
}
- catch( const PdfError & e )
+ catch( PdfError & e )
{
e.PrintErrorMsg();
return e.GetError();
Index: test/unit/EncodingTest.cpp
===================================================================
--- test/unit/EncodingTest.cpp (revision 1792)
+++ test/unit/EncodingTest.cpp (revision 1793)
@@ -332,7 +332,7 @@
try {
pEncoding->GetCharCode( pEncoding->GetFirstChar() );
}
- catch( const PdfError & rError )
+ catch( PdfError & rError )
{
// This may not throw!
rMsg = "pEncoding->GetCharCode( pEncoding->GetFirstChar() ) failed";
@@ -342,7 +342,7 @@
try {
pEncoding->GetCharCode( pEncoding->GetFirstChar() - 1 );
}
- catch( const PdfError & rError )
+ catch( PdfError & rError )
{
// This has to throw!
exception = true;
@@ -357,7 +357,7 @@
try {
pEncoding->GetCharCode( pEncoding->GetLastChar() );
}
- catch( const PdfError & rError )
+ catch( PdfError & rError )
{
// This may not throw!
rMsg = "pEncoding->GetCharCode( pEncoding->GetLastChar() ); failed";
@@ -368,7 +368,7 @@
try {
pEncoding->GetCharCode( pEncoding->GetLastChar() + 1 );
}
- catch( const PdfError & rError )
+ catch( PdfError & rError )
{
// This has to throw!
exception = true;
Index: test/unit/EncryptTest.cpp
===================================================================
--- test/unit/EncryptTest.cpp (revision 1792)
+++ test/unit/EncryptTest.cpp (revision 1793)
@@ -238,7 +238,7 @@
// Must throw an exception
CPPUNIT_FAIL("Encrypted file not recognized!");
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
if( e.GetError() != ePdfError_InvalidPassword )
{
CPPUNIT_FAIL("Invalid encryption exception thrown!");
@@ -272,7 +272,7 @@
// Must throw an exception
CPPUNIT_FAIL("Encrypted file not recognized!");
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
if( e.GetError() != ePdfError_InvalidPassword )
{
CPPUNIT_FAIL("Invalid encryption exception thrown!");
Index: tools/podofocrop/podofocrop.cpp
===================================================================
--- tools/podofocrop/podofocrop.cpp (revision 1792)
+++ tools/podofocrop/podofocrop.cpp (revision 1793)
@@ -161,7 +161,11 @@
if( strncmp( "%%BoundingBox: ", sLine.c_str(), 15 ) == 0 )
{
int x, y, w, h;
- sscanf(sLine.c_str()+15, "%i %i %i %i\n", &x, &y, &w, &h);
+ if( sscanf( sLine.c_str() + 15, "%i %i %i %i\n", &x, &y, &w, &h ) != 4 )
+ {
+ printf( "Failed to read bounding box's four numbers from '%s'\n", sLine.c_str() + 15 );
+ exit( 1 );
+ }
curRect = PdfRect( static_cast<double>(x),
static_cast<double>(y),
static_cast<double>(w-x),
Index: tools/podofogc/podofogc.cpp
===================================================================
--- tools/podofogc/podofogc.cpp (revision 1792)
+++ tools/podofogc/podofogc.cpp (revision 1793)
@@ -61,7 +61,7 @@
parser.SetPassword( pw );
bIncorrectPw = false;
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
if( e.GetError() == ePdfError_InvalidPassword )
{
cout << endl << "Password :";
Index: tools/podofoimpose/impositionplan.cpp
===================================================================
--- tools/podofoimpose/impositionplan.cpp (revision 1792)
+++ tools/podofoimpose/impositionplan.cpp (revision 1793)
@@ -57,7 +57,8 @@
destPage ( 0 ),
rotate ( 0 ),
transX ( 0 ),
- transY ( 0 )
+ transY ( 0 ),
+ duplicateOf( 0 )
{};
void PageRecord::load ( const std::string& buffer, const std::map<std::string, std::string>& vars )
Index: tools/podofoimpose/impositionplan.h
===================================================================
--- tools/podofoimpose/impositionplan.h (revision 1792)
+++ tools/podofoimpose/impositionplan.h (revision 1793)
@@ -85,7 +85,6 @@
PageRecord( );
~PageRecord() {};
int sourcePage;
- int xobjIndex;
int destPage;
double rotate;
double transX;
Index: tools/podofoimpose/pdftranslator.cpp
===================================================================
--- tools/podofoimpose/pdftranslator.cpp (revision 1792)
+++ tools/podofoimpose/pdftranslator.cpp (revision 1793)
@@ -74,10 +74,17 @@
PdfTranslator::PdfTranslator ( )
{
std::cerr<<"PdfTranslator::PdfTranslator"<<std::endl;
- sourceDoc = 0;
- targetDoc = 0;
+ sourceDoc = NULL;
+ targetDoc = NULL;
+ planImposition = NULL;
+ duplicate = 0;
extraSpace = 0;
scaleFactor = 1.0;
+ pcount = 0;
+ sourceWidth = 0.0;
+ sourceHeight = 0.0;
+ destWidth = 0.0;
+ destHeight = 0.0;
}
void PdfTranslator::setSource ( const std::string & source )
@@ -111,7 +118,7 @@
}
while ( !in.eof() );
in.close();
- delete filenameBuffer;
+ delete [] filenameBuffer;
}
std::cerr<< ++dbg <<std::endl;
Index: tools/podofopages/podofopages.cpp
===================================================================
--- tools/podofopages/podofopages.cpp (revision 1792)
+++ tools/podofopages/podofopages.cpp (revision 1793)
@@ -49,14 +49,14 @@
printf("Usage: podofopages [inputfile] [outputfile]\n");
printf("Options:\n");
printf("\t--delete NUMBER\n");
- printf("\tDeletes the page NUMBER (number is 0-based)\n");
+ printf("\tDeletes the page NUMBER (number is 0-based)\n");
printf("\tThe page will not really be deleted from the PDF.\n");
printf("\tIt is only removed from the so called pagestree and\n");
printf("\ttherefore invisible. The content of the page can still\n");
printf("\tbe retrieved from the document though.\n\n");
printf("\t--move FROM TO\n");
- printf("\tMoves a page FROM TO in the document (FROM and TO are 0-based)\n\n");
- printf("\nPoDoFo Version: %s\n\n", PODOFO_VERSION_STRING);
+ printf("\tMoves a page FROM TO in the document (FROM and TO are 0-based)\n\n");
+ printf("\nPoDoFo Version: %s\n\n", PODOFO_VERSION_STRING);
}
void work(const char* pszInput, const char* pszOutput, std::vector<Operation*> & rvecOperations)
@@ -63,13 +63,13 @@
{
std::cout << "Input file: " << pszInput << std::endl;
std::cout << "Output file: " << pszOutput << std::endl;
-
+
PdfMemDocument doc(pszInput);
int total = rvecOperations.size();
int i = 1;
std::vector<Operation*>::iterator it = rvecOperations.begin();
- while( it != rvecOperations.end() )
+ while( it != rvecOperations.end() )
{
std::string msg = (*it)->ToString();
std::cout << "Operation " << i << " of " << total << ": " << msg;
@@ -109,30 +109,30 @@
// Fill operations vector
std::vector<Operation*> vecOperations;
- for( int i=1; i < argc; i++ )
+ for( int i=1; i < argc; i++ )
{
std::string argument = argv[i];
- if( argument == "--delete" || argument == "-delete" )
+ if( argument == "--delete" || argument == "-delete" )
{
int page = static_cast<int>(convertToInt( std::string(argv[i+1]) ));
vecOperations.push_back( new DeleteOperation( page ) );
++i;
}
- else if( argument == "--move" || argument == "-move" )
+ else if( argument == "--move" || argument == "-move" )
{
int from = static_cast<int>(convertToInt( std::string(argv[i+1]) ));
int to = static_cast<int>(convertToInt( std::string(argv[i+2]) ));
vecOperations.push_back( new MoveOperation( from, to ) );
++i;
- ++i;
+ ++i;
}
else
{
- if( pszInput == NULL )
+ if( pszInput == NULL )
{
pszInput = argv[i];
}
- else if( pszOutput == NULL )
+ else if( pszOutput == NULL )
{
pszOutput = argv[i];
}
@@ -143,19 +143,19 @@
}
}
- if( !pszInput )
+ if( !pszInput )
{
std::cerr << "Please specify an input file." << std::endl;
exit( -2 );
}
- if( !pszOutput )
+ if( !pszOutput )
{
std::cerr << "Please specify an output file." << std::endl;
exit( -3 );
}
- if( std::string(pszInput) == std::string(pszOutput) )
+ if( std::string(pszInput) == std::string(pszOutput) )
{
std::cerr << "Input and outpuf file must point to different files." << std::endl;
exit( -4 );
@@ -167,11 +167,14 @@
std::cerr << "Error: An error " << e.GetError() << " ocurred." << std::endl;
e.PrintErrorMsg();
return e.GetError();
+ } catch( std::runtime_error & re ) {
+ std::cerr << "Error: An error " << re.what() << " ocurred." << std::endl;
+ return -1;
}
// Delete operations vectore
std::vector<Operation*>::iterator it = vecOperations.begin();
- while( it != vecOperations.end() )
+ while( it != vecOperations.end() )
{
delete (*it);
++it;
#Index: tools/podofosign/podofosign.cpp
#===================================================================
#--- tools/podofosign/podofosign.cpp (revision 1792)
#+++ tools/podofosign/podofosign.cpp (revision 1793)
#@@ -180,17 +180,17 @@
# if( !pkey )
# PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidHandle, "pkey == NULL" );
#
#- unsigned int buffLen = 65535, len;
#- char *buff;
#+ unsigned int uBufferLen = 65535, len;
#+ char *pBuffer;
#
#- while( buff = reinterpret_cast<char *>( malloc( sizeof( char ) * buffLen) ), !buff )
#+ while( pBuffer = reinterpret_cast<char *>( podofo_malloc( sizeof( char ) * uBufferLen) ), !pBuffer )
# {
#- buffLen = buffLen / 2;
#- if( !buffLen )
#+ uBufferLen = uBufferLen / 2;
#+ if( !uBufferLen )
# break;
# }
#
#- if( !buff )
#+ if( !pBuffer )
# PODOFO_RAISE_ERROR (ePdfError_OutOfMemory);
#
# int rc;
#@@ -197,7 +197,7 @@
# BIO *mem = BIO_new( BIO_s_mem() );
# if( !mem )
# {
#- free( buff );
#+ podofo_free( pBuffer );
# raise_podofo_error_with_opensslerror( "Failed to create input BIO" );
# }
#
#@@ -206,23 +206,23 @@
# if( !pkcs7 )
# {
# BIO_free( mem );
#- free( buff );
#+ podofo_free( pBuffer );
# raise_podofo_error_with_opensslerror( "PKCS7_sign failed" );
# }
#
#- while( len = signer.ReadForSignature( buff, buffLen ), len > 0 )
#+ while( len = signer.ReadForSignature( pBuffer, uBufferLen ), len > 0 )
# {
#- rc = BIO_write( mem, buff, len );
#+ rc = BIO_write( mem, pBuffer, len );
# if( static_cast<unsigned int>( rc ) != len )
# {
# PKCS7_free( pkcs7 );
# BIO_free( mem );
#- free( buff );
#+ podofo_free( pBuffer );
# raise_podofo_error_with_opensslerror( "BIO_write failed" );
# }
# }
#
#- free( buff );
#+ podofo_free( pBuffer );
#
# if( PKCS7_final( pkcs7, mem, flags ) <= 0 )
# {
#@@ -714,8 +714,14 @@
# return -5;
# }
#
#- if( *value == annot_position && !parse_annot_position( annot_position, annot_units, annot_page, annot_left, annot_top, annot_width, annot_height ) )
#- {
#+ try {
#+ if( *value == annot_position && !parse_annot_position( annot_position, annot_units, annot_page, annot_left, annot_top, annot_width, annot_height ) )
#+ {
#+ std::cerr << "Invalid -annot-position value '" << *value << "', expected format \"page,left,top,width,height\"" << std::endl;
#+
#+ return -6;
#+ }
#+ } catch( PdfError & e ) {
# std::cerr << "Invalid -annot-position value '" << *value << "', expected format \"page,left,top,width,height\"" << std::endl;
#
# return -6;
Index: tools/podofotxt2pdf/podofotxt2pdf.cpp
===================================================================
--- tools/podofotxt2pdf/podofotxt2pdf.cpp (revision 1792)
+++ tools/podofotxt2pdf/podofotxt2pdf.cpp (revision 1793)
@@ -117,8 +117,8 @@
PdfStreamedDocument doc( pszOutput );
- char* pszBuf;
- size_t lSize;
+ char* pszBuf;
+ long lSize;
hFile = fopen( pszInput, "rb" ); // read it as binary if we are going to compare sizes!
if( !hFile )
@@ -126,13 +126,24 @@
PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
}
- fseek( hFile, 0x00, SEEK_END );
+ if( fseek( hFile, 0x00, SEEK_END ) == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the end of the file" );
+ }
+
lSize = ftell( hFile );
+ if( lSize == -1 )
+ {
+ fclose( hFile );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read size of the file" );
+ }
pszBuf = static_cast<char*>(malloc( sizeof( char ) * (lSize+1) ));
fseek( hFile, 0x00, SEEK_SET );
if( !pszBuf )
{
+ fclose( hFile );
PODOFO_RAISE_ERROR( ePdfError_OutOfMemory );
}
@@ -140,9 +151,10 @@
// this not very efficient, but as this is
// a library demonstration I do not care.
// If anyone wants to improve this: Go for it!
- if( fread( pszBuf, sizeof(char), lSize, hFile ) != lSize )
+ if( static_cast<long>( fread( pszBuf, sizeof(char), lSize, hFile ) ) != lSize )
{
free( pszBuf );
+ fclose( hFile );
PODOFO_RAISE_ERROR( ePdfError_UnexpectedEOF );
}
Index: tools/podofouncompress/Uncompress.cpp
===================================================================
--- tools/podofouncompress/Uncompress.cpp (revision 1792)
+++ tools/podofouncompress/Uncompress.cpp (revision 1793)
@@ -61,11 +61,13 @@
printf("-> Uncompressing object %i %i\n",
(*it)->Reference().ObjectNumber(), (*it)->Reference().GenerationNumber() );
PdfMemStream* pStream = dynamic_cast<PdfMemStream*>((*it)->GetStream());
+ if( !pStream )
+ PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
# printf("-> Original Length: %" PDF_FORMAT_INT64 "\n",
printf("-> Original Length: %"PDF_FORMAT_INT64"\n",
static_cast<pdf_int64>(pStream->GetLength()) );
try {
pStream->Uncompress();
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
if( e.GetError() == ePdfError_Flate )
{
// Ignore ZLib errors
@@ -76,7 +78,7 @@
}
# printf("-> Uncompressed Length: %" PDF_FORMAT_INT64 "\n",
printf("-> Uncompressed Length: %"PDF_FORMAT_INT64"\n",
static_cast<pdf_int64>(pStream->GetLength()) );
- } catch( const PdfError & e ) {
+ } catch( PdfError & e ) {
e.PrintErrorMsg();
if( e.GetError() != ePdfError_UnsupportedFilter )
throw e;
Index: tools/podofoxmp/podofoxmp.cpp
===================================================================
--- tools/podofoxmp/podofoxmp.cpp (revision 1792)
+++ tools/podofoxmp/podofoxmp.cpp (revision 1793)
@@ -25,8 +25,8 @@
#include <cstdio>
#ifdef _MSC_VER
- #include <io.h>
- #include <fcntl.h>
+ #include <io.h>
+ #include <fcntl.h>
#endif
#include <podofo.h>
@@ -35,93 +35,132 @@
int main (int argc, char *argv[])
{
- PoDoFo::PdfError::EnableDebug(false);
- if (argc != 2 && argc != 4)
- {
- cout << "Syntax" << endl;
- cout << " " << argv[0] << " <pdf file> - display the XMP in a file (use \"-\" to specify stdin)" << endl;
- cout << "or" << endl;
- cout << " " << argv[0] << " <src pdf file> <xmp file> <new pdf file> - create a new PDF with the XMP in" << endl;
- return EXIT_FAILURE;
- }
+ using namespace PoDoFo;
+ PoDoFo::PdfMemDocument *doc = NULL;
+ int result = 0;
- PoDoFo::PdfMemDocument *doc;
+ try {
+ PoDoFo::PdfError::EnableDebug(false);
+ if (argc != 2 && argc != 4)
+ {
+ cout << "Syntax" << endl;
+ cout << " " << argv[0] << " <pdf file> - display the XMP in a file (use \"-\" to specify stdin)" << endl;
+ cout << "or" << endl;
+ cout << " " << argv[0] << " <src pdf file> <xmp file> <new pdf file> - create a new PDF with the XMP in" << endl;
+ return EXIT_FAILURE;
+ }
- if ( string("-") == argv[1] )
- {
- cin >> std::noskipws;
- #ifdef _MSC_VER
- _setmode(_fileno(stdin), _O_BINARY); // @TODO: MSVC specific binary setmode -- not sure if other platforms need it
- cin.sync_with_stdio();
- #endif
- istream_iterator<char> it(std::cin);
- istream_iterator<char> end;
- string buffer(it, end);
- doc = new PoDoFo::PdfMemDocument();
- doc->Load( buffer.c_str(), (long)buffer.size() );
- }
- else
- {
- doc = new PoDoFo::PdfMemDocument(argv[1]);
- }
+ if ( string("-") == argv[1] )
+ {
+ cin >> std::noskipws;
+ #ifdef _MSC_VER
+ _setmode(_fileno(stdin), _O_BINARY); // @TODO: MSVC specific binary setmode -- not sure if other platforms need it
+ cin.sync_with_stdio();
+ #endif
+ istream_iterator<char> it(std::cin);
+ istream_iterator<char> end;
+ string buffer(it, end);
+ doc = new PoDoFo::PdfMemDocument();
+ doc->Load( buffer.c_str(), (long)buffer.size() );
+ }
+ else
+ {
+ doc = new PoDoFo::PdfMemDocument(argv[1]);
+ }
- if (argc == 2)
- {
- PoDoFo::PdfObject *metadata;
- if ((metadata = doc->GetMetadata()) == NULL)
- cout << "No metadata" << endl;
- else
+ if (argc == 2)
{
- PoDoFo::PdfStream *str = metadata->GetStream();
- if (str != NULL)
+ PoDoFo::PdfObject *metadata;
+ if ((metadata = doc->GetMetadata()) == NULL)
+ cout << "No metadata" << endl;
+ else
{
- char *buf;
- PoDoFo::pdf_long len;
-
- str->GetFilteredCopy(&buf, &len);
- for (PoDoFo::pdf_long i = 0; i < len; ++i)
- printf("%c", buf[i]);
- printf("\n");
- fflush(stdout);
- free(buf);
+ PoDoFo::PdfStream *str = metadata->GetStream();
+ if (str != NULL)
+ {
+ char *buf;
+ PoDoFo::pdf_long len;
+
+ str->GetFilteredCopy(&buf, &len);
+ for (PoDoFo::pdf_long i = 0; i < len; ++i)
+ printf("%c", buf[i]);
+ printf("\n");
+ fflush(stdout);
+ free(buf);
+ }
}
}
- }
- if (argc == 4)
- {
- char *xmpBuf;
- FILE *fp;
-
- if ((fp = fopen(argv[2], "rb")) == NULL)
- cout << "Cannot open " << argv[2] << endl;
- else
+ if (argc == 4)
{
- fseek(fp, 0, SEEK_END);
- long xmpLen = ftell(fp);
- xmpBuf = new char[xmpLen];
- fseek(fp, 0, SEEK_SET);
- fread(xmpBuf, 1, xmpLen, fp);
- fclose(fp);
+ char *xmpBuf;
+ FILE *fp;
- PoDoFo::PdfObject *metadata;
- if ((metadata = doc->GetMetadata()) != NULL)
- metadata->GetStream()->Set(xmpBuf, xmpLen, PoDoFo::TVecFilters());
- else
+ if ((fp = fopen(argv[2], "rb")) == NULL)
+ cout << "Cannot open " << argv[2] << endl;
+ else
{
- metadata = doc->GetObjects().CreateObject("Metadata");
- metadata->GetDictionary().AddKey(PoDoFo::PdfName("Subtype"), PoDoFo::PdfName("XML"));
- metadata->GetStream()->Set(xmpBuf, xmpLen, PoDoFo::TVecFilters());
- doc->GetCatalog()->GetDictionary().AddKey(PoDoFo::PdfName("Metadata"), metadata->Reference());
+ if( fseek( fp, 0, SEEK_END ) == -1 )
+ {
+ fclose( fp );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the end of the file" );
+ }
+
+ long xmpLen = ftell(fp);
+ if( xmpLen == -1 )
+ {
+ fclose( fp );
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read size of the file" );
+ }
+
+ xmpBuf = new char[xmpLen];
+ if( !xmpBuf )
+ {
+ fclose( fp );
+ PODOFO_RAISE_ERROR( ePdfError_OutOfMemory );
+ }
+
+ if( fseek( fp, 0, SEEK_SET ) == -1 )
+ {
+ delete [] xmpBuf;
+ fclose( fp );
+
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to seek to the beginning of the file" );
+ }
+
+ if( static_cast<long>( fread( xmpBuf, 1, xmpLen, fp ) ) != xmpLen )
+ {
+ delete [] xmpBuf;
+ fclose( fp );
+
+ PODOFO_RAISE_ERROR_INFO( ePdfError_InvalidDeviceOperation, "Failed to read whole file into the memory" );
+ }
+
+ PoDoFo::PdfObject *metadata;
+ if ((metadata = doc->GetMetadata()) != NULL)
+ metadata->GetStream()->Set(xmpBuf, xmpLen, PoDoFo::TVecFilters());
+ else
+ {
+ metadata = doc->GetObjects().CreateObject("Metadata");
+ metadata->GetDictionary().AddKey(PoDoFo::PdfName("Subtype"), PoDoFo::PdfName("XML"));
+ metadata->GetStream()->Set(xmpBuf, xmpLen, PoDoFo::TVecFilters());
+ doc->GetCatalog()->GetDictionary().AddKey(PoDoFo::PdfName("Metadata"), metadata->Reference());
+ }
+ delete[] xmpBuf;
+
+ doc->Write(argv[3]);
}
- delete[] xmpBuf;
+ }
+ } catch( PdfError & e ) {
+ std::cerr << "Error: An error " << e.GetError() << " occurred during the sign of the pdf file:" << std::endl;
+ e.PrintErrorMsg();
- doc->Write(argv[3]);
- }
+ result = e.GetError();
}
- delete doc;
+ if( doc )
+ delete doc;
- return EXIT_SUCCESS;
+ return result;
}
------------------------------------------------------------------------