[Xcb] [PATCH v2 1/2] _xcb_parse_display: Fix error path
Barton C Massey
bart at cs.pdx.edu
Fri Jun 11 12:27:57 PDT 2010
Thanks much for the patches!
Bart
In message <1276263047-5349-1-git-send-email-ext-pauli.nieminen at nokia.com> you wrote:
> xcb_parse_display claims that there is no side effects when failing.
> That requires _xcb_parse_display to free the memory in failure case.
>
> Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
> ---
> src/xcb_util.c | 19 ++++++++++++++-----
> 1 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/src/xcb_util.c b/src/xcb_util.c
> index 8c2a031..fe1f99f 100644
> --- a/src/xcb_util.c
> +++ b/src/xcb_util.c
> @@ -64,6 +64,7 @@ static int _xcb_parse_display(const char *name, char **host, char **protocol,
> {
> int len, display, screen;
> char *slash, *colon, *dot, *end;
> +
> if(!name || !*name)
> name = getenv("DISPLAY");
> if(!name)
> @@ -92,35 +93,43 @@ static int _xcb_parse_display(const char *name, char **host, char **protocol,
>
> colon = strrchr(name, ':');
> if(!colon)
> - return 0;
> + goto error_out;
> len = colon - name;
> ++colon;
> display = strtoul(colon, &dot, 10);
> if(dot == colon)
> - return 0;
> + goto error_out;
> if(*dot == '\0')
> screen = 0;
> else
> {
> if(*dot != '.')
> - return 0;
> + goto error_out;
> ++dot;
> screen = strtoul(dot, &end, 10);
> if(end == dot || *end != '\0')
> - return 0;
> + goto error_out;
> }
> /* At this point, the display string is fully parsed and valid, but
> * the caller's memory is untouched. */
>
> *host = malloc(len + 1);
> if(!*host)
> - return 0;
> + goto error_out;
> memcpy(*host, name, len);
> (*host)[len] = '\0';
> *displayp = display;
> if(screenp)
> *screenp = screen;
> return 1;
> +
> +error_out:
> + if (protocol) {
> + free(*protocol);
> + *protocol = NULL;
> + }
> +
> + return 0;
> }
>
> int xcb_parse_display(const char *name, char **host, int *displayp,
> --
> 1.6.3.3
>
> _______________________________________________
> Xcb mailing list
> Xcb at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xcb
More information about the Xcb
mailing list