From 6c183a7df825f33caa0ae8f7d94bcbebc090c265 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Wed, 6 Jan 2016 17:43:32 +0900 Subject: [PATCH 1/2] Update NEWS. --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index e442195b..a3e5c93a 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,7 @@ * Better handling of broken MPEG audio frames. * Fixed crash when calling File::properties() after strip(). * Fixed crash when parsing certain MPEG files. + * Fixed crash when saving Ogg files. * Fixed possible file corruptions when saving ASF files. * Fixed possible file corruptions when saving FLAC files. * Fixed possible file corruptions when saving MP4 files. From 815d1583e9f56cdee5c567115ff934827dd65d5b Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Wed, 6 Jan 2016 17:57:37 +0900 Subject: [PATCH 2/2] Avoid repeating insert() operations in Ogg::File. --- taglib/ogg/oggfile.cpp | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/taglib/ogg/oggfile.cpp b/taglib/ogg/oggfile.cpp index 50a1c0b2..2a922981 100644 --- a/taglib/ogg/oggfile.cpp +++ b/taglib/ogg/oggfile.cpp @@ -271,30 +271,14 @@ void Ogg::File::writePacket(unsigned int i, const ByteVector &packet) // Write the pages. + ByteVector data; + for(it = pages.begin(); it != pages.end(); ++it) + data.append((*it)->render()); + const unsigned long originalOffset = firstPage->fileOffset(); const unsigned long originalLength = lastPage->fileOffset() + lastPage->size() - originalOffset; - unsigned long writtenLength = 0; - - for(it = pages.begin(); it != pages.end(); ++it) { - const ByteVector data = (*it)->render(); - - unsigned long replace; - - if(writtenLength + data.size() <= originalLength) - replace = data.size(); - else if(writtenLength <= originalLength) - replace = originalLength - writtenLength; - else - replace = 0; - - insert(data, originalOffset + writtenLength, replace); - - writtenLength += data.size(); - } - - if(writtenLength < originalLength) - removeBlock(originalOffset + writtenLength, originalLength - writtenLength); + insert(data, originalOffset, originalLength); // Renumber the following pages if the pages have been split or merged. @@ -302,7 +286,7 @@ void Ogg::File::writePacket(unsigned int i, const ByteVector &packet) = pages.back()->pageSequenceNumber() - lastPage->pageSequenceNumber(); if(numberOfNewPages != 0) { - long pageOffset = originalOffset + writtenLength; + long pageOffset = originalOffset + data.size(); while(true) { Page page(this, pageOffset);