[Spice-devel] [vdagent-win PATCH] Avoid to use names with invalid characters.
Frediano Ziglio
fziglio at redhat.com
Mon Sep 5 10:18:16 UTC 2016
>
> On Fri, Sep 02, 2016 at 04:43:53PM +0100, Frediano Ziglio wrote:
> > Check if filename contains invalid characters.
>
> Can you be more specific here about "invalid"? My guess is that these
> are characters which are invalid in an NTFS filesystem.
>
Some characters are reserved and should not be used in Windows
independently by the file system used.
> > Also this avoid to use paths in the filename which could lead to some
> > nasty hacks (like names like "..\hack.txt").
> >
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> > vdagent/file_xfer.cpp | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
> > index 0e90ebe..2072277 100644
> > --- a/vdagent/file_xfer.cpp
> > +++ b/vdagent/file_xfer.cpp
> > @@ -65,6 +65,10 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage*
> > start,
> > return;
> > }
> > vd_printf("%u %s (%" PRIu64 ")", start->id, file_name, file_size);
> > + if (strcspn(file_name, "<>:\"/\\|?*") != strlen(file_name)) {
>
> You could add ^ as well which is invalid on FAT. Apparently we could
> check for trailing space or colon too.
>
Colon is in the list. It's used to separate filename from stream name and can
be used to create hidden streams. Also is used for drive separator (A:) or device names (NUL:).
/ and \ are reserved for components (directory, filename, drive, share, server) separators.
* and ? are globs (globs on Windows are supported by different APIs too).
Other are reserved for shell usage (<, > and |).
Space at the end are just misleading but supported.
^, & and ; are (strangely) accepted (at least by NTFS).
>
>
> Christophe
>
The more worrying are the path separators.
Frediano
More information about the Spice-devel
mailing list