Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create unexpectedly returns STATUS_OBJECT_NAME_INVALID #505

Open
carlreinke opened this issue Apr 9, 2023 · 7 comments
Open

Create unexpectedly returns STATUS_OBJECT_NAME_INVALID #505

carlreinke opened this issue Apr 9, 2023 · 7 comments

Comments

@carlreinke
Copy link

Bug Report

Create sometimes returns STATUS_OBJECT_NAME_INVALID when opening a path that usually succeeds.

How to Reproduce

  1. "C:\Program Files (x86)\WinFsp\SxS\sxs.20230328T002019Z\bin\memfs-x64.exe" -d -1 -D - -i -F NTFS -n 10 -s 2000000000 -m M:
  2. Open ubuntu-22.04.2-live-server-amd64.iso.torrent with Tixati.
  3. Choose "M:" as the download location.

Tixati spends a while preallocating the file and then says "error getting file info: The filename, directory name, or volume label is incorrect. (123)".

Behaviors

Here's the end of the debug output from memfs. The line of interest is the one containing IoStatus=c0000033. This is the only relevant error in the whole output, so I assume it must be what's causing Tixati to fail. And it's not clear why Create should fail with STATUS_OBJECT_NAME_INVALID here, given that it succeeds for the same disposition on the same path immediately before the failing operation.

