summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-02-14 14:08:03 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-02-14 14:08:03 +0100
commit9705ac40c9895d92dccb08faec5f56114c40e6fd (patch)
treea125d99d82a51b60ce628f0967691ef020b45066
parenta1cc37966c4b31606463668fe267f999fe3f4330 (diff)
parenta4db4ae6581a6e4f051d8aea2c562c1165d22590 (diff)
downloadredot-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.cpp14
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);
}
}