]> granicus.if.org Git - graphviz/commitdiff
Fix bug 2296: logic was incorrect in do{}while loop.
authorEmden R. Gansner <erg@research.att.com>
Mon, 17 Jun 2013 21:41:10 +0000 (17:41 -0400)
committerEmden R. Gansner <erg@research.att.com>
Mon, 17 Jun 2013 21:41:10 +0000 (17:41 -0400)
lib/cgraph/io.c

index d6033a08cb7197416a4a30adf67a59fb615fcabc..c677c4f6b5eb9b24ac23bd470be91a90ead737d1 100644 (file)
@@ -112,10 +112,16 @@ memiofread(void *chan, char *buf, int bufsize)
     l = 0;
     ptr = s->data + s->cur;
     optr = buf;
+    /* We know we have at least one character */
+    c = *ptr++;
     do {
-        *optr++ = c = *ptr++;
+        *optr++ = c;
         l++;
-    } while (c && (c != '\n') && (l < bufsize));
+       /* continue if c is not newline, we have space in buffer,
+        * and next character is non-null (we are working with
+        * null-terminated strings.
+        */
+    } while ((c != '\n') && (l < bufsize) && (c = *ptr++));
     s->cur += l;
     return l;
 }