[Scummvm-git-logs] scummvm master -> 2085bcb368c19bc90f0190efcd56b9d58cd7fb5a
bluegr
noreply at scummvm.org
Sun Sep 13 15:52:07 UTC 2026
This automated email contains information about 13 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
f6a2af66ca DIRECTOR: Don't delete stream on failure
b1efaa419a EEM: Don't delete stream on failure
12b2621c37 VOYEUR: Don't allocate stream on stack
42308b6efa VIDEO: Don't delete stream on failure
eb7adfe456 BLADERUNNER: Make video decoder loadStream release stream on failure
484bab1855 CHEWY: Make video decoder loadStream release stream on failure
b29e0dbd4b GRIM: Make video decoder loadStream release stream on failure
d8bfa33110 KYRA: Make video decoder loadStream release stream on failure
ef6efdd562 NANCY: Make video decoder loadStream release stream on failure
d45b05b7a5 PINK: Make video decoder loadStream release stream on failure
4e7a9fa22a TOT: Make video decoder loadStream release stream on failure
5a2b8d22ab ZVISION: Make video decoder loadStream release stream on failure
2085bcb368 VIDEO: Make video decoders loadStream release stream on failure
Commit: f6a2af66cac5f4d131d52a2ecb5b933a4c52e4b9
https://github.com/scummvm/scummvm/commit/f6a2af66cac5f4d131d52a2ecb5b933a4c52e4b9
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
DIRECTOR: Don't delete stream on failure
This should already be done by the decoder
Changed paths:
engines/director/castmember/digitalvideo.cpp
diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 1f68611bc41..a83e675ecfa 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -70,10 +70,7 @@ public:
return false;
}
- bool result = loadStream(file);
- if (!result)
- delete file;
- return result;
+ return loadStream(file);
}
virtual bool loadStream(Common::SeekableReadStream *stream) override {
Commit: b1efaa419ab62aa1e5678e6bd04d4b64e1ecb0df
https://github.com/scummvm/scummvm/commit/b1efaa419ab62aa1e5678e6bd04d4b64e1ecb0df
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
EEM: Don't delete stream on failure
This should already be done by the decoder
Changed paths:
engines/eem/eem.cpp
diff --git a/engines/eem/eem.cpp b/engines/eem/eem.cpp
index 77a5c692b79..c695b89867c 100644
--- a/engines/eem/eem.cpp
+++ b/engines/eem/eem.cpp
@@ -1085,11 +1085,10 @@ void EEMEngine::playFlc(const Common::Path &path, bool fadeIn,
Video::FlicDecoder flic;
Common::ScopedPtr<Common::SeekableReadStream> stream(
Common::MacResManager::openFileOrDataFork(path));
- if (!stream || !flic.loadStream(stream.get())) {
+ if (!stream || !flic.loadStream(stream.release())) {
warning("playFlc: %s missing", path.toString().c_str());
return;
}
- stream.release();
const int fw = flic.getWidth();
const int fh = flic.getHeight();
Commit: 12b2621c377b6995d3df00854945f24a6b17e6bd
https://github.com/scummvm/scummvm/commit/12b2621c377b6995d3df00854945f24a6b17e6bd
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
VOYEUR: Don't allocate stream on stack
This stream is owned by the decoder
Changed paths:
engines/voyeur/animation.cpp
engines/voyeur/voyeur.cpp
diff --git a/engines/voyeur/animation.cpp b/engines/voyeur/animation.cpp
index 4cf501aa558..9ffc5d72d59 100644
--- a/engines/voyeur/animation.cpp
+++ b/engines/voyeur/animation.cpp
@@ -71,6 +71,7 @@ bool RL2Decoder::loadStream(Common::SeekableReadStream *stream) {
// Check RL2 magic number
if (!_header.isValid()) {
warning("RL2Decoder::loadStream(): attempted to load non-RL2 data (0x%08X)", _header._signature);
+ close();
return false;
}
diff --git a/engines/voyeur/voyeur.cpp b/engines/voyeur/voyeur.cpp
index 1a375166bf3..98ae196d187 100644
--- a/engines/voyeur/voyeur.cpp
+++ b/engines/voyeur/voyeur.cpp
@@ -882,24 +882,25 @@ void VoyeurEngine::synchronize(Common::Serializer &s) {
}
void VoyeurEngine::showLogo8Intro() {
- Common::File file;
- if(!file.open("logo8.exe")) {
+ Common::File *file = new Common::File();
+ if(!file->open("logo8.exe")) {
+ delete file;
return;
}
- file.seek(2);
- int lastPageLength = file.readUint16LE();
- int numPages = file.readUint16LE();
+ file->seek(2);
+ int lastPageLength = file->readUint16LE();
+ int numPages = file->readUint16LE();
int exeLength = (numPages - 1) * 512 + lastPageLength;
// The MVE movie data is appended to the end of the EXE
- file.seek(exeLength, SEEK_SET);
+ file->seek(exeLength, SEEK_SET);
Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
keymapper->getKeymap("voyeur-default")->setEnabled(false);
keymapper->getKeymap("intro")->setEnabled(true);
Video::MveDecoder *decoder = new Video::MveDecoder();
- if (decoder->loadStream(&file)) {
+ if (decoder->loadStream(file)) {
decoder->setAudioTrack(0);
decoder->start();
@@ -943,7 +944,6 @@ void VoyeurEngine::showLogo8Intro() {
keymapper->getKeymap("intro")->setEnabled(false);
keymapper->getKeymap("voyeur-default")->setEnabled(true);
- file.close();
delete decoder;
}
Commit: 42308b6efac7cee4a0caca918b2b5fabebe59d20
https://github.com/scummvm/scummvm/commit/42308b6efac7cee4a0caca918b2b5fabebe59d20
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
VIDEO: Don't delete stream on failure
This should already be done by the decoder
Changed paths:
video/video_decoder.cpp
diff --git a/video/video_decoder.cpp b/video/video_decoder.cpp
index befb697a2cb..db5bc241a8f 100644
--- a/video/video_decoder.cpp
+++ b/video/video_decoder.cpp
@@ -84,10 +84,7 @@ bool VideoDecoder::loadFile(const Common::Path &filename) {
return false;
}
- bool result = loadStream(file);
- if (!result)
- delete file;
- return result;
+ return loadStream(file);
}
bool VideoDecoder::needsUpdate() const {
Commit: eb7adfe4561610ac7baa8a3528adddfc69f0b47f
https://github.com/scummvm/scummvm/commit/eb7adfe4561610ac7baa8a3528adddfc69f0b47f
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
BLADERUNNER: Make video decoder loadStream release stream on failure
Changed paths:
engines/bladerunner/vqa_decoder.cpp
diff --git a/engines/bladerunner/vqa_decoder.cpp b/engines/bladerunner/vqa_decoder.cpp
index 749c9073c39..189344c39f1 100644
--- a/engines/bladerunner/vqa_decoder.cpp
+++ b/engines/bladerunner/vqa_decoder.cpp
@@ -182,17 +182,23 @@ bool VQADecoder::loadStream(Common::SeekableReadStream *s) {
uint32 type;
readIFFChunkHeader(s, &chd);
- if (chd.id != kFORM || !chd.size)
+ if (chd.id != kFORM || !chd.size) {
+ close();
return false;
+ }
type = s->readUint32BE();
- if (type != kWVQA)
+ if (type != kWVQA) {
+ close();
return false;
+ }
do {
- if (!readIFFChunkHeader(_s, &chd))
+ if (!readIFFChunkHeader(_s, &chd)) {
+ close();
return false;
+ }
bool rc = false;
switch (chd.id) {
@@ -212,6 +218,7 @@ bool VQADecoder::loadStream(Common::SeekableReadStream *s) {
if (!rc) {
warning("failed to handle chunk %s", tag2str(chd.id));
+ close();
return false;
}
} while (chd.id != kFINF);
Commit: 484bab185541774add8cae42d77f141f7652cd15
https://github.com/scummvm/scummvm/commit/484bab185541774add8cae42d77f141f7652cd15
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
CHEWY: Make video decoder loadStream release stream on failure
Changed paths:
engines/chewy/video/cfo_decoder.cpp
diff --git a/engines/chewy/video/cfo_decoder.cpp b/engines/chewy/video/cfo_decoder.cpp
index 1c8808028d1..13d641d3856 100644
--- a/engines/chewy/video/cfo_decoder.cpp
+++ b/engines/chewy/video/cfo_decoder.cpp
@@ -59,8 +59,10 @@ enum CustomSubChunk {
bool CfoDecoder::loadStream(Common::SeekableReadStream *stream) {
close();
- if (stream->readUint32BE() != MKTAG('C', 'F', 'O', '\0'))
+ if (stream->readUint32BE() != MKTAG('C', 'F', 'O', '\0')) {
+ delete stream;
error("Corrupt video resource");
+ }
stream->readUint32LE(); // always 0
Commit: b29e0dbd4bc12cacd184f62cb541eabbbc644264
https://github.com/scummvm/scummvm/commit/b29e0dbd4bc12cacd184f62cb541eabbbc644264
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
GRIM: Make video decoder loadStream release stream on failure
Changed paths:
engines/grim/movie/codecs/smush_decoder.cpp
diff --git a/engines/grim/movie/codecs/smush_decoder.cpp b/engines/grim/movie/codecs/smush_decoder.cpp
index 50f70dcf78b..0864e950d46 100644
--- a/engines/grim/movie/codecs/smush_decoder.cpp
+++ b/engines/grim/movie/codecs/smush_decoder.cpp
@@ -257,6 +257,7 @@ bool SmushDecoder::loadStream(Common::SeekableReadStream *stream) {
// Load the video
if (!readHeader()) {
warning("Failure loading SMUSH-file");
+ close();
return false;
}
Commit: d8bfa33110e54fb57377a35990c2689a9dce918a
https://github.com/scummvm/scummvm/commit/d8bfa33110e54fb57377a35990c2689a9dce918a
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
KYRA: Make video decoder loadStream release stream on failure
Changed paths:
engines/kyra/graphics/vqa.cpp
diff --git a/engines/kyra/graphics/vqa.cpp b/engines/kyra/graphics/vqa.cpp
index 0f487221f4b..07e573cf97a 100644
--- a/engines/kyra/graphics/vqa.cpp
+++ b/engines/kyra/graphics/vqa.cpp
@@ -73,6 +73,7 @@ bool VQADecoder::loadStream(Common::SeekableReadStream *stream) {
if (_fileStream->readUint32BE() != MKTAG('F','O','R','M')) {
warning("VQADecoder::loadStream(): Cannot find `FORM' tag");
+ close();
return false;
}
@@ -82,6 +83,7 @@ bool VQADecoder::loadStream(Common::SeekableReadStream *stream) {
if (_fileStream->readUint32BE() != MKTAG('W','V','Q','A')) {
warning("VQADecoder::loadStream(): Cannot find `WVQA' tag");
+ close();
return false;
}
@@ -112,10 +114,12 @@ bool VQADecoder::loadStream(Common::SeekableReadStream *stream) {
case MKTAG('F','I','N','F'):
if (!foundVQHD) {
warning("VQADecoder::loadStream(): Found `FINF' before `VQHD'");
+ close();
return false;
}
if (size != 4 * getFrameCount()) {
warning("VQADecoder::loadStream(): Expected size %d for `FINF' chunk, but got %u", 4 * getFrameCount(), size);
+ close();
return false;
}
handleFINF(_fileStream);
Commit: ef6efdd56297eb8efa0bed890b326970b7db1895
https://github.com/scummvm/scummvm/commit/ef6efdd56297eb8efa0bed890b326970b7db1895
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
NANCY: Make video decoder loadStream release stream on failure
Changed paths:
engines/nancy/video.cpp
diff --git a/engines/nancy/video.cpp b/engines/nancy/video.cpp
index f9ae5b89383..1af2bb27c10 100644
--- a/engines/nancy/video.cpp
+++ b/engines/nancy/video.cpp
@@ -95,6 +95,7 @@ bool AVFDecoder::loadStream(Common::SeekableReadStream *stream) {
if (chunkFileFormat != 0x00020000 && chunkFileFormat != 0x00010000) {
warning("Unsupported version %d.%d found in AVF", chunkFileFormat >> 16, chunkFileFormat & 0xffff);
+ delete stream;
return false;
}
Commit: d45b05b7a595400a8f5ba17c6b21d5bc5a39269f
https://github.com/scummvm/scummvm/commit/d45b05b7a595400a8f5ba17c6b21d5bc5a39269f
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
PINK: Make video decoder loadStream release stream on failure
Changed paths:
engines/pink/cel_decoder.cpp
diff --git a/engines/pink/cel_decoder.cpp b/engines/pink/cel_decoder.cpp
index ad2d9f29646..eb3e3a0c1b5 100644
--- a/engines/pink/cel_decoder.cpp
+++ b/engines/pink/cel_decoder.cpp
@@ -36,6 +36,7 @@ bool CelDecoder::loadStream(Common::SeekableReadStream *stream) {
// Check FLC magic number
if (frameType != 0xAF12) {
warning("FlicDecoder::loadStream(): attempted to load non-FLC data (type = 0x%04X)", frameType);
+ delete stream;
return false;
}
@@ -45,6 +46,7 @@ bool CelDecoder::loadStream(Common::SeekableReadStream *stream) {
uint16 colorDepth = stream->readUint16LE();
if (colorDepth != 8) {
warning("FlicDecoder::loadStream(): attempted to load an FLC with a palette of color depth %d. Only 8-bit color palettes are supported", colorDepth);
+ delete stream;
return false;
}
Commit: 4e7a9fa22a7285f255d292f8eeb2ea894e9a7fd1
https://github.com/scummvm/scummvm/commit/4e7a9fa22a7285f255d292f8eeb2ea894e9a7fd1
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
TOT: Make video decoder loadStream release stream on failure
Changed paths:
engines/tot/decoder/TotFlicDecoder.cpp
diff --git a/engines/tot/decoder/TotFlicDecoder.cpp b/engines/tot/decoder/TotFlicDecoder.cpp
index dc98da4afaa..705ca04d5b7 100644
--- a/engines/tot/decoder/TotFlicDecoder.cpp
+++ b/engines/tot/decoder/TotFlicDecoder.cpp
@@ -43,6 +43,7 @@ bool TotFlicDecoder::loadStream(Common::SeekableReadStream *stream) {
// Check FLC magic number
if (frameType != FLC_FILE_HEADER) {
warning("FlicDecoder::loadStream(): attempted to load non-FLC data (type = 0x%04X)", frameType);
+ delete stream;
return false;
}
@@ -52,6 +53,7 @@ bool TotFlicDecoder::loadStream(Common::SeekableReadStream *stream) {
uint16 colorDepth = stream->readUint16LE();
if (colorDepth != 8) {
warning("FlicDecoder::loadStream(): attempted to load an FLC with a palette of color depth %d. Only 8-bit color palettes are supported", colorDepth);
+ delete stream;
return false;
}
Commit: 5a2b8d22ab68dbc6e4690b73bbad01848fd6887d
https://github.com/scummvm/scummvm/commit/5a2b8d22ab68dbc6e4690b73bbad01848fd6887d
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
ZVISION: Make video decoder loadStream release stream on failure
Changed paths:
engines/zvision/video/rlf_decoder.cpp
diff --git a/engines/zvision/video/rlf_decoder.cpp b/engines/zvision/video/rlf_decoder.cpp
index 458c8dc3e39..1a2f4b050d7 100644
--- a/engines/zvision/video/rlf_decoder.cpp
+++ b/engines/zvision/video/rlf_decoder.cpp
@@ -44,6 +44,7 @@ bool RLFDecoder::loadStream(Common::SeekableReadStream *stream) {
isValid = true;
} else {
warning("Invalid rlf stream");
+ delete stream;
}
debugC(5, kDebugVideo, "~loadStream()");
return isValid;
Commit: 2085bcb368c19bc90f0190efcd56b9d58cd7fb5a
https://github.com/scummvm/scummvm/commit/2085bcb368c19bc90f0190efcd56b9d58cd7fb5a
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2026-09-13T18:51:58+03:00
Commit Message:
VIDEO: Make video decoders loadStream release stream on failure
Also clarify documentation
Changed paths:
video/avi_decoder.cpp
video/bink_decoder.cpp
video/dxa_decoder.cpp
video/flic_decoder.cpp
video/mve_decoder.cpp
video/mve_decoder.h
video/video_decoder.h
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index 8b9e1538a1b..26d92baff45 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -438,12 +438,14 @@ bool AVIDecoder::loadStream(Common::SeekableReadStream *stream) {
if (!stream->size()) {
debugC(8, kDebugLevelGVideo, "AVIDecoder::loadStream(): skipping empty stream");
+ delete stream;
return false;
}
uint32 riffTag = stream->readUint32BE();
if (riffTag != ID_RIFF) {
warning("Failed to find RIFF header");
+ delete stream;
return false;
}
@@ -452,6 +454,7 @@ bool AVIDecoder::loadStream(Common::SeekableReadStream *stream) {
if (riffType != ID_AVI) {
warning("RIFF not an AVI file");
+ delete stream;
return false;
}
diff --git a/video/bink_decoder.cpp b/video/bink_decoder.cpp
index 07d635fd059..55574f53a3e 100644
--- a/video/bink_decoder.cpp
+++ b/video/bink_decoder.cpp
@@ -75,8 +75,10 @@ bool BinkDecoder::loadStream(Common::SeekableReadStream *stream) {
close();
uint32 id = stream->readUint32BE();
- if ((id != kBIKfID) && (id != kBIKgID) && (id != kBIKhID) && (id != kBIKiID))
+ if ((id != kBIKfID) && (id != kBIKgID) && (id != kBIKhID) && (id != kBIKiID)) {
+ delete stream;
return false;
+ }
uint32 fileSize = stream->readUint32LE() + 8;
uint32 frameCount = stream->readUint32LE();
@@ -84,6 +86,7 @@ bool BinkDecoder::loadStream(Common::SeekableReadStream *stream) {
if (largestFrameSize > fileSize) {
warning("Largest frame size greater than file size");
+ delete stream;
return false;
}
@@ -96,6 +99,7 @@ bool BinkDecoder::loadStream(Common::SeekableReadStream *stream) {
uint32 frameRateDen = stream->readUint32LE();
if (frameRateNum == 0 || frameRateDen == 0) {
warning("Invalid frame rate (%d/%d)", frameRateNum, frameRateDen);
+ delete stream;
return false;
}
diff --git a/video/dxa_decoder.cpp b/video/dxa_decoder.cpp
index 6568c028c97..544498ccdf6 100644
--- a/video/dxa_decoder.cpp
+++ b/video/dxa_decoder.cpp
@@ -48,7 +48,7 @@ bool DXADecoder::loadStream(Common::SeekableReadStream *stream) {
uint32 tag = stream->readUint32BE();
if (tag != MKTAG('D','E','X','A')) {
- close();
+ delete stream;
return false;
}
diff --git a/video/flic_decoder.cpp b/video/flic_decoder.cpp
index 9e78e405711..25f7d994e73 100644
--- a/video/flic_decoder.cpp
+++ b/video/flic_decoder.cpp
@@ -45,6 +45,7 @@ bool FlicDecoder::loadStream(Common::SeekableReadStream *stream) {
// Check FLC magic number
if (frameType != 0xAF12) {
warning("FlicDecoder::loadStream(): attempted to load non-FLC data (type = 0x%04X)", frameType);
+ delete stream;
return false;
}
@@ -54,6 +55,7 @@ bool FlicDecoder::loadStream(Common::SeekableReadStream *stream) {
uint16 colorDepth = stream->readUint16LE();
if (colorDepth != 8) {
warning("FlicDecoder::loadStream(): attempted to load an FLC with a palette of color depth %d. Only 8-bit color palettes are supported", colorDepth);
+ delete stream;
return false;
}
diff --git a/video/mve_decoder.cpp b/video/mve_decoder.cpp
index 6fe80be3d7d..6945da69d2a 100644
--- a/video/mve_decoder.cpp
+++ b/video/mve_decoder.cpp
@@ -55,10 +55,21 @@ MveDecoder::MveDecoder()
MveDecoder::~MveDecoder() {
close();
+}
+
+void MveDecoder::close() {
+ VideoDecoder::close();
+
+ delete _s;
+ _s = nullptr;
delete _audioStream;
+ _audioStream = nullptr;
delete[] _frameData;
+ _frameData = nullptr;
delete[] _decodingMap;
+ _decodingMap = nullptr;
delete[] _skipMap;
+ _skipMap = nullptr;
}
static const char signature[] = "Interplay MVE File\x1A";
@@ -70,6 +81,7 @@ bool MveDecoder::loadStream(Common::SeekableReadStream *stream) {
stream->read(signature_buffer, sizeof(signature_buffer));
if (memcmp(signature_buffer, signature, sizeof(signature))) {
warning("MveDecoder::loadStream(): attempted to load non-MVE data");
+ delete stream;
return false;
}
_s = stream;
@@ -321,6 +333,7 @@ void MveDecoder::readNextPacket() {
assert((flags & 1) == 0);
assert((flags & 2) == 0);
+ delete _audioStream;
_audioStream = Audio::makeQueuingAudioStream(sampleRate, (flags & 2) != 0);
addTrack(new MveAudioTrack(this));
diff --git a/video/mve_decoder.h b/video/mve_decoder.h
index f1624b19df3..da6a6b4aa52 100644
--- a/video/mve_decoder.h
+++ b/video/mve_decoder.h
@@ -156,6 +156,7 @@ public:
MveDecoder();
virtual ~MveDecoder();
+ void close() override;
bool loadStream(Common::SeekableReadStream *stream) override;
void setAudioTrack(int track);
void applyPalette(PaletteManager *paletteManager);
diff --git a/video/video_decoder.h b/video/video_decoder.h
index a3789b8f39c..da4f89a36ee 100644
--- a/video/video_decoder.h
+++ b/video/video_decoder.h
@@ -72,7 +72,7 @@ public:
/**
* Load a video from a generic read stream. The ownership of the
* stream object transfers to this VideoDecoder instance, which is
- * hence also responsible for eventually deleting it.
+ * hence also responsible for eventually deleting it even in case of failure.
*
* Implementations of this function are required to call addTrack()
* for each track in the video upon success.
More information about the Scummvm-git-logs
mailing list