memfs-x64[TID=4e78]: FFFFC888D68695E0: >>Write [C] 000001DD358310D0, Address=000001DD358B0000, Offset=0:75a00000, Length=4096, Key=0
memfs-x64[TID=4e78]: FFFFC888D68695E0: <<Write IoStatus=0[4096] FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888DB688960: >>Write [C] 000001DD358310D0, Address=000001DD358B0000, Offset=0:75c00000, Length=4096, Key=0
memfs-x64[TID=4e78]: FFFFC888DB688960: <<Write IoStatus=0[4096] FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: >>Write [C] 000001DD358310D0, Address=000001DD358B0000, Offset=0:75c6e000, Length=4096, Key=0
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: <<Write IoStatus=0[4096] FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888DB68A1D0: >>FlushBuffers 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888DB68A1D0: <<FlushBuffers IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: >>FlushBuffers 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: <<FlushBuffers IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888EE746150: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=60, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=000000000000021C[PID=6bc8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=4e78]: FFFFC888EE746150: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=100080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888D68695E0: >>Close 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888D68695E0: <<Close IoStatus=0[0]
memfs-x64[TID=6ab0]: FFFFC888DB68D2B0: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=20, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=000000000000021C[PID=6bc8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=6ab0]: FFFFC888DB68D2B0: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=100080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=6ab0]: FFFFC888D68695E0: >>Close 000001DD358310D0
memfs-x64[TID=6ab0]: FFFFC888D68695E0: <<Close IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=10, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=000000000000021C[PID=6bc8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=100080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888D68695E0: >>Close 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888D68695E0: <<Close IoStatus=0[0]
memfs-x64[TID=6ab0]: FFFFC888DB68D2B0: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=200020, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=000000000000021C[PID=6bc8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=6ab0]: FFFFC888DB68D2B0: <<Create IoStatus=c0000033[0]
memfs-x64[TID=6ab0]: FFFFC888EE746150: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=200040, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=0000000000000224[PID=6bc8], DesiredAccess=10080, GrantedAccess=0, ShareAccess=7
memfs-x64[TID=6ab0]: FFFFC888EE746150: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=10080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888EE746430: >>Close 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888EE746430: <<Close IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888D33C8010: >>Read 000001DD358310D0, Address=000001DD358B0000, Offset=0:0, Length=32768, Key=0
memfs-x64[TID=4e78]: FFFFC888D33C8010: <<Read IoStatus=0[32768]
memfs-x64[TID=4e78]: FFFFC888EB875010: >>Read 000001DD358310D0, Address=000001DD358B0000, Offset=0:8000, Length=32768, Key=0
memfs-x64[TID=4e78]: FFFFC888EB875010: <<Read IoStatus=0[32768]
memfs-x64[TID=4e78]: FFFFC888EB875010: >>Read 000001DD358310D0, Address=000001DD358B0000, Offset=0:1fe000, Length=32768, Key=0
memfs-x64[TID=4e78]: FFFFC888EB875010: <<Read IoStatus=0[32768]
memfs-x64[TID=4e78]: FFFFC888EE746150: >>Cleanup 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888EE746150: <<Cleanup IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888EE740830: >>Create [UT----] "\", FILE_OPEN, CreateOptions=20, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=0000000000000228[PID=29b8], DesiredAccess=100081, GrantedAccess=0, ShareAccess=7
memfs-x64[TID=4e78]: FFFFC888EE740830: <<Create IoStatus=0[1] UserContext=000001DD357CADD0, GrantedAccess=100081, FileInfo={FileAttributes=10, ReparseTag=0, AllocationSize=0:0, FileSize=0:0, CreationTime=2023-04-09T22:08:42.279Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:1}
memfs-x64[TID=6ab0]: FFFFC888EE72F150: >>Create [UT----] "\", FILE_OPEN, CreateOptions=20, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=000000000000021C[PID=29b8], DesiredAccess=100081, GrantedAccess=0, ShareAccess=7
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: >>QueryDirectory 000001DD357CADD0, Address=000001DD358B0000, Length=616, Pattern="UBUNTU-22.04.2-LIVE-SERVER-AMD64.ISO", Marker=NULL
memfs-x64[TID=4e78]: FFFFC888DB68D2B0: <<QueryDirectory IoStatus=0[178]
memfs-x64[TID=6ab0]: FFFFC888EE72F150: <<Create IoStatus=0[1] UserContext=000001DD357CADD0, GrantedAccess=100081, FileInfo={FileAttributes=10, ReparseTag=0, AllocationSize=0:0, FileSize=0:0, CreationTime=2023-04-09T22:08:42.279Z, LastAccessTime=2023-04-09T22:08:56.492Z, LastWriteTime=2023-04-09T22:08:56.492Z, ChangeTime=2023-04-09T22:08:56.492Z, IndexNumber=0:1}
memfs-x64[TID=4e78]: FFFFC888DB68B1A0: >>Close 000001DD357CADD0
memfs-x64[TID=4e78]: FFFFC888DB68B1A0: <<Close IoStatus=0[0]
memfs-x64[TID=6ab0]: FFFFC888EE72F150: >>QueryDirectory 000001DD357CADD0, Address=000001DD358B0000, Length=616, Pattern="UBUNTU-22.04.2-LIVE-SERVER-AMD64.ISO", Marker=NULL
memfs-x64[TID=6ab0]: FFFFC888EE72F150: <<QueryDirectory IoStatus=0[178]
memfs-x64[TID=6ab0]: FFFFC888EE744320: >>Close 000001DD357CADD0
memfs-x64[TID=6ab0]: FFFFC888EE744320: <<Close IoStatus=0[0]

Here's the additional output if I try to start the download again, now that the file is already preallocated.

memfs-x64[TID=6ab0]: FFFFC888DB408A70: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=60, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=000000000000021C[PID=18c8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=6ab0]: FFFFC888DB408A70: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=100080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:13:11.566Z, LastWriteTime=2023-04-09T22:13:11.566Z, ChangeTime=2023-04-09T22:13:11.566Z, IndexNumber=0:2}
memfs-x64[TID=6ab0]: FFFFC888D685EDB0: >>Close 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888DB408A70: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=20, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=0000000000000228[PID=18c8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=6ab0]: FFFFC888D685EDB0: <<Close IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888DB408A70: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=100080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:13:11.566Z, LastWriteTime=2023-04-09T22:13:11.566Z, ChangeTime=2023-04-09T22:13:11.566Z, IndexNumber=0:2}
memfs-x64[TID=4e78]: FFFFC888D685EDB0: >>Close 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888D685EDB0: <<Close IoStatus=0[0]
memfs-x64[TID=77ac]: FFFFC888DB408A70: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=10, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=0000000000000230[PID=18c8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=77ac]: FFFFC888DB408A70: <<Create IoStatus=0[1] UserContext=000001DD358310D0, GrantedAccess=100080, FileInfo={FileAttributes=20, ReparseTag=0, AllocationSize=0:75c6f000, FileSize=0:75c6f000, CreationTime=2023-04-09T22:08:56.492Z, LastAccessTime=2023-04-09T22:13:11.566Z, LastWriteTime=2023-04-09T22:13:11.566Z, ChangeTime=2023-04-09T22:13:11.566Z, IndexNumber=0:2}
memfs-x64[TID=77ac]: FFFFC888F400BCC0: >>Close 000001DD358310D0
memfs-x64[TID=4e78]: FFFFC888F5905260: >>Create [UT----] "\ubuntu-22.04.2-live-server-amd64.iso", FILE_OPEN, CreateOptions=200020, FileAttributes=0, Security=NULL, AllocationSize=0:0, AccessToken=0000000000000228[PID=18c8], DesiredAccess=100080, GrantedAccess=0, ShareAccess=3
memfs-x64[TID=77ac]: FFFFC888F400BCC0: <<Close IoStatus=0[0]
memfs-x64[TID=4e78]: FFFFC888F5905260: <<Create IoStatus=c0000033[0]

Environment

  • OS version and build: Windows 10 Pro for Workstations 22H2; build 19045.2728; version 10.0.19045.2728
  • WinFsp version and build: 2023; version 2.0.23075
@billziss-gh
Copy link
Collaborator

NOTE: I just noticed that you start MEMFS with the -n 10 parameter. This allows only 10 files to be created and may explain why this problem is happening. I would recommend at least -n 1000.

[Original answer follows.]


That is indeed curious.

Searching for STATUS_OBJECT_NAME_INVALID in the source code shows the following relevant locations:

  • In MEMFS: There are some checks that the requested path is not longer than MEMFS_MAX_PATH. This should not be the case here as the path \ubuntu-22.04.2-live-server-amd64.iso is not long.

  • In DLL: This can appear in a few locations, but the only ones that seem to be relevant are:

    • FspFileSystemCreateCheck: This checks that a new file can be created and should not happen during a FILE_OPEN operation.

    • FspAccessCheckEx: This performs access checksing when opening a file. The specific check here has to do with requesting a path with a trailing backslash that is not a directory.

