add_el reallocs two memory regions. If at least one of the operation
fails, free any region that was successfully resized. Also release the
lock.
Found using the Clang Static Analyzer.
* libtrivfs/dyn-classes.c (add_el): Improve the oom handling.
---
libtrivfs/dyn-classes.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/libtrivfs/dyn-classes.c b/libtrivfs/dyn-classes.c
index a6bb7de..981a588 100644
--- a/libtrivfs/dyn-classes.c
+++ b/libtrivfs/dyn-classes.c
@@ -104,6 +104,9 @@ add_el (void *el, void (*free_el)(),
{
if (free_el)
(*free_el) (el);
+ free (new_vec);
+ free (new_aux_vec);
+ pthread_mutex_unlock (&dyn_lock);
/* One of the vectors might be the wrong size, but who cares. */
return ENOMEM;
}
--
1.7.10.4