diff --git a/src/MsgReader.ts b/src/MsgReader.ts index af65a38..28587f1 100644 --- a/src/MsgReader.ts +++ b/src/MsgReader.ts @@ -1535,7 +1535,7 @@ export default class MsgReader { skip = insideProps; } else if (decodeAs === "unicode") { - value = removeTrailingNull(ds.readUCS2String(array.length / 2)); + value = removeTrailingNull(ds.readUCS2String(Math.floor(array.length / 2))); skip = insideProps; } else if (decodeAs === "binary") { diff --git a/test/test.js b/test/test.js index fc04a83..e7bcf82 100644 --- a/test/test.js +++ b/test/test.js @@ -621,6 +621,17 @@ describe('MsgReader', function () { generateRegression('attachmentsOrder'); generateRegression('Many entities'); + it('reads a unicode property with an odd byte length', function () { + const { burn } = require('../lib/Burner'); + const body = new Uint8Array(Buffer.from('Hello')); + const array = burn([ + { name: 'Root Entry', type: TypeEnum.ROOT, length: 0, children: [1] }, + { name: '__substg1.0_1000001F', type: TypeEnum.DOCUMENT, length: body.length, binaryProvider: () => body }, + ]); + const fields = new MsgReader(array).getFileData(); + assert.strictEqual(fields.body, Buffer.from('Hell').toString('utf16le')); + }); + });