diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-14 14:08:03 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-14 14:08:03 +0100 |
commit | 9705ac40c9895d92dccb08faec5f56114c40e6fd (patch) | |
tree | a125d99d82a51b60ce628f0967691ef020b45066 | |
parent | a1cc37966c4b31606463668fe267f999fe3f4330 (diff) | |
parent | a4db4ae6581a6e4f051d8aea2c562c1165d22590 (diff) | |
download | redot-engine-9705ac40c9895d92dccb08faec5f56114c40e6fd.tar.gz |
Merge pull request #87246 from bs-mwoerner/ogg_crash
Fix a possible crash when importing an OGG file with zero-length packets
-rw-r--r-- | modules/vorbis/resource_importer_ogg_vorbis.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/modules/vorbis/resource_importer_ogg_vorbis.cpp b/modules/vorbis/resource_importer_ogg_vorbis.cpp index bf5d964d39..7b8d14741b 100644 --- a/modules/vorbis/resource_importer_ogg_vorbis.cpp +++ b/modules/vorbis/resource_importer_ogg_vorbis.cpp @@ -212,11 +212,13 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::load_from_buffer(const Vect granule_pos = packet.granulepos; } - PackedByteArray data; - data.resize(packet.bytes); - memcpy(data.ptrw(), packet.packet, packet.bytes); - sorted_packets[granule_pos].push_back(data); - packet_count++; + if (packet.bytes > 0) { + PackedByteArray data; + data.resize(packet.bytes); + memcpy(data.ptrw(), packet.packet, packet.bytes); + sorted_packets[granule_pos].push_back(data); + packet_count++; + } } Vector<Vector<uint8_t>> packet_data; for (const KeyValue<uint64_t, Vector<Vector<uint8_t>>> &pair : sorted_packets) { @@ -224,7 +226,7 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::load_from_buffer(const Vect packet_data.push_back(packets); } } - if (initialized_stream) { + if (initialized_stream && packet_data.size() > 0) { ogg_packet_sequence->push_page(ogg_page_granulepos(&page), packet_data); } } |