Are you able to debug MEMFS at all to determine which code is returning STATUS_OBJECT_NAME_INVALID? Here is a trick I use in such situations:

#undef STATUS_OBJECT_NAME_INVALID
#define STATUS_OBJECT_NAME_INVALID (DebugBreak(), ((NTSTATUS)0xC0000033L))

Running it under a debugger should reveal what generates the STATUS_OBJECT_NAME_INVALID code.

@carlreinke
Copy link
Author

-n 10 shouldn't be a problem; it only creates the one file (and the root directory, of course). I retried with -n 1000 and got the same result.

I built memfs with the change you suggested, and ran it, but the break never triggered, so it looks like the status code is coming from within WinFSP rather than user code.

@billziss-gh
Copy link
Collaborator

billziss-gh commented Apr 11, 2023

I built memfs with the change you suggested, and ran it, but the break never triggered, so it looks like the status code is coming from within WinFSP rather than user code.

The WinFsp logs show what the user mode file system and/or the DLL return. Unfortunately this means you would have to compile the DLL as well to get the complete picture.

@carlreinke
Copy link
Author

I compiled the DLL as well. The status code comes from security.c:205. CheckParentOrMain is 0, Request->Req.Create.HasTrailingBackslash is 1, FileAttributes is 32 (FILE_ATTRIBUTE_ARCHIVE), and FileName is \ubuntu-22.04.2-live-server-amd64.iso (so if there was a trailing backslash, I guess it was removed already).

@billziss-gh
Copy link
Collaborator

Thank you @carlreinke.

Let me explain what happens here.

  • For some reason the "Tixati" application must open the file using the syntax M:\ubuntu-22.04.2-live-server-amd64.iso\ (notice the backslash at the end).

  • The FSD notices this, so it strips the backslash, sets a special flag HasTrailingBackslash and sends the path \ubuntu-22.04.2-live-server-amd64.iso to user mode.

  • The DLL queries the file system with GetSecurityByName to get the file's attributes and security. The DLL then notices that the file is not a directory but has the HasTrailingBackslash flag set. This is illegal and for this reason the status code STATUS_OBJECT_NAME_INVALID is generated.

This to me looks like the correct behavior.

I recommend the following:

  • Use FileSpy or Process Monitor to confirm that the requested path has a backslash at the end.

  • Test the same scenario against NTFS.

@carlreinke
Copy link
Author

FileSpy shows no trailing backslash:

4	10:20:19.969	1	tixati.exe	IRP_MJ_CREATE	00000884	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	FILE_OPEN CreOpts: 00000060 Access: 00100080 Share:  00000003 Attrib: 0 Result: FILE_OPENED
5	10:20:19.971		tixati.exe	IRP_MJ_CLEANUP	00000404	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	
6	10:20:19.971		tixati.exe	IRP_MJ_CLOSE	00000404	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	
7	10:20:19.971	1	tixati.exe	IRP_MJ_CREATE	00000884	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	FILE_OPEN CreOpts: 00000020 Access: 00100080 Share:  00000003 Attrib: 0 Result: FILE_OPENED
8	10:20:19.973		tixati.exe	IRP_MJ_CLEANUP	00000404	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	
9	10:20:19.974		tixati.exe	IRP_MJ_CLOSE	00000404	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	
10	10:20:19.974		tixati.exe	IRP_MJ_CREATE	00000884	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	FILE_OPEN CreOpts: 00000010 Access: 00100080 Share:  00000003 Attrib: 0 Result: FILE_OPENED
11	10:20:19.975		tixati.exe	FASTIO_DEVICE_CONTROL		FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	FAILURE	IOCTL_MOUNTDEV_QUERY_DEVICE_NAME (004D0008)
12	10:20:19.975		tixati.exe	IRP_MJ_DEVICE_CONTROL	00060070	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_INVALID_DEVICE_REQUEST	IOCTL_MOUNTDEV_QUERY_DEVICE_NAME (004D0008)
13	10:20:19.975		tixati.exe	IRP_MJ_CLEANUP	00000404	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	
14	10:20:19.975		tixati.exe	IRP_MJ_CLOSE	00000404	FFFFB18EDE6D75A0	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_SUCCESS	
15	10:20:19.975	1515	tixati.exe	IRP_MJ_CREATE	00000884	0000000000000000	\Device\Volume{7f5e60a7-d883-11ed-a604-d0abd598c6e5}\ubuntu-22.04.2-live-server-amd64.iso	STATUS_OBJECT_NAME_INVALID	FILE_OPEN CreOpts: 00200020 Access: 00100080 Share:  00000003 Attrib: 00000080

(The failing operation shows a duration of 1515 as I've still got the breakpoint in there.)

@billziss-gh
Copy link
Collaborator

FileSpy shows no trailing backslash

This is strange (unless FileSpy trims the trailing backslash for some reason).

It looks like I will have to repro this locally and try to determine what happens.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants