[Podofo-svn] SF.net SVN: podofo: [659] podofo/trunk/src/PdfImage.cpp
A PDF parsing, modification and creation library.
Brought to you by:
domseichter
From: <dom...@us...> - 2007-09-23 14:52:53
|
Revision: 659 http://podofo.svn.sourceforge.net/podofo/?rev=659&view=rev Author: domseichter Date: 2007-09-23 07:52:30 -0700 (Sun, 23 Sep 2007) Log Message: ----------- FIXED: Crashes with libJpeg versions on Windows when libJpeg was compiled with a different C runtime than PoDoFo. Modified Paths: -------------- podofo/trunk/src/PdfImage.cpp Modified: podofo/trunk/src/PdfImage.cpp =================================================================== --- podofo/trunk/src/PdfImage.cpp 2007-09-23 14:11:36 UTC (rev 658) +++ podofo/trunk/src/PdfImage.cpp 2007-09-23 14:52:30 UTC (rev 659) @@ -189,6 +189,10 @@ } #ifdef PODOFO_HAVE_JPEG_LIB +#ifdef _WIN32 +void jpeg_memory_src (j_decompress_ptr cinfo, const JOCTET * buffer, size_t bufsize); +#endif // _WIN32 + void PdfImage::LoadFromJpeg( const char* pszFilename ) { FILE* hInfile; @@ -208,8 +212,23 @@ cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); - jpeg_stdio_src(&cinfo, hInfile); +#ifdef _WIN32 + const long lSize = 1024; + PdfRefCountedBuffer buffer( lSize ); + fread( buffer.GetBuffer(), sizeof(char), lSize, hInfile ); + + // On WIN32, you can only pass a FILE Handle to DLLs which where compiled using the same + // C library. This is usually not the case with LibJpeg on WIN32. + // As a reason we use a memory buffer to determine the header information. + // + // If you are sure that libJpeg is compiled against the same C library as your application + // you can removed this ifdef. + jpeg_memory_src ( &cinfo, reinterpret_cast<JOCTET*>(buffer.GetBuffer()), buffer.GetSize() ); +#else + jpeg_stdio_src(&cinfo, hInfile); +#endif // _WIN32 + if( jpeg_read_header(&cinfo, TRUE) <= 0 ) { fclose( hInfile ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |