xmlhelp/source/treeview/tvread.cxx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
New commits: commit 7ed79c4a3b35a016be6c3d540725512eaf2e0bba Author: Michael Stahl <mst...@redhat.com> Date: Wed Jun 5 21:27:07 2013 +0200 xmlhelp: fix reading symlinked .tree files Apparently the .tree files nowadays are symlinked, which was not the case on the libreoffice-4-0 branch... and on viewing the Contents tab it's evident we can't actually read symlinked .tree files, and crash with an STL assert because the children vector is empty. Change-Id: I5a543ef85b827e194120530a486cf19a76837d87 (cherry picked from commit 3ddf70dc1129e9b2294b582256c657305bbf3b3e) Reviewed-on: https://gerrit.libreoffice.org/4479 Reviewed-by: David Tardon <dtar...@redhat.com> Tested-by: David Tardon <dtar...@redhat.com> diff --git a/xmlhelp/source/treeview/tvread.cxx b/xmlhelp/source/treeview/tvread.cxx index 83ebfd7..01ef477 100644 --- a/xmlhelp/source/treeview/tvread.cxx +++ b/xmlhelp/source/treeview/tvread.cxx @@ -545,6 +545,11 @@ TVChildTarget::~TVChildTarget() void TVChildTarget::Check(TVDom* tvDom) { + if (tvDom->children.empty()) + { + return; + } + unsigned i = 0; bool h = false; @@ -807,7 +812,8 @@ ConfigData TVChildTarget::init( const Reference< XMultiServiceFactory >& xSMgr ) } osl::Directory aDirectory( url ); - osl::FileStatus aFileStatus( osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_FileSize | osl_FileStatus_Mask_FileURL ); + osl::FileStatus aFileStatus( + osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_FileURL ); if( osl::Directory::E_None == aDirectory.open() ) { int idx_ = 0; @@ -831,18 +837,17 @@ ConfigData TVChildTarget::init( const Reference< XMultiServiceFactory >& xSMgr ) ( str[idx_ + 3] == 'e' || str[idx_ + 3] == 'E' ) && ( str[idx_ + 4] == 'e' || str[idx_ + 4] == 'E' ) ) { - OSL_ENSURE( aFileStatus.isValid( osl_FileStatus_Mask_FileSize ), - "invalid file size" ); - OUString baseName = aFileName.copy(0,idx_).toAsciiLowerCase(); if(! showBasic && baseName.compareToAscii("sbasic") == 0 ) continue; osl::File aFile( aFileUrl ); if( osl::FileBase::E_None == aFile.open( osl_File_OpenFlag_Read ) ) { + // use the file size, not aFileStatus size, in case the + // tree file is a symlink sal_uInt64 nSize; aFile.getSize( nSize ); - configData.vFileLen.push_back( aFileStatus.getFileSize() ); + configData.vFileLen.push_back( nSize ); configData.vFileURL.push_back( aFileUrl ); aFile.close(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits