Mercurial > dovecot > core-2.2
changeset 22477:125e78e85bcc
lib-mail: Make sure mail_user_hash() won't return 0 as the hash.
It doesn't seem to actually happen, but this makes sure of it.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Wed, 19 Jul 2017 16:49:18 +0300 |
parents | 239bc902f6da |
children | c647979828d1 |
files | src/lib-mail/mail-user-hash.c src/lib-mail/mail-user-hash.h |
diffstat | 2 files changed, 7 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/mail-user-hash.c Thu Jul 06 15:45:24 2017 +0300 +++ b/src/lib-mail/mail-user-hash.c Wed Jul 19 16:49:18 2017 +0300 @@ -42,6 +42,12 @@ } T_END; for (i = 0; i < sizeof(hash); i++) hash = (hash << CHAR_BIT) | md5[i]; + if (hash == 0) { + /* Make sure we don't return the hash as 0, since it's often + treated in a special way that won't work well. For example + trying to insert it into a hash table will assert-crash. */ + hash = 1; + } return hash; }
--- a/src/lib-mail/mail-user-hash.h Thu Jul 06 15:45:24 2017 +0300 +++ b/src/lib-mail/mail-user-hash.h Wed Jul 19 16:49:18 2017 +0300 @@ -2,7 +2,7 @@ #define MAIL_USER_HASH /* Return a hash for username, based on given format. The format can use - %n, %d and %u variables. */ + %n, %d and %u variables. The returned hash is never 0. */ unsigned int mail_user_hash(const char *username, const char *format); #endif