diff options
author | Julien | 2011-06-04 03:43:16 +0800 |
---|---|---|
committer | Julien | 2011-06-23 15:11:36 +0800 |
commit | 2f200ac49322ff8ccd13c5e8b7a22abbf6ff2610 (patch) | |
tree | d22f6efae6ac234cbe0b73783aa8a8962a84a3b6 /audio/decoders/voc.cpp | |
parent | a8b13e8a6be900995c85f08fd527750e2620c215 (diff) | |
download | scummvm-rg350-2f200ac49322ff8ccd13c5e8b7a22abbf6ff2610.tar.gz scummvm-rg350-2f200ac49322ff8ccd13c5e8b7a22abbf6ff2610.tar.bz2 scummvm-rg350-2f200ac49322ff8ccd13c5e8b7a22abbf6ff2610.zip |
ANALYSIS: Fix potential memory leak when using realloc
When reallocation is unsuccessful, the passed buffer is not freed. In this case, assigning the result (NULL) will result in a leak of the original memory buffer.
See http://msdn.microsoft.com/en-us/library/kkedhy7c.aspx
Diffstat (limited to 'audio/decoders/voc.cpp')
-rw-r--r-- | audio/decoders/voc.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/audio/decoders/voc.cpp b/audio/decoders/voc.cpp index 74ea4440a1..be53f945ac 100644 --- a/audio/decoders/voc.cpp +++ b/audio/decoders/voc.cpp @@ -118,7 +118,11 @@ static byte *loadVOCFromStream(Common::ReadStream &stream, int &size, int &rate, debug(9, "VOC Data Block: %d, %d, %d", rate, packing, len); if (packing == 0) { if (size) { - ret_sound = (byte *)realloc(ret_sound, size + len); + byte *tmp = (byte *)realloc(ret_sound, size + len); + if (!tmp) + error("Cannot reallocate memory for VOC Data Block"); + + ret_sound = tmp; } else { ret_sound = (byte *)malloc(len); } |