An aside, GetFolderPath() can result in a UNC path return, which might complicate things about more if you use it.
Note the _d I had to use in File::HomeDir. http://cpansearch.perl.org/src/ADAMK/File-HomeDir-1.00/lib/File/HomeDir/Windows.pm Adam On Thu, May 21, 2015 at 12:37 PM, Jan Dubois <j...@activestate.com> wrote: > On Thu, May 21, 2015 at 8:38 AM, David Golden <x...@xdg.me> wrote: >> We have various unsolved tickets (see end for links) about >> File::Temp/File::Spec failing on Windows due to taint, where >> File::Spec->tmpdir returns the root directory, which many Windows users >> can't actually write to. (Context: File::Spec checks -w on candidate temp >> dirs, but that can be true on Windows, yet the ACLs can prevent files from >> being written there. See perlport on -X operators.) > > I'm curious *why* tmpdir() would return the root directory. Normally > %TMP% should be setup to point to the Temp directory inside the local > APPDATA directory for regular users, or to %windir%/Temp when running > as a service. > >> After discussions on #toolchain, I have two proposals: >> >> (1) That File::Temp fall back to the following if it can't create a >> temporary directory in the directory that is the result of >> File::Spec->tmpdir: >> >> >> File::Spec->catdir(Win32::GetFolderPath(Win32::CSIDL_LOCAL_APPDATA),q{Temp}) > > Seems sensible to me, although I'm not sure what that returns for > processes running as a service. > >> (2) That File::Spec::Win32 put that same path after environment variables >> paths but before all existing fallback paths >> (https://metacpan.org/source/SMUELLER/PathTools-3.47/lib/File/Spec/Win32.pm#L74-78) > > I just noticed the the GetTempPath() API will fall back to > %USERPROFILE% if neither %TMP% nor %TEMP% are set. Maybe that variable > should be checked as well, for consistency with other apps? > > https://msdn.microsoft.com/en-us/library/windows/desktop/aa364992%28v=vs.85%29.aspx > > Cheers, > -Jan