Skip to content

Commit 1db7c36

Browse files
authored
Merge pull request #80 from nazar-pc/ArrayBufferView-fix
Fix support for any valid `ArrayDataView`
2 parents 9a66652 + cd31213 commit 1db7c36

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

lib/encode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ encode._floatConversionDetected = false
2828
encode.getType = function (value) {
2929
if (Buffer.isBuffer(value)) return 'buffer'
3030
if (Array.isArray(value)) return 'array'
31-
if (ArrayBuffer.isView(value)) return 'typedarray'
31+
if (ArrayBuffer.isView(value)) return 'arraybufferview'
3232
if (value instanceof Number) return 'number'
3333
if (value instanceof Boolean) return 'boolean'
3434
if (value instanceof ArrayBuffer) return 'arraybuffer'
@@ -45,7 +45,7 @@ encode._encode = function (buffers, data) {
4545
case 'string': encode.string(buffers, data); break
4646
case 'number': encode.number(buffers, data); break
4747
case 'boolean': encode.number(buffers, data); break
48-
case 'typedarray': encode.buffer(buffers, Buffer.from(data.buffer)); break
48+
case 'arraybufferview': encode.buffer(buffers, Buffer.from(data.buffer, data.byteOffset, data.byteLength)); break
4949
case 'arraybuffer': encode.buffer(buffers, Buffer.from(data)); break
5050
}
5151
}

test/encode.test.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,24 @@ test('bencode#encode()', function (t) {
161161
var data = new Float32Array([ 1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0 ])
162162
var result = bencode.decode(bencode.encode(data))
163163
var expected = Buffer.from(data.buffer)
164-
console.log(result)
164+
t.plan(1)
165+
t.deepEqual(result, expected)
166+
})
167+
168+
t.test('should encode DataView as buffer', function (t) {
169+
var data = new Uint8Array([ 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
170+
var view = new DataView(data.buffer)
171+
var result = bencode.decode(bencode.encode(view))
172+
var expected = Buffer.from(data.buffer)
173+
t.plan(1)
174+
t.deepEqual(result, expected)
175+
})
176+
177+
t.test('should encode Uint8Array subarray properly', function (t) {
178+
var data = new Uint8Array([ 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
179+
var subData = data.subarray(5)
180+
var result = bencode.decode(bencode.encode(subData))
181+
var expected = Buffer.from(subData.buffer, subData.byteOffset, subData.byteLength)
165182
t.plan(1)
166183
t.deepEqual(result, expected)
167184
})

0 commit comments

Comments
 (0)