[Spice-devel] [vdagent-win PATCH v2] Avoid to use names with reserved characters.

Christophe Fergeau cfergeau at redhat.com
Fri May 25 12:59:49 UTC 2018


On Fri, May 25, 2018 at 12:24:00PM +0100, Frediano Ziglio wrote:
> Some characters are reserved and should not be used in Windows
> independently by the file system used.
> This avoid to use paths in the filename which could lead to some
> nasty hacks (like names like "..\hack.txt").
> The return statement cause the file transfer to be aborted with
> VD_AGENT_FILE_XFER_STATUS_ERROR as status.
> 
> ":" is used to separate filenames from stream names 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 wildcards (which on Windows are supported by
> different APIs too).
> "<", ">", """ and "|" are reserved for shell usage.
> 
> More information on "Naming Files, Paths, and Namespaces" page at
> https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
> 
> This fixes also https://bugzilla.redhat.com/show_bug.cgi?id=1520393.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>

Acked-by: Christophe Fergeau <cfergeau at redhat.com>

> ---
>  vdagent/file_xfer.cpp | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> Changes since v1:
> - define a constant in code;
> - add some commit message and links.
> 
> diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
> index e877cca..8203b99 100644
> --- a/vdagent/file_xfer.cpp
> +++ b/vdagent/file_xfer.cpp
> @@ -33,6 +33,12 @@
>  #include "file_xfer.h"
>  #include "as_user.h"
>  
> +#define FILENAME_RESERVED_CHAR_LIST \
> +    ":" /* streams and devices */ \
> +    "/\\" /* components separator */ \
> +    "?*" /* wildcards */ \
> +    "<>\"|" /* reserved to shell */
> +
>  void FileXfer::reset()
>  {
>      FileXferTasks::iterator iter;
> @@ -72,6 +78,10 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage* start,
>          return;
>      }
>      vd_printf("%u %s (%" PRIu64 ")", start->id, file_name, file_size);
> +    if (strcspn(file_name, FILENAME_RESERVED_CHAR_LIST) != strlen(file_name)) {
> +        vd_printf("filename contains invalid characters");
> +        return;
> +    }
>      if (!as_user.begin()) {
>          vd_printf("as_user failed");
>          return;
> -- 
> 2.17.0
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20180525/56cae13c/attachment.sig>


More information about the Spice-devel mailing list