Skip to content
This repository was archived by the owner on May 14, 2024. It is now read-only.

Commit bdbc1b1

Browse files
authored
Merge pull request #529 from dododedodonl/next
Store buffer on extended request
2 parents a8b09f3 + b87e4bb commit bdbc1b1

File tree

2 files changed

+128
-6
lines changed

2 files changed

+128
-6
lines changed

lib/messages/ext_request.js

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ function ExtendedRequest(options) {
2424

2525
this.requestName = options.requestName || '';
2626
this.requestValue = options.requestValue;
27+
28+
if(Buffer.isBuffer(this.requestValue)) {
29+
this.requestValueBuffer = this.requestValue;
30+
} else {
31+
this.requestValueBuffer = new Buffer(this.requestValue || '', 'utf8');
32+
}
2733
}
2834
util.inherits(ExtendedRequest, LDAPMessage);
2935
Object.defineProperties(ExtendedRequest.prototype, {
@@ -49,22 +55,38 @@ Object.defineProperties(ExtendedRequest.prototype, {
4955
if (!(Buffer.isBuffer(val) || typeof (val) === 'string'))
5056
throw new TypeError('value must be a buffer or a string');
5157

58+
if(Buffer.isBuffer(val)) {
59+
this.requestValueBuffer = val;
60+
} else {
61+
this.requestValueBuffer = new Buffer(val, 'utf8');
62+
}
63+
5264
this.requestValue = val;
5365
},
5466
configurable: false
67+
},
68+
valueBuffer: {
69+
get: function getValueBuffer() {
70+
return this.requestValueBuffer;
71+
},
72+
set: function setValueBuffer(val) {
73+
if(!Buffer.isBuffer(val))
74+
throw new TypeError('valueBuffer must be a buffer');
75+
76+
this.value = val;
77+
},
78+
configurable: false
5579
}
5680
});
5781

5882
ExtendedRequest.prototype._parse = function (ber) {
5983
assert.ok(ber);
6084

6185
this.requestName = ber.readString(0x80);
62-
if (ber.peek() === 0x81)
63-
try {
64-
this.requestValue = ber.readString(0x81);
65-
} catch (e) {
66-
this.requestValue = ber.readBuffer(0x81);
67-
}
86+
if (ber.peek() === 0x81) {
87+
this.requestValueBuffer = ber.readString(0x81, true);
88+
this.requestValue = this.requestValueBuffer.toString('utf8');
89+
}
6890

6991
return true;
7092
};

test/messages/ext_request.test.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,30 @@ var test = require('tape').test;
44

55
var asn1 = require('asn1');
66

7+
var Buffer = require('buffer').Buffer;
8+
9+
// Buffer.compare was only added on node 0.11.13
10+
var areBuffersEqual = function areBuffersEqual(bufA, bufB) {
11+
if(!(Buffer.isBuffer(bufA) && Buffer.isBuffer(bufB))) {
12+
return false;
13+
}
14+
15+
if(typeof Buffer.compare === 'function') {
16+
return Buffer.compare(bufA, bufB) === 0;
17+
}
18+
19+
var len = bufA.length;
20+
if (len !== bufB.length) {
21+
return false;
22+
}
23+
for (var i = 0; i < len; i++) {
24+
if (bufA.readUInt8(i) !== bufB.readUInt8(i)) {
25+
return false;
26+
}
27+
}
28+
return true;
29+
};
30+
731

832
///--- Globals
933

@@ -37,6 +61,58 @@ test('new with args', function (t) {
3761
t.ok(req);
3862
t.equal(req.requestName, '1.2.3.4');
3963
t.equal(req.requestValue, 'test');
64+
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
65+
t.equal(req.value, 'test');
66+
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
67+
t.end();
68+
});
69+
70+
71+
test('new with buffer args', function (t) {
72+
var req = new ExtendedRequest({
73+
requestName: '1.2.3.4',
74+
requestValue: new Buffer('test', 'utf8')
75+
});
76+
t.ok(req);
77+
t.equal(req.requestName, '1.2.3.4');
78+
t.equal(req.requestValue, req.requestValueBuffer);
79+
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
80+
t.equal(req.value, req.valueBuffer);
81+
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
82+
t.end();
83+
});
84+
85+
86+
test('new no args set args', function (t) {
87+
var req = new ExtendedRequest();
88+
t.ok(req);
89+
90+
req.name = '1.2.3.4';
91+
t.equal(req.requestName, '1.2.3.4');
92+
93+
req.value = 'test';
94+
t.equal(req.requestValue, 'test');
95+
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
96+
t.equal(req.value, 'test');
97+
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
98+
99+
t.end();
100+
});
101+
102+
103+
test('new no args set args buffer', function (t) {
104+
var req = new ExtendedRequest();
105+
t.ok(req);
106+
107+
req.name = '1.2.3.4';
108+
t.equal(req.requestName, '1.2.3.4');
109+
110+
req.value = new Buffer('test', 'utf8');
111+
t.equal(req.requestValue, req.requestValueBuffer);
112+
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
113+
t.equal(req.value, req.valueBuffer);
114+
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
115+
40116
t.end();
41117
});
42118

@@ -51,6 +127,9 @@ test('parse', function (t) {
51127
t.ok(req._parse(new BerReader(ber.buffer)));
52128
t.equal(req.requestName, '1.2.3.4');
53129
t.equal(req.requestValue, 'test');
130+
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
131+
t.equal(req.value, 'test');
132+
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
54133
t.end();
55134
});
56135

@@ -74,3 +153,24 @@ test('toBer', function (t) {
74153

75154
t.end();
76155
});
156+
157+
158+
test('toBer from buffer', function (t) {
159+
var req = new ExtendedRequest({
160+
messageID: 123,
161+
requestName: '1.2.3.4',
162+
requestValue: new Buffer('test', 'utf8')
163+
});
164+
165+
t.ok(req);
166+
167+
var ber = new BerReader(req.toBer());
168+
t.ok(ber);
169+
t.equal(ber.readSequence(), 0x30);
170+
t.equal(ber.readInt(), 123);
171+
t.equal(ber.readSequence(), 0x77);
172+
t.equal(ber.readString(0x80), '1.2.3.4');
173+
t.equal(ber.readString(0x81), 'test');
174+
175+
t.end();
176+
});

0 commit comments

Comments
 (0)