[Libreoffice-commits] core.git: hwpfilter/source

Caolán McNamara caolanm at redhat.com
Thu Mar 2 09:43:50 UTC 2017


 hwpfilter/source/hwpfile.cxx |   18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

New commits:
commit 76201c60a9162804b502726a0150ca925ee08719
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Mar 2 09:42:28 2017 +0000

    ofz: oom in reading hwp data
    
    Change-Id: I1e4dc5f474b229d4d68d3fc34bc23c88767e5e50

diff --git a/hwpfilter/source/hwpfile.cxx b/hwpfilter/source/hwpfile.cxx
index 2983ef0..c34891e 100644
--- a/hwpfilter/source/hwpfile.cxx
+++ b/hwpfilter/source/hwpfile.cxx
@@ -356,8 +356,22 @@ void HWPFile::TagsRead()
                         return;
                      }
 
-                     _hwpInfo.back_info.data.resize(_hwpInfo.back_info.size);
-                     ReadBlock(_hwpInfo.back_info.data.data(), _hwpInfo.back_info.size);
+                     //read potentially compressed data in blocks as its more
+                     //likely large values are simply broken and we'll run out
+                     //of data before we need to realloc
+                     for (int i = 0; i < _hwpInfo.back_info.size; i+= SAL_MAX_UINT16)
+                     {
+                        int nOldSize = _hwpInfo.back_info.data.size();
+                        size_t nBlock = std::min<int>(SAL_MAX_UINT16, _hwpInfo.back_info.size - nOldSize);
+                        _hwpInfo.back_info.data.resize(nOldSize + nBlock);
+                        size_t nReadBlock = ReadBlock(_hwpInfo.back_info.data.data() + nOldSize, nBlock);
+                        if (nBlock != nReadBlock)
+                        {
+                            _hwpInfo.back_info.data.resize(nOldSize + nReadBlock);
+                            break;
+                        }
+                     }
+                     _hwpInfo.back_info.size = _hwpInfo.back_info.data.size();
 
                      if( _hwpInfo.back_info.size > 0 )
                           _hwpInfo.back_info.type = 2;


More information about the Libreoffice-commits mailing list