codec: Prevent invalid mem access on realloc failure
authorMartin Fleisz <martin.fleisz@thincast.com>
Tue, 6 Mar 2018 14:34:55 +0000 (15:34 +0100)
committerMartin Fleisz <martin.fleisz@thincast.com>
Tue, 6 Mar 2018 14:34:55 +0000 (15:34 +0100)
libfreerdp/codec/rfx.c

index 27b59db..cd0af77 100644 (file)
@@ -1622,32 +1622,34 @@ skip_encoding_loop:
        }
 
        /* when using threads ensure all computations are done */
-       message->tilesDataSize = 0;
-       workObject = context->priv->workObjects;
-
-       for (i = 0; i < message->numTiles; i++)
+       if (success)
        {
-               tile = message->tiles[i];
+               message->tilesDataSize = 0;
+               workObject = context->priv->workObjects;
 
-               if (context->priv->UseThreads)
+               for (i = 0; i < message->numTiles; i++)
                {
-                       if (*workObject)
+                       tile = message->tiles[i];
+
+                       if (context->priv->UseThreads)
                        {
-                               WaitForThreadpoolWorkCallbacks(*workObject, FALSE);
-                               CloseThreadpoolWork(*workObject);
+                               if (*workObject)
+                               {
+                                       WaitForThreadpoolWorkCallbacks(*workObject, FALSE);
+                                       CloseThreadpoolWork(*workObject);
+                               }
+
+                               workObject++;
                        }
 
-                       workObject++;
+                       message->tilesDataSize += rfx_tile_length(tile);
                }
 
-               message->tilesDataSize += rfx_tile_length(tile);
-       }
+               region16_uninit(&tilesRegion);
+               region16_uninit(&rectsRegion);
 
-       region16_uninit(&tilesRegion);
-       region16_uninit(&rectsRegion);
-
-       if (success)
                return message;
+       }
 
        WLog_ERR(TAG, "%s: failed", __FUNCTION__);
        message->freeRects = TRUE;