Mercurial > pidgin
changeset 31753:d1ea32c41634
log_reader: strchr(), and some simplifying to make clang happier
Clang's static analyzer thought 'line' might result in a null deref
in the trillian log reader, if there was an empty "(Link: )" section
(temp would be NULL), except that couldn't ever happen, because the data
was *always* \n-terminated, so 'c' is alway non-NULL.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Thu, 21 Jul 2011 05:36:54 +0000 |
parents | cb4705abb991 |
children | d6c47cc28870 |
files | libpurple/plugins/log_reader.c |
diffstat | 1 files changed, 18 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/plugins/log_reader.c Wed Jul 20 16:51:55 2011 +0000 +++ b/libpurple/plugins/log_reader.c Thu Jul 21 05:36:54 2011 +0000 @@ -1454,11 +1454,10 @@ const char *footer = NULL; GString *temp = NULL; - if ((c = strstr(c, "\n"))) - { - *c = '\0'; - c++; - } + /* The data is always terminated with a newline (see above) */ + c = strchr(c, '\n'); + *c = '\0'; + c++; /* Convert links. * @@ -1482,14 +1481,14 @@ char *end_paren; char *space; - if (!(end_paren = strstr(link, ")"))) + if (!(end_paren = strchr(link, ')'))) { /* Something is not as we expect. Bail out. */ break; } if (!temp) - temp = g_string_sized_new(c ? (c - 1 - line) : strlen(line)); + temp = g_string_sized_new(strlen(line)); g_string_append_len(temp, line, (tmp - line)); @@ -1504,7 +1503,7 @@ /* The \r is a bit of a hack to keep there from being a \r in * the link text, which may not matter. */ - if ((space = strstr(end_paren, " ")) || (space = strstr(end_paren, "\r"))) + if ((space = strchr(end_paren, ' ')) || (space = strchr(end_paren, '\r'))) { g_string_append_len(temp, end_paren + 1, space - end_paren - 1); @@ -1539,7 +1538,7 @@ if (*line == '[') { const char *timestamp; - if ((timestamp = strstr(line, "]"))) { + if ((timestamp = strchr(line, ']'))) { line++; /* TODO: Parse the timestamp and convert it to Purple's format. */ g_string_append(formatted, "<font size=\"2\">("); @@ -1658,7 +1657,7 @@ } } } else { - const char *line2 = strstr(line, ":"); + const char *line2 = strchr(line, ':'); if (line2) { const char *acct_name; line2++; @@ -1828,11 +1827,11 @@ new_line = c; /* find EOL */ - c = strstr(c, "\n"); + c = strchr(c, '\n'); c++; /* Find the last '(' character. */ - if ((tmp = strstr(c, "\n")) != NULL) { + if ((tmp = strchr(c, '\n')) != NULL) { while (*tmp && *tmp != '(') --tmp; c = tmp; } else { @@ -1904,7 +1903,7 @@ if (*c) { /* find EOF */ - c = strstr(c, "\n"); + c = strchr(c, '\n'); c++; } } @@ -1983,13 +1982,13 @@ is_in_message = purple_str_has_prefix(line, QIP_LOG_IN_MESSAGE_ESC); /* find EOL */ - c = strstr(c, "\n"); + c = strchr(c, '\n'); /* XXX: Do we need buddy_name when we have buddy->alias? */ buddy_name = ++c; /* Find the last '(' character. */ - if ((tmp = strstr(c, "\n")) != NULL) { + if ((tmp = strchr(c, '\n')) != NULL) { while (*tmp && *tmp != '(') --tmp; c = tmp; } else { @@ -2042,12 +2041,12 @@ } /* find EOF */ - c = strstr(c, "\n"); + c = strchr(c, '\n'); line = ++c; } } } else { - if ((c = strstr(c, "\n"))) + if ((c = strchr(c, '\n'))) *c = '\0'; if (line[0] != '\n' && line[0] != '\r') { @@ -2186,7 +2185,7 @@ " length = (%d)\n", sn, data->path, data->offset, data->length); } - c = strstr(c, "\n"); + c = strchr(c, '\n'); c++; } @@ -2342,7 +2341,7 @@ char *end; char *old_tag; char *tag; - end = strstr(start, "\n"); + end = strchr(start, '\n'); if (!end) break; *end = '\0';