summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2012-01-02 23:37:46 +0100
committerFlorian Westphal <fw@strlen.de>2012-01-02 23:43:13 +0100
commitabfc5c6e27bcabec450b7e91ebc0bdca48ac8ef6 (patch)
treefec8efe873b39b28556b21a238d31b49d65ea50c
parent565523cbb4a5e2f34d584002916faba411a94187 (diff)
downloadngircd-abfc5c6e27bcabec450b7e91ebc0bdca48ac8ef6.tar.gz
ngircd-abfc5c6e27bcabec450b7e91ebc0bdca48ac8ef6.zip
lists: don't crash if reason ptr is NULL
commit 15fec92ed75c3de0b32c40d005e93e3f61aef77e
(Update list item, if it already exists) can make ngircd
crash because 'Reason' can be NULL, as reported by
Cahata on the ngircd mailing list.

Doesn't affect any released ngircd versions.

Also, make sure that we do not pass NULL as arguments
to a '%s' printf-like function.
-rw-r--r--src/ngircd/lists.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/ngircd/lists.c b/src/ngircd/lists.c
index d3f26e2e..fd86f301 100644
--- a/src/ngircd/lists.c
+++ b/src/ngircd/lists.c
@@ -60,13 +60,13 @@ Lists_GetMask(const struct list_elem *e)
  * Get optional "reason" text stored in list element.
  *
  * @param list_elem List element.
- * @return Pointer to "reason" text or NULL.
+ * @return Pointer to "reason" text or empty string ("").
  */
 GLOBAL const char *
 Lists_GetReason(const struct list_elem *e)
 {
 	assert(e != NULL);
-	return e->reason;
+	return e->reason ? e->reason : "";
 }
 
 /**
@@ -129,14 +129,10 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
 	e = Lists_CheckDupeMask(h, Mask);
 	if (e) {
 		e->valid_until = ValidUntil;
-		if (e->reason)
+		if (Reason) {
 			free(e->reason);
-		e->reason = malloc(strlen(Reason) + 1);
-		if (e->reason)
-			strlcpy(e->reason, Reason, strlen(Reason) + 1);
-		else
-			Log(LOG_EMERG,
-			    "Can't allocate memory for new list reason text!");
+			e->reason = strdup(Reason);
+		}
 		return true;
 	}