diff --git a/CHANGES b/CHANGES index 937e39158..6d6ab2ba5 100644 --- a/CHANGES +++ b/CHANGES @@ -20,6 +20,7 @@ Bugfixes: - GBA: Fix hang when loading a savestate if sync to video is enabled - Debugger: Fix use-after-free in breakpoint clearing code - Util: Fix resource leak in UTF-8 handling code + - VFS: Fix resource leaks if some allocations fail Misc: - Qt: Show multiplayer numbers in window title - Qt: Solar sensor can have shortcuts set diff --git a/src/util/vfs.c b/src/util/vfs.c index d706d0b32..ab69d7d69 100644 --- a/src/util/vfs.c +++ b/src/util/vfs.c @@ -197,6 +197,7 @@ struct VDir* VDirOpen(const char* path) { struct VDirDE* vd = malloc(sizeof(struct VDirDE)); if (!vd) { + closedir(de); return 0; } diff --git a/src/util/vfs/vfs-lzma.c b/src/util/vfs/vfs-lzma.c index f41639505..21e580fdb 100644 --- a/src/util/vfs/vfs-lzma.c +++ b/src/util/vfs/vfs-lzma.c @@ -65,12 +65,12 @@ static struct VFile* _vd7zOpenFile(struct VDir* vd, const char* path, int mode); static const char* _vde7zName(struct VDirEntry* vde); struct VDir* VDirOpen7z(const char* path, int flags) { - struct VDir7z* vd = malloc(sizeof(struct VDir7z)); - if (flags & O_WRONLY || flags & O_CREAT) { return 0; } + struct VDir7z* vd = malloc(sizeof(struct VDir7z)); + // What does any of this mean, Igor? if (InFile_Open(&vd->archiveStream.file, path)) { free(vd);