From 2335eafe4b53c27f6f9ee1bab3e1f5842f896428 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 17 Sep 2008 10:43:52 -0400 Subject: [PATCH] Bug #17616: Fix an XCB leak when the client has a non-fatal error handler. --- src/xcb_io.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/xcb_io.c b/src/xcb_io.c index 05f3959e..393cff65 100644 --- a/src/xcb_io.c +++ b/src/xcb_io.c @@ -409,15 +409,18 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) { case X_LookupColor: case X_AllocNamedColor: + free(error); return 0; } break; case BadFont: if(err->majorCode == X_QueryFont) + free(error); return 0; break; case BadAlloc: case BadAccess: + free(error); return 0; } @@ -426,10 +429,13 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) * want to suppress the error. */ for(ext = dpy->ext_procs; ext; ext = ext->next) - if(ext->error && ext->error(dpy, err, &ext->codes, &ret_code)) + if(ext->error && ext->error(dpy, err, &ext->codes, &ret_code)) { + free(error); return ret_code; + } - _XError(dpy, (xError *) error); + _XError(dpy, err); + free(error); return 0; }