add _Noreturn function attribute, with fallback for pre-C11 GNUC
[musl] / src / misc / crypt_des.c
index 4dc6b4b..d7b2b15 100644 (file)
@@ -911,7 +911,7 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char
                                return NULL;
                        count |= value << (i - 1) * 6;
                }
-               if (!count)
+               if (!count || count > 262143)
                        return NULL;
 
                for (i = 5, salt = 0; i < 9; i++) {
@@ -1014,11 +1014,8 @@ char *__crypt_des(const char *key, const char *setting, char *output)
         * likely that any alignment related issues would be detected.
         */
        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;
 
-       /*
-        * Should not happen.
-        */
-       return NULL;
+       return (setting[0]=='*') ? "x" : "*";
 }