server: fix for non zero appended strings

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/server.c b/server.c
index a48842e..a8b8258 100644
--- a/server.c
+++ b/server.c
@@ -160,9 +160,11 @@
 		if (ret)
 			break;
 
-		if (first)
-			cmd_size = sizeof(cmd) + cmd.pdu_len;
-		else
+		if (first) {
+			/* if this is text, add room for \0 at the end */
+			cmd_size = sizeof(cmd) + cmd.pdu_len + 1;
+			assert(!cmdret);
+		} else
 			cmd_size += cmd.pdu_len;
 
 		cmdret = realloc(cmdret, cmd_size);
@@ -199,8 +201,17 @@
 	if (ret) {
 		free(cmdret);
 		cmdret = NULL;
-	} else if (cmdret)
+	} else if (cmdret) {
+		/* zero-terminate text input */
+		if (cmdret->pdu_len && (cmdret->opcode == FIO_NET_CMD_TEXT ||
+		    cmdret->opcode == FIO_NET_CMD_JOB)) {
+			char *buf = (char *) cmdret->payload;
+
+			buf[cmdret->pdu_len ] = '\0';
+		}
+		/* frag flag is internal */
 		cmdret->flags &= ~FIO_NET_CMD_F_MORE;
+	}
 
 	return cmdret;
 }
@@ -264,9 +275,9 @@
 	return fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_QUIT, 0);
 }
 
-static int handle_cur_job(struct fio_net_cmd *cmd)
+static int handle_job_cmd(struct fio_net_cmd *cmd)
 {
-	void *buf = cmd->payload;
+	char *buf = (char *) cmd->payload;
 	int ret;
 
 	parse_jobs_ini(buf, 1, 0);
@@ -303,7 +314,7 @@
 		exit_backend = 1;
 		return -1;
 	case FIO_NET_CMD_JOB:
-		ret = handle_cur_job(cmd);
+		ret = handle_job_cmd(cmd);
 		break;
 	case FIO_NET_CMD_PROBE:
 		ret = handle_probe_cmd(cmd);