summaryrefslogtreecommitdiff
path: root/unotools
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-09-25 15:41:42 +0200
committerMichael Meeks <michael.meeks@suse.com>2012-09-25 16:43:31 +0100
commit40056c63748367db5ff60151ec2c2cb34e0cf0dd (patch)
tree0e42f48264edfca0bbedb9fde1deb9cf4e73d17b /unotools
parent3a4ebb1fcc0ade5cbc88e0a29304bbd5e440c0d2 (diff)
fdo#55019: Cope with empty TrustedAuthor entries
Change-Id: I9c01c1c718897a4be992150170a6ed9b5bd8a0a0 Signed-off-by: Michael Meeks <michael.meeks@suse.com>
Diffstat (limited to 'unotools')
-rw-r--r--unotools/source/config/securityoptions.cxx13
1 files changed, 11 insertions, 2 deletions
diff --git a/unotools/source/config/securityoptions.cxx b/unotools/source/config/securityoptions.cxx
index 01e1abd3a267..7429e2bde441 100644
--- a/unotools/source/config/securityoptions.cxx
+++ b/unotools/source/config/securityoptions.cxx
@@ -35,6 +35,7 @@
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
+#include <comphelper/sequenceasvector.hxx>
#include <tools/urlobj.hxx>
#include <tools/wldcrd.hxx>
@@ -490,7 +491,7 @@ void SvtSecurityOptions_Impl::LoadAuthors( void )
Sequence< Any > lValues = GetProperties( lAllAuthors );
if( lValues.getLength() == c2 )
{
- m_seqTrustedAuthors.realloc( c1 );
+ comphelper::SequenceAsVector< SvtSecurityOptions::Certificate > v;
SvtSecurityOptions::Certificate aCert( 3 );
for( i1 = 0, i2 = 0 ; i1 < c1 ; ++i1 )
{
@@ -500,8 +501,16 @@ void SvtSecurityOptions_Impl::LoadAuthors( void )
++i2;
lValues[ i2 ] >>= aCert[ 2 ];
++i2;
- m_seqTrustedAuthors[ i1 ] = aCert;
+ // Filter out TrustedAuthor entries with empty RawData, which
+ // would cause an unexpected std::bad_alloc in
+ // SecurityEnvironment_NssImpl::createCertificateFromAscii and
+ // have been observed in the wild (fdo#55019):
+ if( !aCert[ 2 ].isEmpty() )
+ {
+ v.push_back( aCert );
+ }
}
+ m_seqTrustedAuthors = v.getAsConstList();
}
}
}