From d09c654d366641e99d23436a6d99db7a6919aedb Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Thu, 7 Aug 2014 13:17:54 -0700 Subject: [PATCH] prevent a crash if a doclet has an empty longname --- lib/jsdoc/name.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/jsdoc/name.js b/lib/jsdoc/name.js index a5a8a29e..9de1b3d8 100644 --- a/lib/jsdoc/name.js +++ b/lib/jsdoc/name.js @@ -9,6 +9,8 @@ var _ = require('underscore'); var escape = require('escape-string-regexp'); +var hasOwnProp = Object.prototype.hasOwnProperty; + /** * Longnames that have a special meaning in JSDoc. * @@ -315,20 +317,32 @@ exports.longnamesToTree = function longnamesToTree(longnames, doclets) { var tree = {}; longnames.forEach(function(longname) { - var processed = splitLongname(longname, splitOptions); - var nameInfo = processed.nameInfo; var chunk; var currentLongname = ''; var currentNavItem = tree; + var nameInfo; + var processed; + + // don't try to add empty longnames to the tree + if (!longname) { + return; + } + + processed = splitLongname(longname, splitOptions); + nameInfo = processed.nameInfo; processed.chunks.forEach(function(chunk) { currentLongname += chunk; - currentNavItem[chunk] = currentNavItem[chunk] || nameInfo[currentLongname]; - currentNavItem[chunk].doclet = doclets ? doclets[currentLongname] : null; - currentNavItem[chunk].children = currentNavItem[chunk].children || {}; + if (!hasOwnProp.call(currentNavItem, chunk)) { + currentNavItem[chunk] = nameInfo[currentLongname]; + } - currentNavItem = currentNavItem[chunk].children; + if (currentNavItem[chunk]) { + currentNavItem[chunk].doclet = doclets ? doclets[currentLongname] : null; + currentNavItem[chunk].children = currentNavItem[chunk].children || {}; + currentNavItem = currentNavItem[chunk].children; + } }); });