coverity/155506: null dereference (#7089)

Coverity warning is a false positive: if rbuffer_read_ptr() returns
NULL then `cnt` is zero.

Revert 76ea97c809 (which caused
the TSan build to hang often--possibly because of the missing ui_flush()).
Instead, modify out_data_append_to_screen() to check for NULL.

ref #6862
This commit is contained in:
Justin M. Keyes 2017-07-29 04:53:40 +02:00 committed by GitHub
parent 707bb37494
commit 5acda12419

View File

@ -447,7 +447,7 @@ static void out_data_append_to_screen(char *output, size_t remaining,
size_t off = 0; size_t off = 0;
int last_row = (int)Rows - 1; int last_row = (int)Rows - 1;
while (off < remaining) { while (output != NULL && off < remaining) {
// Found end of line? // Found end of line?
if (output[off] == NL) { if (output[off] == NL) {
// Can we start a new line or do we need to continue the last one? // Can we start a new line or do we need to continue the last one?
@ -473,7 +473,7 @@ static void out_data_append_to_screen(char *output, size_t remaining,
off++; off++;
} }
if (remaining) { if (output != NULL && remaining) {
if (last_col == 0) { if (last_col == 0) {
screen_del_lines(0, 0, 1, (int)Rows, NULL); screen_del_lines(0, 0, 1, (int)Rows, NULL);
} }
@ -496,12 +496,8 @@ static void out_data_cb(Stream *stream, RBuffer *buf, size_t count, void *data,
size_t cnt; size_t cnt;
char *ptr = rbuffer_read_ptr(buf, &cnt); char *ptr = rbuffer_read_ptr(buf, &cnt);
if (ptr == NULL || cnt == 0) { if (ptr != NULL && cnt > 0
// Nothing to read; && out_data_decide_throttle(cnt)) { // Skip output above a threshold.
return;
}
if (out_data_decide_throttle(cnt)) { // Skip output above a threshold.
// Save the skipped output. If it is the final chunk, we display it later. // Save the skipped output. If it is the final chunk, we display it later.
out_data_ring(ptr, cnt); out_data_ring(ptr, cnt);
} else { } else {