summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@frugalware.org>2011-08-03 20:18:18 +0200
committerMiklos Vajna <vmiklos@frugalware.org>2011-08-03 20:18:18 +0200
commit25ec342621ccec05583b44268201d5d5902d2062 (patch)
tree69adfbfb393405978c8ee22532791d6f7ddd7461
parentfb6238135ea033b2a693a33524501de6d918c52b (diff)
a control word's name cannot be longer than 32 letters
-rw-r--r--writerfilter/source/filter/RtfFilter.cxx45
-rw-r--r--writerfilter/source/rtftok/rtftokenizer.cxx4
2 files changed, 30 insertions, 19 deletions
diff --git a/writerfilter/source/filter/RtfFilter.cxx b/writerfilter/source/filter/RtfFilter.cxx
index b93a34c01..af4589692 100644
--- a/writerfilter/source/filter/RtfFilter.cxx
+++ b/writerfilter/source/filter/RtfFilter.cxx
@@ -73,33 +73,40 @@ sal_Bool RtfFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescri
SvtMiscOptions aMiscOptions;
if (aMiscOptions.IsExperimentalMode() || !m_xDstDoc.is() )
{
- MediaDescriptor aMediaDesc( aDescriptor );
+ try
+ {
+ MediaDescriptor aMediaDesc( aDescriptor );
#ifdef DEBUG_IMPORT
- OUString sURL = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
- ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
+ OUString sURL = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
+ ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
- writerfilter::TagLogger::Pointer_t dmapperLogger
- (writerfilter::TagLogger::getInstance("DOMAINMAPPER"));
- dmapperLogger->setFileName(sURLc);
- dmapperLogger->startDocument();
+ writerfilter::TagLogger::Pointer_t dmapperLogger
+ (writerfilter::TagLogger::getInstance("DOMAINMAPPER"));
+ dmapperLogger->setFileName(sURLc);
+ dmapperLogger->startDocument();
#endif
- uno::Reference< io::XInputStream > xInputStream;
+ uno::Reference< io::XInputStream > xInputStream;
- aMediaDesc.addInputStream();
- aMediaDesc[ MediaDescriptor::PROP_INPUTSTREAM() ] >>= xInputStream;
+ aMediaDesc.addInputStream();
+ aMediaDesc[ MediaDescriptor::PROP_INPUTSTREAM() ] >>= xInputStream;
- uno::Reference<frame::XFrame> xFrame = aMediaDesc.getUnpackedValueOrDefault(MediaDescriptor::PROP_FRAME(),
- uno::Reference<frame::XFrame>());
+ uno::Reference<frame::XFrame> xFrame = aMediaDesc.getUnpackedValueOrDefault(MediaDescriptor::PROP_FRAME(),
+ uno::Reference<frame::XFrame>());
- writerfilter::Stream::Pointer_t pStream(
- new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, writerfilter::dmapper::DOCUMENT_RTF));
- writerfilter::rtftok::RTFDocument::Pointer_t const pDocument(
- writerfilter::rtftok::RTFDocumentFactory::createDocument(m_xContext, xInputStream, m_xDstDoc, xFrame));
- pDocument->resolve(*pStream);
+ writerfilter::Stream::Pointer_t pStream(
+ new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, writerfilter::dmapper::DOCUMENT_RTF));
+ writerfilter::rtftok::RTFDocument::Pointer_t const pDocument(
+ writerfilter::rtftok::RTFDocumentFactory::createDocument(m_xContext, xInputStream, m_xDstDoc, xFrame));
+ pDocument->resolve(*pStream);
#ifdef DEBUG_IMPORT
- dmapperLogger->endDocument();
+ dmapperLogger->endDocument();
#endif
- return sal_True;
+ return sal_True;
+ }
+ catch( const uno::Exception& rEx)
+ {
+ return sal_False;
+ }
}
// if not, then use the old importer
diff --git a/writerfilter/source/rtftok/rtftokenizer.cxx b/writerfilter/source/rtftok/rtftokenizer.cxx
index 46d967df2..847dd2493 100644
--- a/writerfilter/source/rtftok/rtftokenizer.cxx
+++ b/writerfilter/source/rtftok/rtftokenizer.cxx
@@ -178,6 +178,10 @@ int RTFTokenizer::resolveKeyword()
aBuf.append(ch);
Strm() >> ch;
}
+ if (aBuf.getLength() > 32)
+ // See RTF spec v1.9.1, page 7
+ // A control word's name cannot be longer than 32 letters.
+ throw io::BufferSizeExceededException();
if (ch == '-')
{