eina share - fix spinlock release if magic check fails on share data
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 8 Feb 2017 07:20:17 +0000 (16:20 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 8 Feb 2017 12:19:39 +0000 (21:19 +0900)
this fixes a potential double spinlock unrelease if magic check fails
on share data. this fixes CID 1367493

src/lib/eina/eina_share_common.c

index 33142dc..7fb8f90 100644 (file)
@@ -766,11 +766,11 @@ eina_share_common_add_length(Eina_Share *share,
    el = _eina_share_common_head_find(ed, str, slen);
    if (el)
      {
-        EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el,
-                                           share->node_magic,
-                                           eina_spinlock_release(&_mutex_big));
+        EINA_MAGIC_CHECK_SHARE_COMMON_NODE
+          (el, share->node_magic,
+           eina_spinlock_release(&_mutex_big); return NULL);
         el->references++;
-                                           eina_spinlock_release(&_mutex_big);
+        eina_spinlock_release(&_mutex_big);
         return el->str;
      }