server: fix potential memleak and NULL deref
authorU. Artie Eoff <ullysses.a.eoff@intel.com>
Mon, 5 May 2014 23:28:26 +0000 (16:28 -0700)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 6 May 2014 22:00:31 +0000 (15:00 -0700)
commit0f23b73a0641461884a9a8d626ce087d76406840
tree46305d7efc29b6ba1428f878bb93fcdaf3cef5b0
parentb41ded812dfd23917300b1927d06299d66368d03
server: fix potential memleak and NULL deref

If for some reason that errno is neither value (ENOMEM or
EINVAL), then prior to this patch, there would be a NULL
deref in wl_closure_lookup(...) at the "else if" conditional
when closure == NULL. Also, closure might not be NULL but still
fall into the block due to the wl_closure_lookup < 0 condition...
in that case, we need to destroy the closure to avoid a memory
leak.

Currently, wl_connection_demarshal only sets errno to ENOMEM
or EINVAL... we've already checked for ENOMEM so remove check
for EINVAL (just assume it).  Also, call wl_closure_destroy(...)
unconditionally in the "else if" block (assume it can handle
NULL closure, too, which it does right now).

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
src/wayland-server.c