summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Wasilczyk <twasilczyk@pidgin.im>2014-02-08 00:57:28 +0100
committerTomasz Wasilczyk <twasilczyk@pidgin.im>2014-02-08 00:57:28 +0100
commitb9c26476397cf0be6c3c2de09961cac70f75bdc7 (patch)
tree326fbc651d2acabafe883828d24228090af9e8ca
parentc2999e5d0196061a4fbbfb8e3b4a9331a22c99a0 (diff)
downloadpidgin-b9c26476397cf0be6c3c2de09961cac70f75bdc7.tar.gz
Fix some clang static analysis warnings
-rw-r--r--libpurple/ciphers/pbkdf2cipher.c3
-rw-r--r--libpurple/dnssrv.c10
-rw-r--r--libpurple/idle.c3
-rw-r--r--libpurple/log.c8
-rw-r--r--libpurple/plugins/log_reader.c16
-rw-r--r--libpurple/plugins/ssl/ssl-gnutls.c7
-rw-r--r--libpurple/util.c8
-rw-r--r--libpurple/xfer.c2
8 files changed, 43 insertions, 14 deletions
diff --git a/libpurple/ciphers/pbkdf2cipher.c b/libpurple/ciphers/pbkdf2cipher.c
index ccbdf2b9ea..3c585c1f23 100644
--- a/libpurple/ciphers/pbkdf2cipher.c
+++ b/libpurple/ciphers/pbkdf2cipher.c
@@ -208,7 +208,8 @@ purple_pbkdf2_cipher_digest(PurpleCipher *cipher, guchar digest[], size_t len)
halfkey_pad = priv->out_len - (halfkey_count - 1) * halfkey_len;
salt_ext = g_new(guchar, salt_ext_len);
- memcpy(salt_ext, priv->salt, priv->salt_len);
+ if (priv->salt_len > 0)
+ memcpy(salt_ext, priv->salt, priv->salt_len);
for (halfkey_no = 1; halfkey_no <= halfkey_count; halfkey_no++) {
memset(halfkey, 0, halfkey_len);
diff --git a/libpurple/dnssrv.c b/libpurple/dnssrv.c
index cdf78d841f..d9c393a1e0 100644
--- a/libpurple/dnssrv.c
+++ b/libpurple/dnssrv.c
@@ -137,6 +137,8 @@ select_random_response(GList *list, PurpleSrvResponseContainer **container_ptr)
size_t runningtotal;
int r;
+ g_return_val_if_fail(list != NULL, NULL);
+
runningtotal = 0;
cur = list;
@@ -157,6 +159,8 @@ select_random_response(GList *list, PurpleSrvResponseContainer **container_ptr)
r = runningtotal ? g_random_int_range(1, runningtotal + 1) : 0;
cur = list;
while (r > ((PurpleSrvResponseContainer *)cur->data)->sum) {
+ if (G_UNLIKELY(!cur->next))
+ break;
cur = cur->next;
}
@@ -180,6 +184,8 @@ srv_reorder(GList *list, int num)
/* Nothing to sort */
return;
+ g_return_if_fail(list != NULL);
+
/* First build a list of container structs */
for (i = 0, cur = list; i < num; i++, cur = cur->next) {
container = g_new(PurpleSrvResponseContainer, 1);
@@ -198,6 +204,7 @@ srv_reorder(GList *list, int num)
cur->data = container->response;
g_free(container);
cur = cur->next;
+ g_return_if_fail(cur);
}
}
@@ -225,6 +232,9 @@ purple_srv_sort(GList *list)
count = 1;
while (cur) {
PurpleSrvResponse *next_response;
+
+ g_return_val_if_fail(cur->data, list);
+
pref = ((PurpleSrvResponse *)cur->data)->pref;
next_response = cur->next ? cur->next->data : NULL;
if (!next_response || next_response->pref != pref) {
diff --git a/libpurple/idle.c b/libpurple/idle.c
index 909ae72f00..c96fc0c8b6 100644
--- a/libpurple/idle.c
+++ b/libpurple/idle.c
@@ -114,7 +114,7 @@ static gint time_until_next_idle_event;
static void
check_idleness(void)
{
- time_t time_idle;
+ time_t time_idle = 0;
gboolean auto_away;
const gchar *idle_reporting;
gboolean report_idle = TRUE;
@@ -142,7 +142,6 @@ check_idleness(void)
else
{
/* Don't report idle time */
- time_idle = 0;
report_idle = FALSE;
/* If we're not reporting idle, we can still do auto-away.
diff --git a/libpurple/log.c b/libpurple/log.c
index 51f4d37042..1725222a25 100644
--- a/libpurple/log.c
+++ b/libpurple/log.c
@@ -292,6 +292,10 @@ gint purple_log_get_activity_score(PurpleLogType type, const char *name, PurpleA
while (logs) {
PurpleLog *log = (PurpleLog*)(logs->data);
+ if (!log) {
+ g_warn_if_reached();
+ continue;
+ }
/* Activity score counts bytes in the log, exponentially
decayed with a half-life of 14 days. */
score_double += purple_log_get_size(log) *
@@ -453,6 +457,8 @@ PurpleLogLogger *purple_log_logger_new(const char *id, const char *name, int fun
void purple_log_logger_free(PurpleLogLogger *logger)
{
+ if (!logger)
+ return;
g_free(logger->name);
g_free(logger->id);
g_free(logger);
@@ -1579,7 +1585,7 @@ static gsize txt_logger_write(PurpleLog *log,
data = log->logger_data;
/* if we can't write to the file, give up before we hurt ourselves */
- if(!data->file)
+ if(!data || !data->file)
return 0;
if (log->type == PURPLE_LOG_SYSTEM)
diff --git a/libpurple/plugins/log_reader.c b/libpurple/plugins/log_reader.c
index 9b576f9df3..d75382076e 100644
--- a/libpurple/plugins/log_reader.c
+++ b/libpurple/plugins/log_reader.c
@@ -922,7 +922,7 @@ static char * msn_logger_read (PurpleLog *log, PurpleLogReadFlags *flags)
PurpleXmlNode *to;
enum name_guesses name_guessed = NAME_GUESS_UNKNOWN;
const char *their_name;
- struct tm *tm;
+ struct tm *tm = NULL;
char *timestamp;
char *tmp;
const char *style;
@@ -1101,12 +1101,16 @@ static char * msn_logger_read (PurpleLog *log, PurpleLogReadFlags *flags)
text = g_string_append(text, ";\">");
}
- msn_logger_parse_timestamp(message, &tm);
-
- timestamp = g_strdup_printf("<font size=\"2\">(%02u:%02u:%02u)</font> ",
+ if (msn_logger_parse_timestamp(message, &tm)) {
+ timestamp = g_strdup_printf(
+ "<font size=\"2\">(%02u:%02u:%02u)</font> ",
tm->tm_hour, tm->tm_min, tm->tm_sec);
- text = g_string_append(text, timestamp);
- g_free(timestamp);
+ text = g_string_append(text, timestamp);
+ g_free(timestamp);
+ } else {
+ text = g_string_append(text,
+ "<font size=\"2\">(00:00:00)</font> ");
+ }
if (from_name) {
text = g_string_append(text, "<b>");
diff --git a/libpurple/plugins/ssl/ssl-gnutls.c b/libpurple/plugins/ssl/ssl-gnutls.c
index 0283b3bf10..2dc22f716e 100644
--- a/libpurple/plugins/ssl/ssl-gnutls.c
+++ b/libpurple/plugins/ssl/ssl-gnutls.c
@@ -412,8 +412,10 @@ ssl_gnutls_connect(PurpleSslConnection *gsc)
gnutls_set_default_priority(gnutls_data->session);
#endif
- gnutls_server_name_set(gnutls_data->session, GNUTLS_NAME_DNS, gsc->host,
- strlen(gsc->host));
+ if (gsc->host) {
+ gnutls_server_name_set(gnutls_data->session, GNUTLS_NAME_DNS,
+ gsc->host, strlen(gsc->host));
+ }
gnutls_credentials_set(gnutls_data->session, GNUTLS_CRD_CERTIFICATE,
xcred);
@@ -1192,6 +1194,7 @@ x509_display_string(PurpleCertificate *crt)
/* Pull out the SHA1 checksum */
sha_bin = x509_sha1sum(crt);
+ g_return_val_if_fail(sha_bin != NULL, NULL);
sha_asc = purple_base16_encode_chunked(sha_bin->data, sha_bin->len);
/* Get the cert Common Name */
diff --git a/libpurple/util.c b/libpurple/util.c
index c8d439f6b0..85790334ea 100644
--- a/libpurple/util.c
+++ b/libpurple/util.c
@@ -3731,7 +3731,7 @@ purple_str_seconds_to_string(guint secs)
hrs = secs / (60 * 60);
secs = secs % (60 * 60);
mins = secs / 60;
- secs = secs % 60;
+ /* secs = secs % 60; */
if (days > 0)
{
@@ -3870,8 +3870,12 @@ void purple_got_protocol_handler_uri(const char *uri)
while (*tmp || *pairstart) {
if (*tmp == delimiter || !(*tmp)) {
/* If there is no explicit value */
- if (keyend == NULL)
+ if (keyend == NULL) {
keyend = tmp;
+ }
+ /* without these brackets, clang won't
+ * recognize tmp as a non-NULL
+ */
if (keyend && keyend != pairstart) {
char *p;
diff --git a/libpurple/xfer.c b/libpurple/xfer.c
index 02cf4bcc07..488960c363 100644
--- a/libpurple/xfer.c
+++ b/libpurple/xfer.c
@@ -613,6 +613,8 @@ purple_xfer_request_accepted(PurpleXfer *xfer, const char *filename)
purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_ACCEPTED);
priv->ops.init(xfer);
return;
+ } else {
+ g_return_if_fail(filename != NULL);
}
buddy = purple_blist_find_buddy(account, priv->who);