hwpfilter/source/hwpfile.cxx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
New commits: commit 76201c60a9162804b502726a0150ca925ee08719 Author: Caolán McNamara <caol...@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;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits