Commit 2e64afca authored by Max Kellermann's avatar Max Kellermann

decoder/modplug: check InputStream::KnownSize()

parent 51cda0be
...@@ -54,24 +54,29 @@ modplug_decoder_init(const config_param &param) ...@@ -54,24 +54,29 @@ modplug_decoder_init(const config_param &param)
static WritableBuffer<uint8_t> static WritableBuffer<uint8_t>
mod_loadfile(Decoder *decoder, InputStream &is) mod_loadfile(Decoder *decoder, InputStream &is)
{ {
const InputStream::offset_type size = is.GetSize(); //known/unknown size, preallocate array, lets read in chunks
if (size == 0) { const bool is_stream = !is.KnownSize();
LogWarning(modplug_domain, "file is empty");
return { nullptr, 0 };
}
if (size > MODPLUG_FILE_LIMIT) { WritableBuffer<uint8_t> buffer;
LogWarning(modplug_domain, "file too large"); if (is_stream)
return { nullptr, 0 }; buffer.size = MODPLUG_PREALLOC_BLOCK;
} else {
const auto size = is.GetSize();
if (size == 0) {
LogWarning(modplug_domain, "file is empty");
return { nullptr, 0 };
}
//known/unknown size, preallocate array, lets read in chunks if (size > MODPLUG_FILE_LIMIT) {
LogWarning(modplug_domain, "file too large");
return { nullptr, 0 };
}
const bool is_stream = size < 0; buffer.size = size;
}
WritableBuffer<uint8_t> buffer;
buffer.size = is_stream ? MODPLUG_PREALLOC_BLOCK : size;
buffer.data = new uint8_t[buffer.size]; buffer.data = new uint8_t[buffer.size];
uint8_t *const end = buffer.end(); uint8_t *const end = buffer.end();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment