]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: additional patch for 496e83a
authorQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 18 Jan 2017 06:09:26 +0000 (06:09 +0000)
committerDavid Lamparter <equinox@opensourcerouting.org>
Wed, 18 Jan 2017 16:15:12 +0000 (17:15 +0100)
Fixes a couple off-by-ones introduced in previous commit.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
[cherry-picked from master d1e4a518e6f55ccf80c67b58d16eeb1cbf5923e3]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/vty.c

index 23d7153417cdcde59ee10ee8fbf72cef2cee6e50..adcfaca4f3d4f4b8faeb0816d65009a033d0eaae 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -515,7 +515,7 @@ vty_self_insert (struct vty *vty, char c)
   int i;
   int length;
 
-  if (vty->length + 1 > VTY_BUFSIZ)
+  if (vty->length + 1 >= VTY_BUFSIZ)
     return;
 
   length = vty->length - vty->cp;
@@ -528,6 +528,8 @@ vty_self_insert (struct vty *vty, char c)
 
   vty->cp++;
   vty->length++;
+
+  vty->buf[vty->length] = '\0';
 }
 
 /* Self insert character 'c' in overwrite mode. */
@@ -553,11 +555,15 @@ vty_self_insert_overwrite (struct vty *vty, char c)
 static void
 vty_insert_word_overwrite (struct vty *vty, char *str)
 {
-  size_t nwrite = MIN ((int) strlen (str), VTY_BUFSIZ - vty->cp);
-  vty_write (vty, str, nwrite);
-  strncpy (&vty->buf[vty->cp], str, nwrite);
+  if (vty->cp == VTY_BUFSIZ)
+    return;
+
+  size_t nwrite = MIN ((int) strlen (str), VTY_BUFSIZ - vty->cp - 1);
+  memcpy (&vty->buf[vty->cp], str, nwrite);
   vty->cp += nwrite;
-  vty->length = vty->cp;
+  vty->length = MAX (vty->cp, vty->length);
+  vty->buf[vty->length] = '\0';
+  vty_write (vty, str, nwrite);
 }
 
 /* Forward character. */
@@ -614,6 +620,7 @@ vty_history_print (struct vty *vty)
   length = strlen (vty->hist[vty->hp]);
   memcpy (vty->buf, vty->hist[vty->hp], length);
   vty->cp = vty->length = length;
+  vty->buf[vty->length] = '\0';
 
   /* Redraw current line */
   vty_redraw_line (vty);
@@ -2210,7 +2217,7 @@ vtysh_read (struct thread *thread)
   printf ("line: %.*s\n", nbytes, buf);
 #endif /* VTYSH_DEBUG */
 
-  if (vty->length + nbytes > VTY_BUFSIZ)
+  if (vty->length + nbytes >= VTY_BUFSIZ)
     {
       /* Clear command line buffer. */
       vty->cp = vty->length = 0;