Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 18ca74d

Browse files
committed
fixed bug when trying to leak private variables while using "module.exports = ..."
1 parent 57cb8ac commit 18ca74d

File tree

7 files changed

+35
-17
lines changed

7 files changed

+35
-17
lines changed

lib/getLeakingSrc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
* Returns the source code that will leak private vars.
55
*
66
* e.g.:
7-
* "exports.__ = {myPrivateVar: myPrivateVar};"
7+
* "module.exports.__ = {myPrivateVar: myPrivateVar};"
88
*
99
* @param {Array<String>} leaks
1010
* @return {String}
1111
*/
1212
function getLeakingSrc(leaks) {
13-
var src = "exports.__ = {",
13+
var src = "module.exports.__ = {",
1414
varName,
1515
i;
1616

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name" : "rewire",
3-
"version" : "0.1.1",
3+
"version" : "0.1.2",
44
"description" : "Dependency injection for node.js applications",
55
"keywords" : [
66
"dependency",

test/getLeakingSrc.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ var expect = require("expect.js"),
44
getLeakingWrapper = require("../lib/getLeakingSrc.js");
55

66
describe("getLeakingWrapper", function () {
7-
it("should return 'exports.__ = {};'", function () {
8-
expect(getLeakingWrapper([])).to.be("exports.__ = {};");
7+
it("should return 'module.exports.__ = {};'", function () {
8+
expect(getLeakingWrapper([])).to.be("module.exports.__ = {};");
99
});
10-
it("should return 'exports.__ = {somethingPrivate:somethingPrivate,somethingSecret:somethingSecret};'", function () {
10+
it("should return 'module.exports.__ = {somethingPrivate:somethingPrivate,somethingSecret:somethingSecret};'", function () {
1111
var leakArr = ["somethingPrivate", "somethingSecret"];
1212

1313
expect(getLeakingWrapper(leakArr))
14-
.to.be("exports.__ = {somethingPrivate:somethingPrivate,somethingSecret:somethingSecret};");
14+
.to.be("module.exports.__ = {somethingPrivate:somethingPrivate,somethingSecret:somethingSecret};");
1515
});
1616
});

test/rewire.test.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,22 @@ describe("rewire", function () {
7070
rewired.exportAll();
7171
expect(rewired.console).to.be(456);
7272
});
73-
it("should leak private variables", function () {
73+
it("should leak private variables with both exports-styles (exports.bla = bla and module.exports = bla)", function () {
7474
var rewired,
7575
leaks = ["myPrivateVar"];
7676

77-
rewired = rewire("./testModules/A/moduleA.js", null, null, leaks);
77+
rewired = rewire("./testModules/privateModules/privateModuleA.js", null, null, leaks);
78+
expect(rewired.__.myPrivateVar).to.be("Hello I'm very private");
79+
rewired = rewire("./testModules/privateModules/privateModuleB.js", null, null, leaks);
7880
expect(rewired.__.myPrivateVar).to.be("Hello I'm very private");
7981
});
80-
it("should leak private functions", function () {
82+
it("should leak private functions with both exports-styles (exports.bla = bla and module.exports = bla)", function () {
8183
var rewired,
8284
leaks = ["myPrivateFunction"];
8385

84-
rewired = rewire("./testModules/A/moduleA.js", null, null, leaks);
86+
rewired = rewire("./testModules/privateModules/privateModuleA.js", null, null, leaks);
87+
expect(rewired.__.myPrivateFunction()).to.be("Hello I'm very private");
88+
rewired = rewire("./testModules/privateModules/privateModuleB.js", null, null, leaks);
8589
expect(rewired.__.myPrivateFunction()).to.be("Hello I'm very private");
8690
});
8791
it("should leak nothing on demand", function () {

test/testModules/A/moduleA.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ var path = require("path"),
99
toSrc = require("toSrc"), // node_modules path
1010
index = require("../"); // index.js path
1111

12-
var myPrivateVar = "Hello I'm very private";
13-
14-
function myPrivateFunction() {
15-
return "Hello I'm very private";
16-
}
17-
1812
function exportAll() {
1913
// expose all required modules to test for mocks
2014
exports.fs = fs;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict"; // run code in ES5 strict mode
2+
3+
var myPrivateVar = "Hello I'm very private";
4+
5+
function myPrivateFunction() {
6+
return "Hello I'm very private";
7+
}
8+
9+
// privateModuleA and privateModuleB use different styles of exports
10+
exports.bla = "somevalue";
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict"; // run code in ES5 strict mode
2+
3+
var myPrivateVar = "Hello I'm very private";
4+
5+
function myPrivateFunction() {
6+
return "Hello I'm very private";
7+
}
8+
9+
// privateModuleA and privateModuleB use different styles of exports
10+
module.exports = function bla() {};

0 commit comments

Comments
 (0)