Improve processing files that aren't valid ROMs.

Now, the extension is actually checked before opening the ROM.
Streaming ROMs (MVC) are already taken care of, but still TODO is limit read to Cart::maxSize().
This commit is contained in:
Stephen Anthony 2022-04-30 18:53:39 -02:30
parent 06f42252fa
commit f50b8f068d
3 changed files with 11 additions and 8 deletions

View File

@ -43,7 +43,7 @@ class FixedStack
bool full() const { return _size >= CAPACITY; }
T top() const { return _stack[_size - 1]; }
T get(uInt32 pos) { return _stack[pos]; }
T get(uInt32 pos) const { return _stack[pos]; }
void push(const T& x) { _stack[_size++] = x; }
T pop() { return std::move(_stack[--_size]); }
uInt32 size() const { return _size; }

View File

@ -782,14 +782,17 @@ string OSystem::getROMMD5(const FilesystemNode& rom) const
ByteBuffer OSystem::openROM(const FilesystemNode& rom, size_t& size,
bool showErrorMessage) const
{
// First check if this is a 'streaming' ROM (one where we only read
// a portion of the file)
// First check if this is a valid ROM filename
const bool isValidROM = rom.isFile() && Bankswitch::isValidRomName(rom);
if(!isValidROM && showErrorMessage)
throw runtime_error("Unrecognized ROM file type");
// Next check for a proper file size:
// Streaming ROMs read only a portion of the file
// TODO: Otherwise, cap the size to the maximum Cart size
const size_t sizeToRead = CartDetector::isProbablyMVC(rom);
// Next check if rom is a valid size
// TODO: We should check if ROM is < Cart::maxSize(), but only
// if it's not a ZIP file (that size should be higher; still TBD)
// Now we can try to open the file
ByteBuffer image;
try
{

View File

@ -166,7 +166,7 @@ FileListWidget::IconType FileListWidget::getIconType(const string& path) const
? IconType::zip : IconType::directory;
}
else
return node.isFile() && Bankswitch::isValidRomName(node.getName())
return node.isFile() && Bankswitch::isValidRomName(node)
? IconType::rom : IconType::unknown;
}