summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vtysh/vtysh.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 90c387b48c..ce796140c7 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -149,7 +149,7 @@ static int vtysh_client_run(struct vtysh_client *vclient, const char *line,
bufvalid = buf;
do {
ssize_t nread =
- read(vclient->fd, bufvalid, buf + bufsz - bufvalid);
+ read(vclient->fd, bufvalid, buf + bufsz - bufvalid - 1);
if (nread < 0 && (errno == EINTR || errno == EAGAIN))
continue;
@@ -162,6 +162,9 @@ static int vtysh_client_run(struct vtysh_client *vclient, const char *line,
bufvalid += nread;
+ /* Null terminate so we may pass this to *printf later. */
+ bufvalid[0] = '\0';
+
/*
* We expect string output from daemons, so instead of looking
* for the full 3 null bytes of the terminator, we check for
@@ -195,7 +198,7 @@ static int vtysh_client_run(struct vtysh_client *vclient, const char *line,
else if (end)
/* no nl, end of input, but some text left */
eol = end;
- else if (bufvalid == buf + bufsz) {
+ else if (bufvalid == buf + bufsz - 1) {
/*
* no nl, no end of input, no buffer space;
* realloc