Skip to content

Commit 591e52e

Browse files
committed
Added more versatile slowBufferCreate.
1 parent 427b0ed commit 591e52e

File tree

2 files changed

+78
-18
lines changed

2 files changed

+78
-18
lines changed

index.js

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,45 @@
11
"use strict";
22

3-
43
(function() {
54
var root = this;
65
var previous_mymodule = root.mymodule;
76

87
var createBuffer = null, convertBytesToString, convertStringToBytes = null;
98

10-
if (typeof Buffer === 'undefined') {
11-
createBuffer = function(arg) {
9+
var slowCreateBuffer = function(arg) {
1210

13-
// Passed in a single number, the length to pre-allocate
14-
if (typeof arg === 'number') {
15-
var result = [];
16-
for (var i = 0; i < arg; i++) {
17-
result.push(0);
18-
}
19-
return result;
11+
// Passed in a single number, the length to pre-allocate
12+
if (typeof arg === 'number') {
13+
var result = [];
14+
for (var i = 0; i < arg; i++) {
15+
result.push(0);
16+
}
17+
return result;
2018

21-
} else {
22-
// Make sure they are passing sensible data
23-
for (var i = 0; i < arg.length; i++) {
24-
if (arg[i] < 0 || arg[i] >= 256 || typeof arg[i] !== 'number') {
25-
throw new Error('invalid byte at index ' + i + '(' + arg[i] + ')');
26-
}
19+
} else {
20+
// Make sure they are passing sensible data
21+
for (var i = 0; i < arg.length; i++) {
22+
if (arg[i] < 0 || arg[i] >= 256 || typeof arg[i] !== 'number') {
23+
throw new Error('invalid byte at index ' + i + '(' + arg[i] + ')');
2724
}
25+
}
26+
27+
// Most array-like things should support this
28+
if (arg.slice) {
2829
return arg.slice(0);
2930
}
31+
32+
// Something *weird*; copy it into an array (see PR#2)
33+
var result = [];
34+
for (var i = 0; i < arg.length; i++) {
35+
result.push(arg[i]);
36+
}
37+
return result;
3038
}
39+
}
40+
41+
if (typeof(Buffer) === 'undefined') {
42+
createBuffer = slowCreateBuffer;
3143

3244
Array.prototype.copy = function(targetArray, targetStart, sourceStart, sourceEnd) {
3345
if (targetStart == null) { targetStart = 0; }
@@ -621,7 +633,8 @@
621633
ModeOfOperation: ModeOfOperation,
622634
util: {
623635
convertBytesToString: convertBytesToString,
624-
convertStringToBytes: convertStringToBytes
636+
convertStringToBytes: convertStringToBytes,
637+
_slowCreateBuffer: slowCreateBuffer
625638
}
626639
};
627640

@@ -633,7 +646,8 @@
633646
exports.ModeOfOperation = ModeOfOperation;
634647
exports.util = {
635648
convertBytesToString: convertBytesToString,
636-
convertStringToBytes: convertStringToBytes
649+
convertStringToBytes: convertStringToBytes,
650+
_slowCreateBuffer: slowCreateBuffer
637651
}
638652
/*
639653
if(typeof module !== 'undefined' && module.exports) {

test/test-buffer.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
'use strict';
2+
3+
var nodeunit = require('nodeunit');
4+
5+
var slowCreateBuffer = require('../index').util._slowCreateBuffer;
6+
7+
var testArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
8+
var testBuffer = new Buffer(testArray);
9+
10+
// We mimic some weird non-array-but-sortof-like-an-array object that people on
11+
// obscure browsers seem to have problems with, for the purpose of testing our
12+
// slowCreateBuffer.
13+
function WeirdBuffer(data) {
14+
this.length = data.length;
15+
for (var i = 0; i < data.length; i++) {
16+
this[i] = data[i];
17+
}
18+
}
19+
20+
function buffersEqual(a, b) {
21+
if (a.length !== b.length) { return false; }
22+
for (var i = 0; i < a.length; i++) {
23+
if (a[i] !== b[i]) {
24+
return false;
25+
}
26+
}
27+
return true;
28+
}
29+
30+
nodeunit.reporters.default.run({
31+
"test-buffer": {
32+
"slowCreate": function(test) {
33+
//var result = new AES(testArray).key;
34+
var result = slowCreateBuffer(testArray);
35+
test.ok(buffersEqual(testArray, result), 'bufferCreate failed to match input array');
36+
37+
result = slowCreateBuffer(testBuffer);
38+
test.ok(buffersEqual(testBuffer, result), 'bufferCreate failed to match input array');
39+
40+
result = slowCreateBuffer(new WeirdBuffer(testArray));
41+
test.ok(buffersEqual(testBuffer, result), 'bufferCreate failed to match input array');
42+
43+
test.done();
44+
},
45+
},
46+
});

0 commit comments

Comments
 (0)