Socket
Socket
Sign inDemoInstall

gleak

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gleak - npm Package Compare versions

Comparing version 0.0.2 to 0.1.0

6

History.md
0.1.0 / 09-06-2011
==================
* added; #ignore method
* added; multiple instance support
0.0.2 / 09-06-2011

@@ -3,0 +9,0 @@ ==================

141

index.js
/**
* Gleak - detect global var leaks.
* @api public
*/
module.exports = exports = function gleak () {
return new Gleak;
}
/**
* Version.
* @api public
*/
exports.version = '0.1.0';
/**
* Express middleware.
* @api public
*/
exports.middleware = function gleakMiddleware (stream, format) {
var g = new Gleak;
if (!format) {
switch (typeof stream) {
case 'string':
format = stream;
stream = process.stderr;
break;
case 'undefined':
format = g.format;
stream = process.stderr;
break;
default:
format = g.format;
}
}
var known = [];
setTimeout(print, 1000);
function print () {
g.detect().forEach(function (leak) {
if (~known.indexOf(leak)) return;
known.push(leak);
stream.write(format.replace(/%s/, leak) + '\n');
});
}
return function gleakMiddleware (req, res, next) {
if (res._gleak) return next();
res._gleak = true;
var send = res.send;
res.send = function () {
res.send = send;
res.send.apply(res, arguments);
print();
}
next();
}
}
/**
* Gleak constructor
* @api private
*/
function Gleak () {
this.whitelist = this.whitelist.slice();
}
/**
* Whitelisted globals.

@@ -11,3 +82,3 @@ * @api public

exports.whitelist = [
Gleak.prototype.whitelist = [
setTimeout

@@ -28,12 +99,5 @@ , setInterval

exports.format = '\x1b[31mGleak!:\x1b[0m %s';
Gleak.prototype.format = '\x1b[31mGleak!:\x1b[0m %s';
/**
* Version.
* @api public
*/
exports.version = '0.0.2';
/**
* Detects global variable leaks.

@@ -43,4 +107,4 @@ * @api public

exports.detect = function detect () {
var whitelist = exports.whitelist
Gleak.prototype.detect = function detect () {
var whitelist = this.whitelist
, ret = []

@@ -72,5 +136,6 @@

exports.print = function print () {
exports.detect().forEach(function (leak) {
console.error(exports.format, leak);
Gleak.prototype.print = function print () {
var format = this.format;
this.detect().forEach(function (leak) {
console.error(format, leak);
});

@@ -80,48 +145,14 @@ }

/**
* Express middleware.
* Add items to the whitelist disallowing duplicates.
* @api public
*/
exports.middleware = function gleakMiddleware (stream, format) {
if (!format) {
switch (typeof stream) {
case 'string':
format = stream;
stream = process.stderr;
break;
case 'undefined':
format = exports.format;
stream = process.stderr;
break;
default:
format = exports.format;
}
Gleak.prototype.ignore = function ignore () {
var i = arguments.length;
while (i--) {
if (~this.whitelist.indexOf(arguments[i])) continue;
this.whitelist.push(arguments[i]);
}
var known = [];
setTimeout(print, 1000);
function print () {
exports.detect().forEach(function (leak) {
if (~known.indexOf(leak)) return;
known.push(leak);
stream.write(format.replace(/%s/, leak) + '\n');
});
}
return function gleakMiddleware (req, res, next) {
if (res._gleak) return next();
res._gleak = true;
var send = res.send;
res.send = function () {
res.send = send;
res.send.apply(res, arguments);
print();
}
next();
}
return this;
}

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

"description": "Node global variable leak detector",
"version": "0.0.2",
"version": "0.1.0",
"repository": {

@@ -8,0 +8,0 @@ "type": "git"

@@ -6,65 +6,105 @@

exports['version exists'] = function () {
assert.equal('string', typeof gleak.version);
}
exports['middleware exists'] = function () {
assert.equal('function', typeof gleak.middleware);
}
exports['gleak is a function'] = function () {
assert.equal('function', typeof gleak);
}
exports['default format is correct'] = function () {
assert.equal('\x1b[31mGleak!:\x1b[0m %s', gleak.format);
var g = gleak();
assert.equal('\x1b[31mGleak!:\x1b[0m %s', g.format);
}
exports['whitelist is an array'] = function () {
assert.ok(Array.isArray(gleak.whitelist));
var g = gleak();
assert.ok(Array.isArray(g.whitelist));
}
exports['setTimeout is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(setTimeout));
var g = gleak();
assert.ok(~g.whitelist.indexOf(setTimeout));
};
exports['setInterval is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(setInterval));
var g = gleak();
assert.ok(~g.whitelist.indexOf(setInterval));
};
exports['clearTimeout is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(clearTimeout));
var g = gleak();
assert.ok(~g.whitelist.indexOf(clearTimeout));
};
exports['clearInterval is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(clearInterval));
var g = gleak();
assert.ok(~g.whitelist.indexOf(clearInterval));
};
exports['console is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(console));
var g = gleak();
assert.ok(~g.whitelist.indexOf(console));
};
exports['Buffer is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(Buffer));
var g = gleak();
assert.ok(~g.whitelist.indexOf(Buffer));
};
exports['process is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(process));
var g = gleak();
assert.ok(~g.whitelist.indexOf(process));
};
exports['global is a default'] = function () {
assert.ok(~gleak.whitelist.indexOf(global));
var g = gleak();
assert.ok(~g.whitelist.indexOf(global));
};
exports['whitelist is mutable'] = function () {
var i = gleak.whitelist.push(assert);
assert.ok(~gleak.whitelist.indexOf(assert));
gleak.whitelist.splice(i-1, 1);
assert.ok(!~gleak.whitelist.indexOf(assert));
var g = gleak();
var i = g.whitelist.push(assert);
assert.ok(~g.whitelist.indexOf(assert));
g.whitelist.splice(i-1, 1);
assert.ok(!~g.whitelist.indexOf(assert));
}
exports['gleak.detect is a function'] = function () {
assert.ok('function' === typeof gleak.detect);
exports['#detect is a function'] = function () {
var g = gleak();
assert.ok('function' === typeof g.detect);
}
exports['detect()'] = function () {
var found = gleak.detect();
var g = gleak();
var found = g.detect();
assert.ok(Array.isArray(found));
assert.ok(0 === found.length);
haha = "lol"
assert.ok(1 === gleak.detect().length);
assert.equal("haha", gleak.detect()[0]);
assert.ok(1 === g.detect().length);
assert.equal("haha", g.detect()[0]);
}
exports['unknown values can be whitelisted by passing strings'] = function () {
var g = gleak();
ignoreme = 1;
assert.ok(~gleak.detect().indexOf('ignoreme'));
gleak.whitelist.push('ignoreme');
assert.ok(!~gleak.detect().indexOf('ignoreme'));
assert.ok(~g.detect().indexOf('ignoreme'));
g.whitelist.push('ignoreme');
assert.ok(!~g.detect().indexOf('ignoreme'));
delete global.ignoreme;
}
exports['print()'] = function () {
exports['#ignore'] = function () {
var g = gleak();
assert.equal('function', typeof g.ignore);
}
exports['ignore identical whitelisted values'] = function () {
var g = gleak();
var len = g.whitelist.length;
var an = 'another';
g.ignore('another', 'another', 'another', an);
assert.equal(len + 1, g.whitelist.length);
}
exports['#print'] = function () {
var g = gleak();
var write = console.error;

@@ -74,7 +114,7 @@ var times = 0;

console.error = function (format, item) {
assert.equal(gleak.format, format);
assert.equal(g.format, format);
assert.equal("haha", item);
++times;
}
gleak.print();
g.print();
console.error = write;

@@ -84,2 +124,19 @@ assert.equal(1, times);

exports['whitelists are seperate from other instances'] = function () {
var g1 = gleak()
, g2 = gleak();
g1.ignore('the', 'bad');
assert.ok(~g1.whitelist.indexOf('the'));
assert.ok(!~g2.whitelist.indexOf('the'));
}
exports['formats are seperate from other instances'] = function () {
var g1 = gleak()
, g2 = gleak();
g1.format = "different %s";
assert.ok(~g1.format !== g1.format);
}
exports['test middleware'] = function (beforeExit) {

@@ -86,0 +143,0 @@ var called = false;

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