diff --git a/Core/Util/PSARUnpack.cpp b/Core/Util/PSARUnpack.cpp index 0fc1526b5d..4821bf7df8 100644 --- a/Core/Util/PSARUnpack.cpp +++ b/Core/Util/PSARUnpack.cpp @@ -1474,7 +1474,10 @@ static std::string ReadUpdaterVersionFromArchiveHeader() { } bool MountedDiscHasUpdater() { - return pspFileSystem.GetFileInfo(std::string("disc0:/") + UPDATE_PSAR_SUFFIX).exists; + // Plenty of discs keep the updater's files with nothing in them: UMD Video discs ship a 0-byte + // DATA.BIN next to a real PARAM.SFO, PSN releases zero-fill it. Only an actual archive counts. + std::vector head; + return ReadHeadFromMountedDisc(UPDATE_PSAR_SUFFIX, 4, &head) && head.size() == 4 && ReadU32(head.data()) == PSAR_MAGIC; } std::string ReadMountedDiscUpdaterVersion() { diff --git a/UI/GameInfoCache.cpp b/UI/GameInfoCache.cpp index ebde4182cd..b83d53ad00 100644 --- a/UI/GameInfoCache.cpp +++ b/UI/GameInfoCache.cpp @@ -881,7 +881,8 @@ handleELF: // Most UMDs carry a firmware updater, which is a source of things like the // system fonts. Just note down what's there - unpacking it is a separate step. - if (flags_ & GameInfoFlags::BUNDLED_UPDATE_INFO) { + // UMD Video discs only carry a placeholder (an empty DATA.BIN), so they're skipped. + if ((flags_ & GameInfoFlags::BUNDLED_UPDATE_INFO) && fileType != IdentifiedFileType::PSP_UMD_VIDEO_ISO) { BundledUpdateInfo update; ReadBundledUpdateInfo(&umd, "/", &update); std::lock_guard lock(info_->lock);