提交 b3c4cc12 编写于 作者: R Rich Felker

make crypt return an unmatchable hash rather than NULL on failure

unfortunately, a large portion of programs which call crypt are not
prepared for its failure and do not check that the return value is
non-null before using it. thus, always "succeeding" but giving an
unmatchable hash is reportedly a better behavior than failing on
error.

it was suggested that we could do this the same way as other
implementations and put the null-to-unmatchable translation in the
wrapper rather than the individual crypt modules like crypt_des, but
when i tried to do it, i found it was making the logic in __crypt_r
for keeping track of which hash type we're working with and whether it
succeeded or failed much more complex, and potentially error-prone.
the way i'm doing it now seems to have essentially zero cost, anyway.
上级 ae0b9da4
...@@ -1014,11 +1014,8 @@ char *__crypt_des(const char *key, const char *setting, char *output) ...@@ -1014,11 +1014,8 @@ char *__crypt_des(const char *key, const char *setting, char *output)
* likely that any alignment related issues would be detected. * likely that any alignment related issues would be detected.
*/ */
p = _crypt_extended_r_uut(test_key, test_setting, test_buf); p = _crypt_extended_r_uut(test_key, test_setting, test_buf);
if (p && !strcmp(p, test_hash)) if (p && !strcmp(p, test_hash) && retval)
return retval; return retval;
/* return (setting[0]=='*') ? "x" : "*";
* Should not happen.
*/
return NULL;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册