hwpfilter/source/hiodev.cxx | 20 +++++++--------- hwpfilter/source/hiodev.h | 5 ++-- hwpfilter/source/hstream.cxx | 5 ---- hwpfilter/source/hstream.h | 5 ---- hwpfilter/source/hwpfile.cxx | 4 +-- hwpfilter/source/hwpfile.h | 4 +-- hwpfilter/source/hwpreader.cxx | 7 +++-- sdext/source/pdfimport/test/tests.cxx | 23 +++++++++---------- sdext/source/pdfimport/wrapper/wrapper.cxx | 35 ++++++++++++++++++++++++++++- 9 files changed, 67 insertions(+), 41 deletions(-)
New commits: commit 4a32ef9c3f3bcb603e253444b4221cebd227b3d8 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jul 3 11:25:35 2014 +0200 Improve test code (never call CPPUNIT_ASSERT etc., which work by throwing exceptions, from a dtor) Change-Id: I293d54eb40c2ad9205d485ccff0ffd2161257142 diff --git a/sdext/source/pdfimport/test/tests.cxx b/sdext/source/pdfimport/test/tests.cxx index 8b47c0a..9538c66 100644 --- a/sdext/source/pdfimport/test/tests.cxx +++ b/sdext/source/pdfimport/test/tests.cxx @@ -82,7 +82,9 @@ namespace m_bImageSeen(false) {} - virtual ~TestSink() + virtual ~TestSink() {} + + void check() { CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "A4 page size (in 100th of points): Width", 79400, m_aPageSize.Width, 0.00000001); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "A4 page size (in 100th of points): Height", 59500, m_aPageSize.Height, 0.0000001 ); @@ -458,16 +460,15 @@ namespace public: void testXPDFParser() { - pdfi::ContentSinkSharedPtr pSink( new TestSink() ); - pdfi::xpdf_ImportFromFile( getURLFromSrc("/sdext/source/pdfimport/test/testinput.pdf"), - pSink, - uno::Reference< task::XInteractionHandler >(), - OUString(), - getComponentContext() ); - - // make destruction explicit, a bunch of things are - // checked in the destructor - pSink.reset(); + boost::shared_ptr<TestSink> pSink( new TestSink() ); + CPPUNIT_ASSERT( + pdfi::xpdf_ImportFromFile( + getURLFromSrc("/sdext/source/pdfimport/test/testinput.pdf"), + pSink, + uno::Reference< task::XInteractionHandler >(), + OUString(), + getComponentContext() ) ); + pSink->check(); } void testOdfDrawExport() commit 44565f46b22c99db4e06353531ba48956efe31be Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jul 3 11:24:28 2014 +0200 Check exit code of spawned xpdfimport Change-Id: I4bea1ebe5c9915ad5e3a4f8fecb516bc056d060d diff --git a/sdext/source/pdfimport/wrapper/wrapper.cxx b/sdext/source/pdfimport/wrapper/wrapper.cxx index c60a141..7cdb775 100644 --- a/sdext/source/pdfimport/wrapper/wrapper.cxx +++ b/sdext/source/pdfimport/wrapper/wrapper.cxx @@ -1059,7 +1059,7 @@ bool xpdf_ImportFromFile( const OUString& rURL, oslFileHandle pOut = NULL; oslFileHandle pErr = NULL; oslSecurity pSecurity = osl_getCurrentSecurity (); - const oslProcessError eErr = + oslProcessError eErr = osl_executeProcess_WithRedirectedIO(converterURL.pData, args, nArgs, @@ -1115,6 +1115,39 @@ bool xpdf_ImportFromFile( const OUString& rURL, osl_closeFile(pOut); if( pErr ) osl_closeFile(pErr); + eErr = osl_joinProcess(aProcess); + if (eErr == osl_Process_E_None) + { + oslProcessInfo info; + info.Size = sizeof info; + eErr = osl_getProcessInfo(aProcess, osl_Process_EXITCODE, &info); + if (eErr == osl_Process_E_None) + { + if (info.Code != 0) + { + SAL_WARN( + "sdext.pdfimport", + "getProcessInfo of " << converterURL + << " failed with exit code " << info.Code); + bRet = false; + } + } + else + { + SAL_WARN( + "sdext.pdfimport", + "getProcessInfo of " << converterURL << " failed with " + << +eErr); + bRet = false; + } + } + else + { + SAL_WARN( + "sdext.pdfimport", + "joinProcess of " << converterURL << " failed with " << +eErr); + bRet = false; + } osl_freeProcessHandle(aProcess); return bRet; } commit e7118d205d474a3cac747238671b6fa34963eec8 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jul 3 09:17:53 2014 +0200 HStream::closeInput does nothing Change-Id: I0d57e227be45bb2c098969ab24eedab30514313f diff --git a/hwpfilter/source/hiodev.cxx b/hwpfilter/source/hiodev.cxx index 9e92219..ec25343 100644 --- a/hwpfilter/source/hiodev.cxx +++ b/hwpfilter/source/hiodev.cxx @@ -146,9 +146,7 @@ void HStreamIODev::close(void) /* íë¬ìí í ë«ëë¤. */ this->flush(); if (_gzfp) - gz_close(_gzfp); /* gz_close() calls stream_closeInput() */ - else - _stream->closeInput(); + gz_close(_gzfp); _gzfp = NULL; } diff --git a/hwpfilter/source/hstream.cxx b/hwpfilter/source/hstream.cxx index 5cd9354..e3c1b42 100644 --- a/hwpfilter/source/hstream.cxx +++ b/hwpfilter/source/hstream.cxx @@ -66,9 +66,4 @@ int HStream::available() const return size - pos; } - -void HStream::closeInput() -{ -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/hwpfilter/source/hstream.h b/hwpfilter/source/hstream.h index 9535ced..426d396 100644 --- a/hwpfilter/source/hstream.h +++ b/hwpfilter/source/hstream.h @@ -46,10 +46,7 @@ class HStream * @returns Size of remained stream */ int available() const; -/** - * remove the stream from this object. - */ - void closeInput(); + private: int size; byte *seq; commit 2617def8d1430e093f6a482a72727b2965a8a8a6 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jul 3 09:10:17 2014 +0200 Fix (harmless) stack-use-after-return ...as reported by -fsanitize=address CppunitTest_hwpfilter_test_hwpfilter, where stack-local HStream stream from HwpReader::filter is still referenced from HStreamIODev in HStreamIODev::close HStreamIODev::~HStreamIODev HWPFile::~HWPFile HwpReader::~HwpReader which is only harmless because HStream::closeInput is a nop. Change-Id: Idbc5539ab5f463ec6d5d72f428ce60327ebdb063 diff --git a/hwpfilter/source/hiodev.cxx b/hwpfilter/source/hiodev.cxx index d5f993d..9e92219 100644 --- a/hwpfilter/source/hiodev.cxx +++ b/hwpfilter/source/hiodev.cxx @@ -107,7 +107,7 @@ int HIODev::read4b(void *ptr, int nmemb) // hfileiodev class -HStreamIODev::HStreamIODev(HStream & stream):_stream(stream) +HStreamIODev::HStreamIODev(HStream * stream):_stream(stream) { init(); } @@ -128,7 +128,7 @@ void HStreamIODev::init() bool HStreamIODev::open() { - if (!(_stream.available())) + if (!(_stream->available())) return false; return true; } @@ -148,7 +148,7 @@ void HStreamIODev::close(void) if (_gzfp) gz_close(_gzfp); /* gz_close() calls stream_closeInput() */ else - _stream.closeInput(); + _stream->closeInput(); _gzfp = NULL; } @@ -164,7 +164,7 @@ bool HStreamIODev::setCompressed(bool flag) { compressed = flag; if (flag == true) - return 0 != (_gzfp = gz_open(_stream)); + return 0 != (_gzfp = gz_open(*_stream)); else if (_gzfp) { gz_flush(_gzfp, Z_FINISH); @@ -181,7 +181,7 @@ bool HStreamIODev::setCompressed(bool flag) int HStreamIODev::read1b() { - int res = (compressed) ? GZREAD(rBuf, 1) : _stream.readBytes(rBuf, 1); + int res = (compressed) ? GZREAD(rBuf, 1) : _stream->readBytes(rBuf, 1); if (res <= 0) return -1; @@ -192,7 +192,7 @@ int HStreamIODev::read1b() int HStreamIODev::read2b() { - int res = (compressed) ? GZREAD(rBuf, 2) : _stream.readBytes(rBuf, 2); + int res = (compressed) ? GZREAD(rBuf, 2) : _stream->readBytes(rBuf, 2); if (res <= 0) return -1; @@ -203,7 +203,7 @@ int HStreamIODev::read2b() int HStreamIODev::read4b() { - int res = (compressed) ? GZREAD(rBuf, 4) : _stream.readBytes(rBuf, 4); + int res = (compressed) ? GZREAD(rBuf, 4) : _stream->readBytes(rBuf, 4); if (res <= 0) return -1; @@ -216,7 +216,7 @@ int HStreamIODev::read4b() int HStreamIODev::readBlock(void *ptr, int size) { int count = - (compressed) ? GZREAD(ptr, size) : _stream.readBytes((byte *) ptr, + (compressed) ? GZREAD(ptr, size) : _stream->readBytes((byte *) ptr, size); @@ -242,7 +242,7 @@ int HStreamIODev::skipBlock(int size) return size - remain; } } - return _stream.skipBytes(size); + return _stream->skipBytes(size); } diff --git a/hwpfilter/source/hiodev.h b/hwpfilter/source/hiodev.h index 40783f5..a47de8f 100644 --- a/hwpfilter/source/hiodev.h +++ b/hwpfilter/source/hiodev.h @@ -29,6 +29,7 @@ #include <stdio.h> +#include <boost/scoped_ptr.hpp> #include <sal/types.h> #include "hwplib.h" @@ -74,10 +75,10 @@ class HStreamIODev : public HIODev { private: /* zlibì¼ë¡ ìì¶ì í기 ìí ìë£ êµ¬ì¡° */ + boost::scoped_ptr<HStream> _stream; gz_stream *_gzfp; - HStream& _stream; public: - HStreamIODev(HStream& stream); + HStreamIODev(HStream* stream); virtual ~HStreamIODev(); /** * Check whether the stream is available diff --git a/hwpfilter/source/hwpfile.cxx b/hwpfilter/source/hwpfile.cxx index 5f5b8e3..c4a0bfc 100644 --- a/hwpfilter/source/hwpfile.cxx +++ b/hwpfilter/source/hwpfile.cxx @@ -81,7 +81,7 @@ HWPFile::~HWPFile() } } -int HWPFile::ReadHwpFile(HStream & stream) +int HWPFile::ReadHwpFile(HStream * stream) { if (Open(stream) != HWP_NoError) return State(); @@ -108,7 +108,7 @@ int detect_hwp_version(const char *str) // HIODev wrapper -int HWPFile::Open(HStream & stream) +int HWPFile::Open(HStream * stream) { HStreamIODev *hstreamio = new HStreamIODev(stream); diff --git a/hwpfilter/source/hwpfile.h b/hwpfilter/source/hwpfile.h index f812f81..82ba103 100644 --- a/hwpfilter/source/hwpfile.h +++ b/hwpfilter/source/hwpfile.h @@ -110,7 +110,7 @@ class DLLEXPORT HWPFile * @returns 0 if success, otherwise error code * @see State() */ - int Open( HStream & ); + int Open( HStream * ); /** * Say current state @@ -170,7 +170,7 @@ class DLLEXPORT HWPFile /** * Reads all information of hwp file from stream */ - int ReadHwpFile( HStream &); + int ReadHwpFile( HStream *); /** * Reads document information of hwp file from HIODev */ diff --git a/hwpfilter/source/hwpreader.cxx b/hwpfilter/source/hwpreader.cxx index f140add..914f6b4 100644 --- a/hwpfilter/source/hwpreader.cxx +++ b/hwpfilter/source/hwpreader.cxx @@ -25,6 +25,7 @@ #include <math.h> #include <comphelper/newarray.hxx> +#include <o3tl/heap_ptr.hxx> #include "fontmap.hxx" #include "formula.h" @@ -130,7 +131,7 @@ sal_Bool HwpReader::filter(const Sequence< PropertyValue >& rDescriptor) throw(R Reference< XInputStream > xInputStream( aDescriptor[utl::MediaDescriptor::PROP_INPUTSTREAM()], UNO_QUERY_THROW); - HStream stream; + o3tl::heap_ptr<HStream> stream(new HStream); Sequence < sal_Int8 > aBuffer; sal_Int32 nRead, nBlock = 32768, nTotal = 0; while( true ) @@ -138,13 +139,13 @@ sal_Bool HwpReader::filter(const Sequence< PropertyValue >& rDescriptor) throw(R nRead = xInputStream->readBytes(aBuffer, nBlock); if( nRead == 0 ) break; - stream.addData( (const byte *)aBuffer.getConstArray(), nRead ); + stream->addData( (const byte *)aBuffer.getConstArray(), nRead ); nTotal += nRead; } if( nTotal == 0 ) return sal_False; - if (hwpfile.ReadHwpFile(stream)) + if (hwpfile.ReadHwpFile(stream.release())) return sal_False; if (m_rxDocumentHandler.is())
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits