--- libreoffice-6.3.1.2/svl/source/misc/msodocumentlockfile.cxx 2019-08-29 16:51:57.000000000 -0500 +++ libreoffice-6.3.1.2/svl/source/misc/msodocumentlockfile.cxx 2019-09-15 04:19:32.593900468 -0500 @@ -12,6 +12,7 @@ #include <algorithm> #include <ucbhelper/content.hxx> #include <comphelper/processfactory.hxx> +#include <oox/helper/helper.hxx> #include <com/sun/star/io/IOException.hpp> #include <com/sun/star/io/XOutputStream.hpp> @@ -220,7 +221,7 @@ LockFileEntry MSODocumentLockFile::GetLo const int nACPLen = aBuf[0]; if (nACPLen > 0 && nACPLen <= 52) // skip wrong format { - const sal_Int8* pBuf = aBuf.getConstArray() + 54; + sal_Int8* pBuf = aBuf.getArray() + 54; int nUTF16Len = *pBuf; // try Word position // If UTF-16 length is 0x20, then ACP length is also less than maximal, which means // that in Word lockfile case, at least two preceding bytes would be zero. Both @@ -228,9 +229,12 @@ LockFileEntry MSODocumentLockFile::GetLo if (nUTF16Len == 0x20 && (*(pBuf - 1) != 0 || *(pBuf - 2) != 0)) nUTF16Len = *++pBuf; // use Excel/PowerPoint position - if (nUTF16Len > 0 && nUTF16Len <= 52) // skip wrong format + if (nUTF16Len > 0 && nUTF16Len <= 52) { // skip wrong format + oox::ByteOrderConverter::convertLittleEndianArray( + reinterpret_cast<sal_Unicode*>(pBuf + 2), nUTF16Len); aResult[LockFileComponent::OOOUSERNAME] = OUString(reinterpret_cast<const sal_Unicode*>(pBuf + 2), nUTF16Len); + } } } return aResult;