From 5b1c648b236bd7f5bb9ab344cb7d608434b98316 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Tue, 2 Apr 2024 12:03:51 +0200 Subject: [PATCH] fix(pl.path): make expanduser more sturdy see https://github.com/Kong/lua-resty-aws/issues/110 --- lua/pl/path.lua | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lua/pl/path.lua b/lua/pl/path.lua index 1e044e11..e08436a6 100644 --- a/lua/pl/path.lua +++ b/lua/pl/path.lua @@ -493,12 +493,29 @@ end -- In windows, if HOME isn't set, then USERPROFILE is used in preference to -- HOMEDRIVE HOMEPATH. This is guaranteed to be writeable on all versions of Windows. -- @string P A file path +-- @treturn[1] string The file path with the `~` prefix substituted, or the input path if it had no prefix. +-- @treturn[2] nil +-- @treturn[2] string Error message if the environment variables were unavailable. function path.expanduser(P) assert_string(1,P) if at(P,1) == '~' then local home = getenv('HOME') - if not home then -- has to be Windows - home = getenv 'USERPROFILE' or (getenv 'HOMEDRIVE' .. getenv 'HOMEPATH') + if (not home) and path.is_windows then + home = getenv 'USERPROFILE' + if not home then + local hd = getenv 'HOMEDRIVE' + local hp = getenv 'HOMEPATH' + if hd and hp then + home = hd..hp + end + end + if not home then + return nil, "failed to expand '~' (HOME, USERPROFILE and HOMEDRIVE or HOMEPATH not set)" + end + else + if not home then + return nil, "failed to expand '~' (HOME not set)" + end end return home..sub(P,2) else