|
From: Yoda-JM <yo...@us...> - 2010-04-11 18:13:47
|
Module: performous
Branch: master
Commit: 848bbdabf2506416c187633a40dd788f8a40f041
Author: Vincent Le Ligeour <yo...@us...>
Date: Sun Apr 11 18:25:24 2010 +0200
Fixed segfault in ss_extract on US disks
---
tools/ss_extract.cpp | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/tools/ss_extract.cpp b/tools/ss_extract.cpp
index 21ce01b..fe4a043 100644
--- a/tools/ss_extract.cpp
+++ b/tools/ss_extract.cpp
@@ -186,11 +186,13 @@ void video_us(Song& song, PakFile const& iavFile, PakFile const& indFile, fs::pa
// first 4 bytes are packet length
iavFile.get(data, iav_offset, size);
{
- unsigned int opaque_footer_size = 3 * sizeof(int);
- unsigned int chunk1 = getLE32(&data[0]);
- ipudata.insert(ipudata.end(), data.begin() + 4, data.begin() + chunk1 - opaque_footer_size);
- unsigned int chunk2 = getLE32(&data[chunk1]);
- ipudata.insert(ipudata.end(), data.begin() + chunk1 + 4, data.begin() + chunk1 + chunk2 - opaque_footer_size);
+ unsigned int consumed = 0;
+ while(consumed < size) {
+ unsigned int opaque_footer_size = 3 * sizeof(int);
+ unsigned int chunk = getLE32(&data[consumed]);
+ ipudata.insert(ipudata.end(), data.begin() + 4 + consumed, data.begin() + consumed + chunk - opaque_footer_size);
+ consumed += chunk;
+ }
}
iav_offset += size;
break;
|