Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/4093 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/93/4093/1 Fix crash with fdo60063-1.docx Compared to the original version, this one tries hard not to produce empty keywords. Reviewed-on: https://gerrit.libreoffice.org/4091 Reviewed-by: Fridrich Strba <fridr...@documentfoundation.org> Tested-by: Fridrich Strba <fridr...@documentfoundation.org> (cherry picked from commit b2f97d77237cde249b4c40acc8ad3f7f8755e768) (cherry picked from commit 693707e338922d8dc7578975a1990e8a1cba6a53) Conflicts: oox/source/docprop/docprophandler.cxx Change-Id: I11d036c2d54cde2d3c311a77c115011246f38d0a --- M oox/source/docprop/docprophandler.cxx 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/oox/source/docprop/docprophandler.cxx b/oox/source/docprop/docprophandler.cxx index 1067315..ff6d170 100644 --- a/oox/source/docprop/docprophandler.cxx +++ b/oox/source/docprop/docprophandler.cxx @@ -25,6 +25,9 @@ #include <osl/time.h> +#include <vector> +#include <boost/algorithm/string.hpp> + #include "oox/helper/attributelist.hxx" using namespace ::com::sun::star; @@ -157,39 +160,21 @@ { if ( !aChars.isEmpty() ) { - uno::Sequence< ::rtl::OUString > aResult( 20 ); - sal_Int32 nCounter = 0; + std::string aUtf8Chars = rtl::OUStringToOString( aChars, RTL_TEXTENCODING_UTF8 ).getStr(); + std::vector<std::string> aUtf8Result; + boost::split( aUtf8Result, aUtf8Chars, boost::is_any_of(" ,;:\t"), boost::token_compress_on ); - const sal_Unicode* pStr = aChars.getStr(); - for( sal_Int32 nInd = 0; nInd < aChars.getLength() && pStr[nInd] != 0; nInd++ ) + if (!aUtf8Result.empty()) { - switch( pStr[nInd] ) - { - case (sal_Unicode)' ': - case (sal_Unicode)',': - case (sal_Unicode)';': - case (sal_Unicode)':': - case (sal_Unicode)'\t': - // this is a delimiter - // unfortunately I did not find any specification for the possible delimiters - if ( !aResult[nCounter].isEmpty() ) - { - if ( nCounter >= aResult.getLength() ) - aResult.realloc( nCounter + 10 ); - nCounter++; - } - break; + uno::Sequence< rtl::OUString > aResult( aUtf8Result.size() ); + OUString* pResultValues = aResult.getArray(); + for ( std::vector< std::string >::const_iterator i = aUtf8Result.begin(); + i != aUtf8Result.end(); ++i, ++pResultValues ) + *pResultValues = rtl::OUString( i->c_str(), static_cast< sal_Int32 >( i->size() ),RTL_TEXTENCODING_UTF8 ); - default: - // this should be a part of keyword - aResult[nCounter] += ::rtl::OUString( (sal_Unicode)pStr[nInd] ); - } + return aResult; } - - aResult.realloc( nCounter + 1 ); - return aResult; } - return uno::Sequence< ::rtl::OUString >(); } // ------------------------------------------------ -- To view, visit https://gerrit.libreoffice.org/4093 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I11d036c2d54cde2d3c311a77c115011246f38d0a Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: libreoffice-4-0 Gerrit-Owner: Fridrich Strba <fridr...@documentfoundation.org> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice