chg: check type read from S channel
authorJun Wu <quark@fb.com>
Fri, 06 Jan 2017 16:14:52 +0000
changeset 30728 7438cb35979a
parent 30727 18eb63ec8475
child 30729 a4bc8fff67fc
chg: check type read from S channel The previous patch added the check server-side. This patch added it client-side.
contrib/chg/hgclient.c
--- 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 */