[Spice-devel] [PATCH spice-gtk 6/9] session: parse spice+unix:// URI
Christophe Fergeau
cfergeau at redhat.com
Tue Jan 27 02:09:50 PST 2015
Hey,
On Tue, Jan 13, 2015 at 05:38:25PM +0100, Marc-André Lureau wrote:
> ---
> gtk/spice-session.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/gtk/spice-session.c b/gtk/spice-session.c
> index 6f04a1a..ecc9e86 100644
> --- a/gtk/spice-session.c
> +++ b/gtk/spice-session.c
> @@ -349,6 +349,7 @@ spice_session_finalize(GObject *gobject)
> }
>
> #define URI_SCHEME_SPICE "spice://"
> +#define URI_SCHEME_SPICE_UNIX "spice+unix://"
> #define URI_QUERY_START ";?"
> #define URI_QUERY_SEP ";&"
>
> @@ -383,10 +384,15 @@ static int spice_parse_uri(SpiceSession *session, const char *original_uri)
>
> uri = g_strdup(original_uri);
>
> + if (g_str_has_prefix(uri, URI_SCHEME_SPICE_UNIX)) {
> + path = g_strdup(uri + strlen(URI_SCHEME_SPICE_UNIX));
> + goto end;
> + }
> +
> /* Break up the URI into its various parts, scheme, authority,
> * path (ignored) and query
> */
> - if (strncmp(uri, URI_SCHEME_SPICE, strlen(URI_SCHEME_SPICE)) != 0) {
> + if (!g_str_has_prefix(uri, URI_SCHEME_SPICE)) {
> g_warning("Expected a URI scheme of '%s' in URI '%s'",
> URI_SCHEME_SPICE, uri);
> goto fail;
> @@ -489,14 +495,17 @@ static int spice_parse_uri(SpiceSession *session, const char *original_uri)
> goto fail;
> }
>
> +end:
> /* parsed ok -> apply */
> g_free(uri);
> g_free(unescaped_path);
> + g_free(s->unix_path);
> g_free(s->host);
> g_free(s->port);
> g_free(s->tls_port);
> g_free(s->username);
> g_free(s->password);
> + s->unix_path = path;
If you reuse 'path', spicy --uri spice://foo/bar/baz?port=5900 will
cause s->unix_path to be set (and since in this case, 'path' is not a
malloc'ed string, this will crash sooner or later when you try to free
s->unix_path). Looks good otherwise.
> s->host = host;
> s->port = port;
> s->tls_port = tls_port;
> @@ -507,6 +516,7 @@ static int spice_parse_uri(SpiceSession *session, const char *original_uri)
> fail:
> g_free(uri);
> g_free(unescaped_path);
> + g_free(path);
'path' must not be freed when it's set by :
if (path && !(g_str_equal(path, "") || g_str_equal(path, "/"))) {
g_warning("Unexpected path data '%s' for URI '%s'", path, uri);
/* don't fail, just ignore */
Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150127/c4559904/attachment.sig>
More information about the Spice-devel
mailing list