lists: don't crash if reason ptr is NULL

commit 15fec92ed7
(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.
This commit is contained in:
Florian Westphal 2012-01-02 23:37:46 +01:00
parent 565523cbb4
commit abfc5c6e27
1 changed files with 5 additions and 9 deletions

View File

@ -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;
}