Socket
Socket
Sign inDemoInstall

engine.io-parser

Package Overview
Dependencies
Maintainers
2
Versions
52
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

engine.io-parser - npm Package Compare versions

Comparing version 1.3.2 to 2.0.0

lib/utf8.js

10

History.md
2.0.0 / 2016-12-23
==================
* [perf] Micro optimisations (#84)
* [fix] Sanitize strings by removing lone surrogates (#82)
* [perf] Use strict equality where possible (#77)
* [style] Minor style changes (#83)
* [fix] Fix double utf8 encoding for payloads (#81)
* [chore] Update zuul config to speed up tests (#76)
1.3.2 / 2016-12-07

@@ -3,0 +13,0 @@ ==================

81

lib/browser.js

@@ -9,3 +9,3 @@ /**

var after = require('after');
var utf8 = require('wtf-8');
var utf8 = require('./utf8');

@@ -91,3 +91,3 @@ var base64encoder;

exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
if ('function' == typeof supportsBinary) {
if (typeof supportsBinary === 'function') {
callback = supportsBinary;

@@ -97,3 +97,3 @@ supportsBinary = false;

if ('function' == typeof utf8encode) {
if (typeof utf8encode === 'function') {
callback = utf8encode;

@@ -123,3 +123,3 @@ utf8encode = null;

if (undefined !== packet.data) {
encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
}

@@ -233,4 +233,4 @@

// String data
if (typeof data == 'string') {
if (data.charAt(0) == 'b') {
if (typeof data === 'string') {
if (data.charAt(0) === 'b') {
return exports.decodeBase64Packet(data.substr(1), binaryType);

@@ -269,3 +269,3 @@ }

try {
data = utf8.decode(data);
data = utf8.decode(data, { strict: false });
} catch (e) {

@@ -316,3 +316,3 @@ return false;

exports.encodePayload = function (packets, supportsBinary, callback) {
if (typeof supportsBinary == 'function') {
if (typeof supportsBinary === 'function') {
callback = supportsBinary;

@@ -341,3 +341,3 @@ supportsBinary = null;

function encodeOne(packet, doneCallback) {
exports.encodePacket(packet, !isBinary ? false : supportsBinary, true, function(message) {
exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {
doneCallback(null, setLengthHeader(message));

@@ -381,3 +381,3 @@ });

exports.decodePayload = function (data, binaryType, callback) {
if (typeof data != 'string') {
if (typeof data !== 'string') {
return exports.decodePayloadAsBinary(data, binaryType, callback);

@@ -392,3 +392,3 @@ }

var packet;
if (data == '') {
if (data === '') {
// parser error - ignoring payload

@@ -398,4 +398,3 @@ return callback(err, 0, 1);

var length = ''
, n, msg;
var length = '', n, msg;

@@ -405,36 +404,37 @@ for (var i = 0, l = data.length; i < l; i++) {

if (':' != chr) {
if (chr !== ':') {
length += chr;
} else {
if ('' == length || (length != (n = Number(length)))) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
continue;
}
msg = data.substr(i + 1, n);
if (length === '' || (length != (n = Number(length)))) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
if (length != msg.length) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
msg = data.substr(i + 1, n);
if (msg.length) {
packet = exports.decodePacket(msg, binaryType, true);
if (length != msg.length) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
if (err.type == packet.type && err.data == packet.data) {
// parser error in individual packet - ignoring payload
return callback(err, 0, 1);
}
if (msg.length) {
packet = exports.decodePacket(msg, binaryType, false);
var ret = callback(packet, i + n, l);
if (false === ret) return;
if (err.type === packet.type && err.data === packet.data) {
// parser error in individual packet - ignoring payload
return callback(err, 0, 1);
}
// advance cursor
i += n;
length = '';
var ret = callback(packet, i + n, l);
if (false === ret) return;
}
// advance cursor
i += n;
length = '';
}
if (length != '') {
if (length !== '') {
// parser error - ignoring payload

@@ -577,3 +577,2 @@ return callback(err, 0, 1);

var numberTooLong = false;
while (bufferTail.byteLength > 0) {

@@ -585,7 +584,7 @@ var tailArray = new Uint8Array(bufferTail);

for (var i = 1; ; i++) {
if (tailArray[i] == 255) break;
if (tailArray[i] === 255) break;
// 310 = char length of Number.MAX_VALUE
if (msgLength.length > 310) {
numberTooLong = true;
break;
return callback(err, 0, 1);
}

@@ -596,4 +595,2 @@

if(numberTooLong) return callback(err, 0, 1);
bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);

@@ -600,0 +597,0 @@ msgLength = parseInt(msgLength);

@@ -5,3 +5,3 @@ /**

var utf8 = require('wtf-8');
var utf8 = require('./utf8');
var after = require('after');

@@ -54,3 +54,3 @@ var keys = require('./keys');

exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
if ('function' == typeof supportsBinary) {
if (typeof supportsBinary === 'function') {
callback = supportsBinary;

@@ -60,3 +60,3 @@ supportsBinary = null;

if ('function' == typeof utf8encode ) {
if (typeof utf8encode === 'function') {
callback = utf8encode;

@@ -78,3 +78,3 @@ utf8encode = null;

if (undefined !== packet.data) {
encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
}

@@ -90,3 +90,2 @@

function encodeBuffer(packet, supportsBinary, callback) {
var data = packet.data;
if (!supportsBinary) {

@@ -96,2 +95,3 @@ return exports.encodeBase64Packet(packet, callback);

var data = packet.data;
var typeBuffer = new Buffer(1);

@@ -130,10 +130,14 @@ typeBuffer[0] = packets[packet.type];

}
var type;
// String data
if (typeof data == 'string') {
if (data.charAt(0) == 'b') {
if (typeof data === 'string') {
type = data.charAt(0);
if (type === 'b') {
return exports.decodeBase64Packet(data.substr(1), binaryType);
}
var type = data.charAt(0);
if (utf8decode) {

@@ -161,3 +165,3 @@ data = tryDecode(data);

var intArray = new Uint8Array(data);
var type = intArray[0];
type = intArray[0];
return { type: packetslist[type], data: intArray.buffer.slice(1) };

@@ -169,3 +173,3 @@ }

}
var type = data[0];
type = data[0];
return { type: packetslist[type], data: data.slice(1) };

@@ -176,3 +180,3 @@ };

try {
data = utf8.decode(data);
data = utf8.decode(data, { strict: false });
} catch (e) {

@@ -221,3 +225,3 @@ return false;

exports.encodePayload = function (packets, supportsBinary, callback) {
if (typeof supportsBinary == 'function') {
if (typeof supportsBinary === 'function') {
callback = supportsBinary;

@@ -235,8 +239,4 @@ supportsBinary = null;

function setLengthHeader(message) {
return message.length + ':' + message;
}
function encodeOne(packet, doneCallback) {
exports.encodePacket(packet, supportsBinary, true, function(message) {
exports.encodePacket(packet, supportsBinary, false, function(message) {
doneCallback(null, setLengthHeader(message));

@@ -251,2 +251,6 @@ });

function setLengthHeader(message) {
return message.length + ':' + message;
}
/**

@@ -260,11 +264,7 @@ * Async array map using after

var eachWithIndex = function(i, el, cb) {
each(el, function(error, msg) {
for (var i = 0; i < ary.length; i++) {
each(ary[i], function(error, msg) {
result[i] = msg;
cb(error, result);
next(error, result);
});
};
for (var i = 0; i < ary.length; i++) {
eachWithIndex(i, ary[i], next);
}

@@ -282,3 +282,3 @@ }

exports.decodePayload = function (data, binaryType, callback) {
if ('string' != typeof data) {
if (typeof data !== 'string') {
return exports.decodePayloadAsBinary(data, binaryType, callback);

@@ -292,4 +292,3 @@ }

var packet;
if (data == '') {
if (data === '') {
// parser error - ignoring payload

@@ -299,4 +298,3 @@ return callback(err, 0, 1);

var length = ''
, n, msg;
var length = '', n, msg, packet;

@@ -306,36 +304,37 @@ for (var i = 0, l = data.length; i < l; i++) {

if (':' != chr) {
if (chr !== ':') {
length += chr;
} else {
if ('' == length || (length != (n = Number(length)))) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
continue;
}
msg = data.substr(i + 1, n);
if (length === '' || (length != (n = Number(length)))) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
if (length != msg.length) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
msg = data.substr(i + 1, n);
if (msg.length) {
packet = exports.decodePacket(msg, binaryType, true);
if (length != msg.length) {
// parser error - ignoring payload
return callback(err, 0, 1);
}
if (err.type == packet.type && err.data == packet.data) {
// parser error in individual packet - ignoring payload
return callback(err, 0, 1);
}
if (msg.length) {
packet = exports.decodePacket(msg, binaryType, false);
var ret = callback(packet, i + n, l);
if (false === ret) return;
if (err.type === packet.type && err.data === packet.data) {
// parser error in individual packet - ignoring payload
return callback(err, 0, 1);
}
// advance cursor
i += n;
length = '';
var more = callback(packet, i + n, l);
if (false === more) return;
}
// advance cursor
i += n;
length = '';
}
if (length != '') {
if (length !== '') {
// parser error - ignoring payload

@@ -356,3 +355,3 @@ return callback(err, 0, 1);

var str = '';
for (var i = 0; i < buffer.length; i++) {
for (var i = 0, l = buffer.length; i < l; i++) {
str += String.fromCharCode(buffer[i]);

@@ -372,3 +371,3 @@ }

var buf = new Buffer(string.length);
for (var i = 0; i < string.length; i++) {
for (var i = 0, l = string.length; i < l; i++) {
buf.writeUInt8(string.charCodeAt(i), i);

@@ -418,19 +417,17 @@ }

function encodeOne(p, doneCallback) {
exports.encodePacket(p, true, true, function(packet) {
map(packets, encodeOneBinaryPacket, function(err, results) {
return callback(Buffer.concat(results));
});
};
if (typeof packet === 'string') {
var encodingLength = '' + packet.length;
var sizeBuffer = new Buffer(encodingLength.length + 2);
sizeBuffer[0] = 0; // is a string (not true binary = 0)
for (var i = 0; i < encodingLength.length; i++) {
sizeBuffer[i + 1] = parseInt(encodingLength[i], 10);
}
sizeBuffer[sizeBuffer.length - 1] = 255;
return doneCallback(null, Buffer.concat([sizeBuffer, stringToBuffer(packet)]));
}
function encodeOneBinaryPacket(p, doneCallback) {
var encodingLength = '' + packet.length;
var sizeBuffer = new Buffer(encodingLength.length + 2);
sizeBuffer[0] = 1; // is binary (true binary = 1)
function onBinaryPacketEncode(packet) {
var encodingLength = '' + packet.length;
var sizeBuffer;
if (typeof packet === 'string') {
sizeBuffer = new Buffer(encodingLength.length + 2);
sizeBuffer[0] = 0; // is a string (not true binary = 0)
for (var i = 0; i < encodingLength.length; i++) {

@@ -440,11 +437,20 @@ sizeBuffer[i + 1] = parseInt(encodingLength[i], 10);

sizeBuffer[sizeBuffer.length - 1] = 255;
doneCallback(null, Buffer.concat([sizeBuffer, packet]));
});
return doneCallback(null, Buffer.concat([sizeBuffer, stringToBuffer(packet)]));
}
sizeBuffer = new Buffer(encodingLength.length + 2);
sizeBuffer[0] = 1; // is binary (true binary = 1)
for (var i = 0; i < encodingLength.length; i++) {
sizeBuffer[i + 1] = parseInt(encodingLength[i], 10);
}
sizeBuffer[sizeBuffer.length - 1] = 255;
doneCallback(null, Buffer.concat([sizeBuffer, packet]));
}
map(packets, encodeOne, function(err, results) {
return callback(Buffer.concat(results));
});
};
exports.encodePacket(p, true, true, onBinaryPacketEncode);
}
/*

@@ -467,2 +473,3 @@ * Decodes data when a payload is maybe expected. Strings are decoded by

var buffers = [];
var i;

@@ -472,13 +479,10 @@ while (bufferTail.length > 0) {

var isString = bufferTail[0] === 0;
var numberTooLong = false;
for (var i = 1; ; i++) {
if (bufferTail[i] == 255) break;
for (i = 1; ; i++) {
if (bufferTail[i] === 255) break;
// 310 = char length of Number.MAX_VALUE
if (strLen.length > 310) {
numberTooLong = true;
break;
return callback(err, 0, 1);
}
strLen += '' + bufferTail[i];
}
if(numberTooLong) return callback(err, 0, 1);
bufferTail = bufferTail.slice(strLen.length + 1);

@@ -495,5 +499,6 @@

var total = buffers.length;
buffers.forEach(function(buffer, i) {
for (i = 0; i < total; i++) {
var buffer = buffers[i];
callback(exports.decodePacket(buffer, binaryType, true), i, total);
});
}
};

@@ -5,3 +5,3 @@ {

"license": "MIT",
"version": "1.3.2",
"version": "2.0.0",
"homepage": "https://github.com/socketio/engine.io-parser",

@@ -11,2 +11,3 @@ "devDependencies": {

"mocha": "3.2.0",
"socket.io-browsers": "^1.0.0",
"zuul": "3.11.1",

@@ -20,4 +21,3 @@ "zuul-ngrok": "4.0.0"

"blob": "0.0.4",
"has-binary": "0.1.7",
"wtf-8": "1.0.0"
"has-binary": "0.1.7"
},

@@ -24,0 +24,0 @@ "scripts": {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc