From 849319a260a7137b51e84f35ba81ed0da72f0603 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Sun, 22 Mar 2015 20:45:16 -0400 Subject: [PATCH] util: Check input to util.inherits PR-URL: https://github.com/iojs/io.js/pull/1240 Reviewed-By: Brendan Ashworth Reviewed-By: Petka Antonov --- lib/util.js | 15 +++++++++++++++ test/parallel/test-util.js | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/lib/util.js b/lib/util.js index fb5f7f4b31..69c46e6ea7 100644 --- a/lib/util.js +++ b/lib/util.js @@ -616,8 +616,23 @@ exports.log = function() { * @param {function} ctor Constructor function which needs to inherit the * prototype. * @param {function} superCtor Constructor function to inherit prototype from. + * @throws {TypeError} Will error if either constructor is null, or if + * the super constructor lacks a prototype. */ exports.inherits = function(ctor, superCtor) { + + if (ctor === undefined || ctor === null) + throw new TypeError('The constructor to `inherits` must not be ' + + 'null or undefined.'); + + if (superCtor === undefined || superCtor === null) + throw new TypeError('The super constructor to `inherits` must not ' + + 'be null or undefined.'); + + if (superCtor.prototype === undefined) + throw new TypeError('The super constructor to `inherits` must ' + + 'have a prototype.'); + ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { diff --git a/test/parallel/test-util.js b/test/parallel/test-util.js index 2fb4bc5609..03456d6439 100644 --- a/test/parallel/test-util.js +++ b/test/parallel/test-util.js @@ -78,3 +78,10 @@ assert.deepEqual(util._extend({a:1}, true), {a:1}); assert.deepEqual(util._extend({a:1}, false), {a:1}); assert.deepEqual(util._extend({a:1}, {b:2}), {a:1, b:2}); assert.deepEqual(util._extend({a:1, b:2}, {b:3}), {a:1, b:3}); + +// inherits +var ctor = function() {}; +assert.throws(function() { util.inherits(ctor, {}) }, TypeError); +assert.throws(function() { util.inherits(ctor, null) }, TypeError); +assert.throws(function() { util.inherits(null, ctor) }, TypeError); +assert.doesNotThrow(function() { util.inherits(ctor, ctor) }, TypeError);