summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2008-09-17 10:43:52 -0400
committerAdam Jackson <ajax@redhat.com>2008-09-17 10:43:52 -0400
commit2335eafe4b53c27f6f9ee1bab3e1f5842f896428 (patch)
tree1407ef7ebcc9ca73d416a727e04b007893c5cf86
parentdb0b85db29699be6bf7e78dede655d59ba926dfc (diff)
Bug #17616: Fix an XCB leak when the client has a non-fatal error handler.
-rw-r--r--src/xcb_io.c10
1 files 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;
}