$OpenBSD: patch-crypting_c,v 1.2 2006/04/11 15:11:33 naddy Exp $ --- crypting.c.orig Sun Jan 15 02:04:28 2006 +++ crypting.c Sun Jan 29 03:27:22 2006 @@ -117,11 +117,15 @@ char *hashpass (irc_t *irc) { int i; char digits[3]; char *rv; + size_t rv_len; if (irc->password == NULL) return (NULL); - rv = (char *)g_malloc (33); - memset (rv, 0, 33); + rv_len = 33; + rv = (char *)g_malloc (rv_len); + if (!rv) return NULL; + + memset (rv, 0, rv_len); md5_init (&md5state); md5_append (&md5state, (unsigned char *)irc->password, strlen (irc->password)); @@ -130,7 +134,7 @@ char *hashpass (irc_t *irc) { for (i = 0; i < 16; i++) { /* Build a hash of the pass */ g_snprintf (digits, sizeof (digits), "%02x", digest[i]); - strcat (rv, digits); + strlcat (rv, digits, rv_len); } return (rv); @@ -229,6 +233,7 @@ int main( int argc, char *argv[] ) return( main( 0, NULL ) ); } + COMPILE_TIME_ASSERTION(255 < sizeof(s)); while( fscanf( stdin, "%[^\n]255s", line ) > 0 ) { char *out;