diff --git a/apps/emqx/src/emqx_passwd.erl b/apps/emqx/src/emqx_passwd.erl index c243442ba..dc3622411 100644 --- a/apps/emqx/src/emqx_passwd.erl +++ b/apps/emqx/src/emqx_passwd.erl @@ -102,7 +102,11 @@ hash({SimpleHash, _Salt, disable}, Password) when is_binary(Password) -> hash({SimpleHash, Salt, prefix}, Password) when is_binary(Password), is_binary(Salt) -> hash_data(SimpleHash, <>); hash({SimpleHash, Salt, suffix}, Password) when is_binary(Password), is_binary(Salt) -> - hash_data(SimpleHash, <>). + hash_data(SimpleHash, <>); +hash({_SimpleHash, Salt, _SaltPos}, _Password) when not is_binary(Salt) -> + error({salt_not_string, Salt}); +hash({_SimpleHash, _Salt, _SaltPos}, Password) when not is_binary(Password) -> + error({password_not_string, Password}). -spec hash_data(hash_type(), binary()) -> binary(). hash_data(plain, Data) when is_binary(Data) -> diff --git a/apps/emqx/test/emqx_passwd_SUITE.erl b/apps/emqx/test/emqx_passwd_SUITE.erl index fd032bdb1..3078a5805 100644 --- a/apps/emqx/test/emqx_passwd_SUITE.erl +++ b/apps/emqx/test/emqx_passwd_SUITE.erl @@ -124,4 +124,18 @@ t_hash(_) -> false = emqx_passwd:check_pass({pbkdf2, sha, Pbkdf2Salt, 2, BadDKlen}, Pbkdf2, Password), %% Invalid derived_length, pbkdf2 fails - ?assertException(error, _, emqx_passwd:hash({pbkdf2, sha, Pbkdf2Salt, 2, BadDKlen}, Password)). + ?assertException(error, _, emqx_passwd:hash({pbkdf2, sha, Pbkdf2Salt, 2, BadDKlen}, Password)), + + %% invalid salt (not binary) + ?assertException( + error, + {salt_not_string, false}, + emqx_passwd:hash({sha256, false, suffix}, Password) + ), + + %% invalid password (not binary) + ?assertException( + error, + {password_not_string, bad_password_type}, + emqx_passwd:hash({sha256, Salt, suffix}, bad_password_type) + ).