Bug 499200 - Explicitly check for object properties to avoid collisions with prototype properties like "eval" and "watch" in older versions.

ChatZilla only.
r=gijs


git-svn-id: svn://10.0.0.236/trunk@257970 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
silver%warwickcompsoc.co.uk 2009-08-07 14:24:23 +00:00
parent 6d18c3d6df
commit 32d5946bfd
2 changed files with 10 additions and 8 deletions

View File

@ -344,12 +344,12 @@ function cmgr_uninstkey (command)
CommandManager.prototype.addCommand = CommandManager.prototype.addCommand =
function cmgr_add (command) function cmgr_add (command)
{ {
if (command.name in this.commands) if (objectContains(this.commands, command.name))
{ {
/* We've already got a command with this name - invoke the history /* We've already got a command with this name - invoke the history
* storage so that we can undo this back to its original state. * storage so that we can undo this back to its original state.
*/ */
if (!(command.name in this.commandHistory)) if (!objectContains(this.commandHistory, command.name))
this.commandHistory[command.name] = new Array(); this.commandHistory[command.name] = new Array();
this.commandHistory[command.name].push(this.commands[command.name]); this.commandHistory[command.name].push(this.commands[command.name]);
} }
@ -371,7 +371,7 @@ CommandManager.prototype.removeCommand =
function cmgr_remove (command) function cmgr_remove (command)
{ {
delete this.commands[command.name]; delete this.commands[command.name];
if (command.name in this.commandHistory) if (objectContains(this.commandHistory, command.name))
{ {
/* There was a previous command with this name - restore the most /* There was a previous command with this name - restore the most
* recent from the history, returning the command to its former glory. * recent from the history, returning the command to its former glory.
@ -393,7 +393,7 @@ function cmgr_remove (command)
CommandManager.prototype.addHook = CommandManager.prototype.addHook =
function cmgr_hook (commandName, func, id, before) function cmgr_hook (commandName, func, id, before)
{ {
if (!ASSERT(commandName in this.commands, if (!ASSERT(objectContains(this.commands, commandName),
"Unknown command '" + commandName + "'")) "Unknown command '" + commandName + "'"))
{ {
return; return;
@ -484,11 +484,8 @@ function cmgr_list (partialName, flags)
/* A command named "eval" wouldn't show up in the result of keys() because /* A command named "eval" wouldn't show up in the result of keys() because
* eval is not-enumerable, even if overwritten, in Mozilla 1.0. */ * eval is not-enumerable, even if overwritten, in Mozilla 1.0. */
if (("eval" in this.commands) && (typeof this.commands.eval == "object") && if (objectContains(this.commands, "eval") && !arrayContains(commandNames, "eval"))
!arrayContains(commandNames, "eval"))
{
commandNames.push("eval"); commandNames.push("eval");
}
for (var i in commandNames) for (var i in commandNames)
{ {

View File

@ -801,6 +801,11 @@ function arrayRemoveAt (ary, i)
ary.splice (i, 1); ary.splice (i, 1);
} }
function objectContains(o, p)
{
return Object.hasOwnProperty.call(o, p);
}
/* length should be an even number >= 6 */ /* length should be an even number >= 6 */
function abbreviateWord (str, length) function abbreviateWord (str, length)
{ {