Skip to content

Commit f2c21d8

Browse files
authored
Merge pull request #56 from themasch/null-values
Ignore null-values when encoding
2 parents 9665eba + b284a4f commit f2c21d8

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

lib/decode.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ function getIntFromBuffer (buffer, start, end) {
4949
* @return {Object|Array|Buffer|String|Number}
5050
*/
5151
function decode (data, start, end, encoding) {
52+
if (data == null || data.length === 0) {
53+
return null
54+
}
55+
5256
if (typeof start !== 'number' && encoding == null) {
5357
encoding = start
5458
start = undefined

lib/encode.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ encode._encode = function (buffers, data) {
3030
return
3131
}
3232

33+
if (data == null) { return }
34+
3335
switch (typeof data) {
3436
case 'string':
3537
encode.buffer(buffers, data)
@@ -85,6 +87,7 @@ encode.dict = function (buffers, data) {
8587

8688
for (; j < kl; j++) {
8789
k = keys[j]
90+
if (data[k] == null) continue
8891
encode.buffer(buffers, k)
8992
encode._encode(buffers, data[k])
9093
}
@@ -98,6 +101,7 @@ encode.list = function (buffers, data) {
98101
buffers.push(buffL)
99102

100103
for (; i < c; i++) {
104+
if (data[i] == null) continue
101105
encode._encode(buffers, data[i])
102106
}
103107

test/null-values.test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var bencode = require('..')
2+
var test = require('tape').test
3+
4+
test('Data with null values', function (t) {
5+
t.test('should return an empty value when encoding either null or undefined', function (t) {
6+
t.plan(2)
7+
t.deepEqual(bencode.encode(null), new Buffer(0))
8+
t.deepEqual(bencode.encode(undefined), new Buffer(0))
9+
})
10+
11+
t.test('should return null when decoding an empty value', function (t) {
12+
t.plan(2)
13+
t.deepEqual(bencode.decode(new Buffer(0)), null)
14+
t.deepEqual(bencode.decode(''), null)
15+
})
16+
17+
t.test('should omit null values when encoding', function (t) {
18+
var data = [ { empty: null }, { notset: undefined }, null, undefined, 0 ]
19+
var result = bencode.decode(bencode.encode(data))
20+
var expected = [ {}, {}, 0 ]
21+
t.plan(1)
22+
t.deepEqual(result, expected)
23+
})
24+
})

0 commit comments

Comments
 (0)