[Spice-devel] [PATCH] [vd_agent] fix bug: g_key_get_string() of vd_agent failed when keystring contains '['

Cody Chan int64ago at gmail.com
Mon Aug 11 03:38:17 PDT 2014


Yeah!I think yours is elegant and simple!


On Mon, Aug 11, 2014 at 6:33 PM, Christophe Fergeau <cfergeau at redhat.com>
wrote:

> Hey,
>
> On Fri, Aug 08, 2014 at 08:33:59PM +0800, Cody Chan wrote:
> > Hi, as you can see, in vd_agent/file_xfer.cpp, it implemented
> > the g_key_get_string,
> > but I find a problem, when dragging a file with a name containing '['
> (like
> > te[st.txt), it will be failed.
> > From source code,
> > >next_group_pos = strstr(group_pos + strlen(group_pfx), "[");
> > >    if (next_group_pos && key_pos > next_group_pos) return false;
> > we know that it tries to find the end of current group by '[' label,
> > if we drag a file like te[st.txt, the key_string many like:
> > [vdagent-file-xfer]
> > name=te[st.txt
> > size=10
> > so, it's failed when meta parsing and
> > returns VD_AGENT_FILE_XFER_STATUS_ERRO message.
> >
> > I find a way to fix it, just replace '[' ']' with '<' '>' between group
> > name,
> > for it's illegal for windows to create a file with a name containing
> > '<'/'>'.
>
> Unfortunately, I don't think we can change the file format at this
> point, especially as this format is based on the somehow standard 'ini'
> file format, and apart from the windows agent, we use glib
> GKeyFile parser to handle this format.
> From a quick look at the code, wouldn't the patch below avoid the issue
> you described?
>
> diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
> index c258926..17cdb3c 100644
> --- a/vdagent/file_xfer.cpp
> +++ b/vdagent/file_xfer.cpp
> @@ -203,7 +203,7 @@ bool FileXfer::g_key_get_string(char* data, const
> char* grou
>      sprintf_s(key_pfx, sizeof(key_pfx), "\n%s=", key);
>      if (!(key_pos = strstr(group_pos, key_pfx))) return false;
>
> -    next_group_pos = strstr(group_pos + strlen(group_pfx), "[");
> +    next_group_pos = strstr(group_pos + strlen(group_pfx), "\n[");
>      if (next_group_pos && key_pos > next_group_pos) return false;
>
>      start = key_pos + strlen(key_pfx);
>
> Christophe
>



-- 
QSBDT0RFUiBGUk9NIFJJRVNUIE9GIENUU0VV
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20140811/16e69bbc/attachment.html>


More information about the Spice-devel mailing list