From e7f65d97c80d3604f8aedf67b057c7b79ea3b183 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 30 Dec 2022 19:08:37 -0800 Subject: crypt: fix for platforms that lack crypt_r. * sysif.c (crypt_wrap): Don't call free(cd) on platforms where we don't have crypt_r and have not defined the cd variable. * test/018/crypt.tl: Move the (crypt "a" "b") test case to be GNU/Linux-only. On Solaris, it yields a valid-looking hash instead of failing. That hash will not validate the password though; i.e. (crypt "a" (crypt "a" "b")) is not equal to (crypt "a" "b"). --- sysif.c | 4 ++++ tests/018/crypt.tl | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sysif.c b/sysif.c index 5af269d5..00354a10 100644 --- a/sysif.c +++ b/sysif.c @@ -2083,11 +2083,15 @@ static val crypt_wrap(val wkey, val wsalt) if (hash != 0) { val ret = string_utf8(hash); +#if HAVE_CRYPT_R free(cd); +#endif return ret; } +#if HAVE_CRYPT_R free(cd); +#endif uw_ethrowf(error_s, lit("crypt failed: ~d/~s"), num(errno), errno_to_str(errno), nao); diff --git a/tests/018/crypt.tl b/tests/018/crypt.tl index 55a897af..3652b6e1 100644 --- a/tests/018/crypt.tl +++ b/tests/018/crypt.tl @@ -2,12 +2,12 @@ (mtest (crypt nil nil) :error - (crypt "a" "b") :error (crypt "a" "bc") "bcshMw5X24ayQ" (crypt "a" "bcd") "bcshMw5X24ayQ") (if (eq :linux (os-symbol)) (mtest + (crypt "a" "b") :error (crypt "a" "$0$") :error (crypt "a" "$9$") :error (crypt "a" "$1$") "$1$$Ij31LCAysPM23KuPlm1wA/" -- cgit v1.2.3