]> git.sesse.net Git - vlc/commitdiff
RTP: fix corner-case memory leak (fd_dead is a cancellation point)
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 19 Jul 2009 17:04:53 +0000 (20:04 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 19 Jul 2009 17:04:53 +0000 (20:04 +0300)
modules/access/rtp/input.c

index 2d3d60ff132ae8fec900f2f8788e5bc98a5f81c0..e8bbad44cbb7d52ec4162712267bf176e93bbc23 100644 (file)
@@ -53,22 +53,23 @@ static block_t *rtp_dgram_recv (vlc_object_t *obj, int fd)
     block_t *block = block_Alloc (0xffff);
     ssize_t len;
 
+    block_cleanup_push (block);
     do
     {
-        block_cleanup_push (block);
         len = net_Read (obj, fd, NULL,
                         block->p_buffer, block->i_buffer, false);
-        vlc_cleanup_pop ();
 
         if (((len <= 0) && fd_dead (fd)) || !vlc_object_alive (obj))
         {   /* POLLHUP -> permanent (DCCP) socket error */
             block_Release (block);
-            return NULL;
+            block = NULL;
+            break;
         }
     }
     while (len == -1);
+    vlc_cleanup_pop ();
 
-    return block_Realloc (block, 0, len);
+    return block ? block_Realloc (block, 0, len) : NULL;
 }