chg: check type read from S channel
The previous patch added the check server-side. This patch added it
client-side.
--- a/contrib/chg/hgclient.c Fri Jan 06 16:12:25 2017 +0000
+++ b/contrib/chg/hgclient.c Fri Jan 06 16:14:52 2017 +0000
@@ -239,14 +239,18 @@
const char **args = unpackcmdargsnul(ctx);
if (!args[0] || !args[1] || !args[2])
abortmsg("missing type or command or cwd in system request");
- debugmsg("run '%s' at '%s'", args[1], args[2]);
- int32_t r = runshellcmd(args[1], args + 3, args[2]);
- free(args);
+ if (strcmp(args[0], "system") == 0) {
+ debugmsg("run '%s' at '%s'", args[1], args[2]);
+ int32_t r = runshellcmd(args[1], args + 3, args[2]);
+ free(args);
- uint32_t r_n = htonl(r);
- memcpy(ctx->data, &r_n, sizeof(r_n));
- ctx->datasize = sizeof(r_n);
- writeblock(hgc);
+ uint32_t r_n = htonl(r);
+ memcpy(ctx->data, &r_n, sizeof(r_n));
+ ctx->datasize = sizeof(r_n);
+ writeblock(hgc);
+ } else {
+ abortmsg("unknown type in system request: %s", args[0]);
+ }
}
/* Read response of command execution until receiving 'r'-esult */