libbluray | branch: master | hpi1 <[email protected]> | Sun Feb 23 14:15:34 2014 +0200| [b1e2fb9ecd3c24efb9d064b3bc927293ad80bb18] | committer: hpi1
fixed leak when realloc fails > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=b1e2fb9ecd3c24efb9d064b3bc927293ad80bb18 --- src/libbluray/register.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/libbluray/register.c b/src/libbluray/register.c index 77b3575..d3d462f 100644 --- a/src/libbluray/register.c +++ b/src/libbluray/register.c @@ -206,6 +206,7 @@ void bd_psr_unlock(BD_REGISTERS *p) void bd_psr_register_cb (BD_REGISTERS *p, void (*callback)(void*,BD_PSR_EVENT*), void *cb_handle) { /* no duplicates ! */ + PSR_CB_DATA *cb; unsigned i; bd_psr_lock(p); @@ -218,14 +219,14 @@ void bd_psr_register_cb (BD_REGISTERS *p, void (*callback)(void*,BD_PSR_EVENT*) } } - p->num_cb++; - p->cb = realloc(p->cb, p->num_cb * sizeof(PSR_CB_DATA)); - if (p->cb) { - p->cb[p->num_cb - 1].cb = callback; - p->cb[p->num_cb - 1].handle = cb_handle; + cb = realloc(p->cb, (p->num_cb + 1) * sizeof(PSR_CB_DATA)); + if (cb) { + p->cb = cb; + p->cb[p->num_cb].cb = callback; + p->cb[p->num_cb].handle = cb_handle; + p->num_cb++; } else { BD_DEBUG(DBG_BLURAY|DBG_CRIT, "bd_psr_register_cb(): realloc failed\n"); - p->num_cb = 0; } bd_psr_unlock(p); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
