]> zoso.dev Git - buffer.git/commitdiff
If bytes.length is odd, the last 8 bits must be ignored (same as node.js)
authorclement <clement@seald.io>
Thu, 24 Oct 2019 14:22:55 +0000 (16:22 +0200)
committerclement <clement@seald.io>
Thu, 24 Oct 2019 14:22:55 +0000 (16:22 +0200)
index.js
test/to-string.js

index 19b0468a0abe20e311c0015cb694415e45fed5a7..49c184587e94493bba7c2a4d022a35b6abab3a1e 100644 (file)
--- a/index.js
+++ b/index.js
@@ -1076,7 +1076,8 @@ function hexSlice (buf, start, end) {
 function utf16leSlice (buf, start, end) {
   var bytes = buf.slice(start, end)
   var res = ''
-  for (var i = 0; i < bytes.length; i += 2) {
+  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)
+  for (var i = 0; i < bytes.length - 1; i += 2) {
     res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
   }
   return res
index 393627f77eb28a9807f8d529a4ae77224c17a17a..6b46875c9b210a80c379e957578358f8a1a6ff1a 100644 (file)
@@ -33,6 +33,14 @@ test('utf16le to utf16', function (t) {
   t.end()
 })
 
+test('utf16le to utf16 with odd byte length input', function (t) {
+  t.equal(
+    new B(new B('abcde', 'utf8').toString('utf16le'), 'utf16le').toString('utf8'),
+    'abcd'
+  )
+  t.end()
+})
+
 test('utf16le to hex', function (t) {
   t.equal(
     new B('abcd', 'utf16le').toString('hex'),