aboutsummaryrefslogtreecommitdiff
path: root/audio/decoders
diff options
context:
space:
mode:
authorJulien2011-06-04 03:43:16 +0800
committerJulien2011-06-23 15:11:36 +0800
commit2f200ac49322ff8ccd13c5e8b7a22abbf6ff2610 (patch)
treed22f6efae6ac234cbe0b73783aa8a8962a84a3b6 /audio/decoders
parenta8b13e8a6be900995c85f08fd527750e2620c215 (diff)
downloadscummvm-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')
-rw-r--r--audio/decoders/voc.cpp6
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);
}