summaryrefslogtreecommitdiff
path: root/user/libreoffice/mso-lockfile-utf16le.patch
blob: e71413e0addf5816c18332783e3253b762f0a522 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--- 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;