]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Properly terminate lines not ending with a newline (Thanks xeen)
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 7 Apr 2012 17:15:41 +0000 (19:15 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 7 Apr 2012 17:15:41 +0000 (19:15 +0200)
Previously, we didn’t check for a newline and thus could be corrupting
formerly valid UTF-8 input, such as
    echo -n '↓'

Fixes: #671
i3bar/src/child.c

index c97f583800fa0a2f68431c289612332a22c632c8..0b6f07df34ff06ecf61f40de367587b230588831 100644 (file)
@@ -153,7 +153,7 @@ void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
     int n = 0;
     int rec = 0;
     int buffer_len = STDIN_CHUNK_SIZE;
-    unsigned char *buffer = smalloc(buffer_len);
+    unsigned char *buffer = smalloc(buffer_len+1);
     buffer[0] = '\0';
     while(1) {
         n = read(fd, buffer + rec, buffer_len - rec);
@@ -217,7 +217,9 @@ void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
         FREE(first->full_text);
         /* Remove the trailing newline and terminate the string at the same
          * time. */
-        buffer[rec-1] = '\0';
+        if (buffer[rec-1] == '\n' || buffer[rec-1] == '\r')
+            buffer[rec-1] = '\0';
+        else buffer[rec] = '\0';
         first->full_text = (char*)buffer;
     }
     draw_bars();