Bugfix: Properly terminate lines not ending with a newline (Thanks xeen)
Previously, we didn’t check for a newline and thus could be corrupting formerly valid UTF-8 input, such as echo -n '↓' Fixes: #671
This commit is contained in:
parent
250577da36
commit
24ac6e32aa
|
@ -153,7 +153,7 @@ void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
|
||||||
int n = 0;
|
int n = 0;
|
||||||
int rec = 0;
|
int rec = 0;
|
||||||
int buffer_len = STDIN_CHUNK_SIZE;
|
int buffer_len = STDIN_CHUNK_SIZE;
|
||||||
unsigned char *buffer = smalloc(buffer_len);
|
unsigned char *buffer = smalloc(buffer_len+1);
|
||||||
buffer[0] = '\0';
|
buffer[0] = '\0';
|
||||||
while(1) {
|
while(1) {
|
||||||
n = read(fd, buffer + rec, buffer_len - rec);
|
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);
|
FREE(first->full_text);
|
||||||
/* Remove the trailing newline and terminate the string at the same
|
/* Remove the trailing newline and terminate the string at the same
|
||||||
* time. */
|
* 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;
|
first->full_text = (char*)buffer;
|
||||||
}
|
}
|
||||||
draw_bars();
|
draw_bars();
|
||||||
|
|
Loading…
Reference in New Issue