Merge branch 'master' into merge-master-to-taglib2

# Conflicts:
#	taglib/ogg/oggfile.cpp
This commit is contained in:
Tsuda Kageyu 2016-01-07 09:01:32 +09:00
commit b972f24193
2 changed files with 7 additions and 22 deletions

1
NEWS
View File

@ -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.

View File

@ -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 long long originalOffset = firstPage->fileOffset();
const long long originalLength = lastPage->fileOffset() + lastPage->size() - originalOffset;
long long writtenLength = 0;
for(it = pages.begin(); it != pages.end(); ++it) {
const ByteVector data = (*it)->render();
size_t replace;
if(writtenLength + data.size() <= originalLength)
replace = data.size();
else if(writtenLength <= originalLength)
replace = static_cast<size_t>(originalLength - writtenLength);
else
replace = 0;
insert(data, originalOffset + writtenLength, replace);
writtenLength += data.size();
}
if(writtenLength < originalLength)
removeBlock(originalOffset + writtenLength, static_cast<size_t>(originalLength - writtenLength));
insert(data, originalOffset, static_cast<size_t>(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 long pageOffset = originalOffset + writtenLength;
long long pageOffset = originalOffset + data.size();
while(true) {
Page page(this, pageOffset);