Corrected an error in which an invalid client name passed to the
"macro" command will crash magic. This will happen if, for example, magic is compiled without OpenGL support, in which case the "wind3d" client does not exist, and parsing the default macros from the system .magicrc file will cause an immediate crash.
This commit is contained in:
parent
99a5a28a3e
commit
1afd48e840
|
|
@ -1124,13 +1124,17 @@ windDoMacro(w, cmd, interactive)
|
||||||
/* next argument looks like a key, which would indicate */
|
/* next argument looks like a key, which would indicate */
|
||||||
/* an unregistered client as the first argument. A */
|
/* an unregistered client as the first argument. A */
|
||||||
/* macro retrieved from an unregistered client returns */
|
/* macro retrieved from an unregistered client returns */
|
||||||
/* nothing but does not generate an error. */
|
/* nothing but does not generate an error. This allows */
|
||||||
|
/* the default macro set to declare macros for, e.g., the */
|
||||||
|
/* wind3d client and fail quietly if magic was compiled */
|
||||||
|
/* without OpenGL support. */
|
||||||
|
|
||||||
if (MacroKey(cmd->tx_argv[argstart], &verbose) == 0)
|
if (MacroKey(cmd->tx_argv[argstart], &verbose) == 0)
|
||||||
if (MacroKey(cmd->tx_argv[argstart + 1], &verbose) != 0)
|
if (MacroKey(cmd->tx_argv[argstart + 1], &verbose) != 0)
|
||||||
{
|
{
|
||||||
wc = 0;
|
wc = 0;
|
||||||
argstart++;
|
argstart++;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1139,6 +1143,11 @@ windDoMacro(w, cmd, interactive)
|
||||||
|
|
||||||
if (cmd->tx_argc == argstart)
|
if (cmd->tx_argc == argstart)
|
||||||
{
|
{
|
||||||
|
if (wc == (WindClient)0)
|
||||||
|
{
|
||||||
|
TxError("No such client.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
h = HashLookOnly(&MacroClients, (char *)wc);
|
h = HashLookOnly(&MacroClients, (char *)wc);
|
||||||
if (h == NULL)
|
if (h == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
@ -1302,5 +1311,5 @@ windDoMacro(w, cmd, interactive)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TxError("Usage: %s [macro_name [string] [help_text]]\n", cmd->tx_argv[0]);
|
TxError("Usage: %s [client] [macro_name [string] [help_text]]\n", cmd->tx_argv[0]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue