Support large files over 2GB on Windows (#1089)

Backport of 4dcf0b41c6
b01f45e141
https://github.com/taglib/taglib/pull/77

Tested with files larger than 2GB which have been created using

sox -n -r 44100 -C 320 large.mp3 synth 58916 sine 440 channels 2
sox -n -r 44100 -C 0 large.flac synth 25459 sine 440 channels 2
sox -n -r 44100 -C 10 large.ogg synth 229806 sine 440 channels 2
sox -n -r 44100 large.wav synth 6692 sine 440 channels 2
ffmpeg -f lavfi -i "sine=frequency=440:duration=244676" -y large.m4a

The only file which was readable with the tagreader example
before this commit was large.ogg. The problem is that long on
Windows is only 32-bit (also in LLP64 data model of 64-bit
compilation target) and all the file offsets using long are
too small for large files. Now long is replaced by offset_t
(defined to be long long on Windows and off_t on UNIX) for such
cases and some unsigned long are now size_t, which has the
correct size even on Windows.
This commit is contained in:
Urs Fleisch
2020-04-19 11:13:55 +02:00
parent bc915f5dc8
commit ca8c2e07ec
72 changed files with 378 additions and 364 deletions

View File

@@ -41,7 +41,7 @@ public:
ByteVector readAll() {
seek(0, End);
long end = tell();
offset_t end = tell();
seek(0);
return readBlock(end);
}

View File

@@ -141,8 +141,8 @@ public:
CPPUNIT_ASSERT_EQUAL(String("Title1"), f.tag()->title());
f.save();
CPPUNIT_ASSERT_EQUAL(7030L, f.length());
CPPUNIT_ASSERT_EQUAL(-1L, f.find("Title2"));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7030), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("Title2"));
}
void testFuzzedFile1()

View File

@@ -389,10 +389,10 @@ public:
ASF::File f(copy.fileName().c_str());
f.tag()->setTitle(longText(128 * 1024));
f.save();
CPPUNIT_ASSERT_EQUAL(297578L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(297578), f.length());
f.tag()->setTitle(longText(16 * 1024));
f.save();
CPPUNIT_ASSERT_EQUAL(68202L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(68202), f.length());
}
}

View File

@@ -117,7 +117,7 @@ public:
{
ByteVector v("abcdefghijklmnopqrstuvwxyz");
ByteVectorStream stream(v);
CPPUNIT_ASSERT_EQUAL(26L, stream.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(26), stream.length());
stream.seek(-4, IOStream::End);
CPPUNIT_ASSERT_EQUAL(ByteVector("w"), stream.readBlock(1));

View File

@@ -53,19 +53,19 @@ public:
}
{
PlainFile file(name.c_str());
CPPUNIT_ASSERT_EQUAL(10l, file.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(10), file.length());
CPPUNIT_ASSERT_EQUAL(2l, file.find(ByteVector("23", 2)));
CPPUNIT_ASSERT_EQUAL(2l, file.find(ByteVector("23", 2), 2));
CPPUNIT_ASSERT_EQUAL(7l, file.find(ByteVector("23", 2), 3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2), file.find(ByteVector("23", 2)));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2), file.find(ByteVector("23", 2), 2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7), file.find(ByteVector("23", 2), 3));
file.seek(0);
const ByteVector v = file.readBlock(file.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)10, v.size());
CPPUNIT_ASSERT_EQUAL((long)v.find("23"), file.find("23"));
CPPUNIT_ASSERT_EQUAL((long)v.find("23", 2), file.find("23", 2));
CPPUNIT_ASSERT_EQUAL((long)v.find("23", 3), file.find("23", 3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.find("23")), file.find("23"));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.find("23", 2)), file.find("23", 2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.find("23", 3)), file.find("23", 3));
}
}
@@ -81,19 +81,19 @@ public:
}
{
PlainFile file(name.c_str());
CPPUNIT_ASSERT_EQUAL(10l, file.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(10), file.length());
CPPUNIT_ASSERT_EQUAL(7l, file.rfind(ByteVector("23", 2)));
CPPUNIT_ASSERT_EQUAL(7l, file.rfind(ByteVector("23", 2), 7));
CPPUNIT_ASSERT_EQUAL(2l, file.rfind(ByteVector("23", 2), 6));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7), file.rfind(ByteVector("23", 2)));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7), file.rfind(ByteVector("23", 2), 7));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2), file.rfind(ByteVector("23", 2), 6));
file.seek(0);
const ByteVector v = file.readBlock(file.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)10, v.size());
CPPUNIT_ASSERT_EQUAL((long)v.rfind("23"), file.rfind("23"));
CPPUNIT_ASSERT_EQUAL((long)v.rfind("23", 7), file.rfind("23", 7));
CPPUNIT_ASSERT_EQUAL((long)v.rfind("23", 6), file.rfind("23", 6));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.rfind("23")), file.rfind("23"));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.rfind("23", 7)), file.rfind("23", 7));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.rfind("23", 6)), file.rfind("23", 6));
}
}
@@ -103,22 +103,22 @@ public:
std::string name = copy.fileName();
PlainFile f(name.c_str());
CPPUNIT_ASSERT_EQUAL((long)0, f.tell());
CPPUNIT_ASSERT_EQUAL((long)4328, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0), f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4328), f.length());
f.seek(100, File::Beginning);
CPPUNIT_ASSERT_EQUAL((long)100, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(100), f.tell());
f.seek(100, File::Current);
CPPUNIT_ASSERT_EQUAL((long)200, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(200), f.tell());
f.seek(-300, File::Current);
CPPUNIT_ASSERT_EQUAL((long)200, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(200), f.tell());
f.seek(-100, File::End);
CPPUNIT_ASSERT_EQUAL((long)4228, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4228), f.tell());
f.seek(-100, File::Current);
CPPUNIT_ASSERT_EQUAL((long)4128, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4128), f.tell());
f.seek(300, File::Current);
CPPUNIT_ASSERT_EQUAL((long)4428, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4428), f.tell());
}
void testTruncate()
@@ -128,18 +128,17 @@ public:
{
PlainFile f(name.c_str());
CPPUNIT_ASSERT_EQUAL(4328L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4328), f.length());
f.truncate(2000);
CPPUNIT_ASSERT_EQUAL(2000L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2000), f.length());
}
{
PlainFile f(name.c_str());
CPPUNIT_ASSERT_EQUAL(2000L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2000), f.length());
}
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestFile);

View File

@@ -91,8 +91,8 @@ public:
{
FLAC::File f(newname.c_str());
CPPUNIT_ASSERT_EQUAL(String("The Artist"), f.tag()->artist());
CPPUNIT_ASSERT_EQUAL(69L, f.find("Artist"));
CPPUNIT_ASSERT_EQUAL(-1L, f.find("Artist", 70));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(69), f.find("Artist"));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("Artist", 70));
}
}
@@ -253,9 +253,9 @@ public:
FLAC::File f(copy.fileName().c_str());
f.ID3v2Tag(true)->setTitle("0123456789");
f.save();
CPPUNIT_ASSERT_EQUAL(5735L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5735), f.length());
f.save();
CPPUNIT_ASSERT_EQUAL(5735L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5735), f.length());
CPPUNIT_ASSERT(f.find("fLaC") >= 0);
}
@@ -266,9 +266,9 @@ public:
FLAC::File f(copy.fileName().c_str());
f.xiphComment()->setTitle(longText(8 * 1024));
f.save();
CPPUNIT_ASSERT_EQUAL(12862L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(12862), f.length());
f.save();
CPPUNIT_ASSERT_EQUAL(12862L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(12862), f.length());
}
void testSaveMultipleValues()
@@ -449,7 +449,7 @@ public:
{
FLAC::File f(copy.fileName().c_str());
CPPUNIT_ASSERT(!f.hasID3v1Tag());
CPPUNIT_ASSERT_EQUAL((long)4692, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4692), f.length());
f.seek(0x0100);
audioStream = f.readBlock(4436);
@@ -457,7 +457,7 @@ public:
f.ID3v1Tag(true)->setTitle("01234 56789 ABCDE FGHIJ");
f.save();
CPPUNIT_ASSERT(f.hasID3v1Tag());
CPPUNIT_ASSERT_EQUAL((long)4820, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4820), f.length());
f.seek(0x0100);
CPPUNIT_ASSERT_EQUAL(audioStream, f.readBlock(4436));

View File

@@ -1553,14 +1553,14 @@ public:
{
MPEG::File f(newname.c_str());
CPPUNIT_ASSERT(f.hasID3v2Tag());
CPPUNIT_ASSERT_EQUAL(74789L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(74789), f.length());
f.ID3v2Tag()->setTitle("ABCDEFGHIJ");
f.save(MPEG::File::ID3v2, File::StripOthers);
}
{
MPEG::File f(newname.c_str());
CPPUNIT_ASSERT(f.hasID3v2Tag());
CPPUNIT_ASSERT_EQUAL(9263L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(9263), f.length());
}
}
@@ -1618,7 +1618,7 @@ public:
{
MPEG::File f(copy.fileName().c_str());
CPPUNIT_ASSERT(f.hasID3v2Tag());
CPPUNIT_ASSERT_EQUAL((long)3594, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(3594), f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)1505, f.ID3v2Tag()->header()->completeTagSize());
CPPUNIT_ASSERT_EQUAL(String("Artist A"), f.ID3v2Tag()->artist());
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
@@ -1689,4 +1689,3 @@ public:
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestID3v2);

View File

@@ -298,7 +298,7 @@ public:
MP4::Atoms atoms(&f);
MP4::Atom *moov = atoms.atoms[0];
CPPUNIT_ASSERT_EQUAL(long(77), moov->length);
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(77), moov->length);
f.tag()->setItem("pgap", true);
f.save();
@@ -311,7 +311,7 @@ public:
MP4::Atoms atoms(&f);
MP4::Atom *moov = atoms.atoms[0];
// original size + 'pgap' size + padding
CPPUNIT_ASSERT_EQUAL(long(77 + 25 + 974), moov->length);
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(77 + 25 + 974), moov->length);
}
}
@@ -589,8 +589,8 @@ public:
f.tag()->setTitle("0123456789");
f.save();
f.save();
CPPUNIT_ASSERT_EQUAL(2862L, f.find("0123456789"));
CPPUNIT_ASSERT_EQUAL(-1L, f.find("0123456789", 2863));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2862), f.find("0123456789"));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("0123456789", 2863));
}
void testWithZeroLengthAtom()

View File

@@ -119,10 +119,10 @@ public:
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
CPPUNIT_ASSERT(!f.audioProperties()->xingHeader());
const long last = f.lastFrameOffset();
const offset_t last = f.lastFrameOffset();
const MPEG::Header lastHeader(&f, last, false);
CPPUNIT_ASSERT_EQUAL(28213L, last);
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(28213), last);
CPPUNIT_ASSERT_EQUAL(209, lastHeader.frameLength());
}
@@ -258,20 +258,20 @@ public:
{
MPEG::File f(TEST_FILE_PATH_C("ape.mp3"));
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL((long)0x0000, f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL((long)0x1FD6, f.lastFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0000), f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1FD6), f.lastFrameOffset());
}
{
MPEG::File f(TEST_FILE_PATH_C("ape-id3v1.mp3"));
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL((long)0x0000, f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL((long)0x1FD6, f.lastFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0000), f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1FD6), f.lastFrameOffset());
}
{
MPEG::File f(TEST_FILE_PATH_C("ape-id3v2.mp3"));
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL((long)0x041A, f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL((long)0x23F0, f.lastFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x041A), f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x23F0), f.lastFrameOffset());
}
}
@@ -418,7 +418,7 @@ public:
f.save();
f.ID3v2Tag(true)->setTitle(std::string(4096, 'X').c_str());
f.save();
CPPUNIT_ASSERT_EQUAL(5141L, f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5141), f.firstFrameOffset());
}
}
@@ -430,7 +430,7 @@ public:
f.ID3v2Tag(true)->setTitle("0123456789");
f.save();
f.save();
CPPUNIT_ASSERT_EQUAL(-1L, f.find("ID3", 3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("ID3", 3));
}
void testRepeatedSave3()
@@ -524,8 +524,8 @@ public:
MPEG::File f(copy.fileName().c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT(f.hasID3v2Tag());
CPPUNIT_ASSERT_EQUAL(2255L, f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL(6015L, f.lastFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2255), f.firstFrameOffset());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(6015), f.lastFrameOffset());
CPPUNIT_ASSERT_EQUAL(String("Title A"), f.ID3v2Tag()->title());
f.ID3v2Tag()->setTitle("Title B");
f.save();

View File

@@ -84,7 +84,7 @@ public:
{
Vorbis::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(136383L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(136383), f.length());
CPPUNIT_ASSERT_EQUAL(19, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(30U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(131127U, f.packet(1).size());
@@ -100,7 +100,7 @@ public:
{
Vorbis::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(4370L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4370), f.length());
CPPUNIT_ASSERT_EQUAL(3, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(30U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(60U, f.packet(1).size());

View File

@@ -62,7 +62,7 @@ public:
CPPUNIT_ASSERT_EQUAL(String("The Artist"), f.tag()->artist());
f.seek(0, File::End);
CPPUNIT_ASSERT_EQUAL(9134L, f.tell());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(9134), f.tell());
}
}
@@ -87,7 +87,7 @@ public:
{
Ogg::FLAC::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(141141L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(141141), f.length());
CPPUNIT_ASSERT_EQUAL(21, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(51U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(131126U, f.packet(1).size());
@@ -104,7 +104,7 @@ public:
{
Ogg::FLAC::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(9128L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(9128), f.length());
CPPUNIT_ASSERT_EQUAL(5, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(51U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(59U, f.packet(1).size());

View File

@@ -102,7 +102,7 @@ public:
{
Ogg::Opus::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(167534L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(167534), f.length());
CPPUNIT_ASSERT_EQUAL(27, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(19U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(131380U, f.packet(1).size());
@@ -119,7 +119,7 @@ public:
{
Ogg::Opus::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(35521L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(35521), f.length());
CPPUNIT_ASSERT_EQUAL(11, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(19U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(313U, f.packet(1).size());

View File

@@ -40,7 +40,7 @@ public:
PublicRIFF(FileName file) : RIFF::File(file, BigEndian) {};
unsigned int riffSize() { return RIFF::File::riffSize(); };
unsigned int chunkCount() { return RIFF::File::chunkCount(); };
unsigned int chunkOffset(unsigned int i) { return RIFF::File::chunkOffset(i); };
offset_t chunkOffset(unsigned int i) { return RIFF::File::chunkOffset(i); };
unsigned int chunkPadding(unsigned int i) { return RIFF::File::chunkPadding(i); };
unsigned int chunkDataSize(unsigned int i) { return RIFF::File::chunkDataSize(i); };
ByteVector chunkName(unsigned int i) { return RIFF::File::chunkName(i); };
@@ -78,7 +78,7 @@ public:
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x1728 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1728 + 8), f.chunkOffset(2));
f.setChunkData("TEST", "foo");
}
@@ -87,7 +87,7 @@ public:
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), f.chunkData(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(3), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x1728 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1728 + 8), f.chunkOffset(2));
f.setChunkData("SSND", "abcd");
@@ -120,18 +120,18 @@ public:
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0xff0 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0xff0 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL(long(4400), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4400), f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(4399 - 8), f.riffSize());
f.setChunkData("TEST", "abcd");
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
@@ -139,15 +139,15 @@ public:
}
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
CPPUNIT_ASSERT_EQUAL(long(4412), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4412), f.length());
}
}
@@ -158,18 +158,18 @@ public:
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0xff0 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0xff0 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL(long(4399), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4399), f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(4399 - 8), f.riffSize());
f.setChunkData("TEST", "abcd");
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
@@ -177,15 +177,15 @@ public:
}
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
CPPUNIT_ASSERT_EQUAL(long(4412), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4412), f.length());
}
}
@@ -196,18 +196,18 @@ public:
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0xff0 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0xff0 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL(long(4399), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4399), f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(4399 - 8), f.riffSize());
f.setChunkData("TEST", "abc");
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(3), f.chunkDataSize(3));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(3));
@@ -215,15 +215,15 @@ public:
}
{
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(3), f.chunkDataSize(3));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(3));
CPPUNIT_ASSERT_EQUAL(long(4412), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4412), f.length());
}
}
@@ -235,21 +235,21 @@ public:
PublicRIFF f(filename.c_str());
CPPUNIT_ASSERT_EQUAL(5928U, f.riffSize());
CPPUNIT_ASSERT_EQUAL(5936L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5936), f.length());
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.chunkName(0));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(1));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0026 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0026 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(2));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x1728 + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1728 + 8), f.chunkOffset(2));
const ByteVector data(0x400, ' ');
f.setChunkData("SSND", data);
CPPUNIT_ASSERT_EQUAL(1070U, f.riffSize());
CPPUNIT_ASSERT_EQUAL(1078L, f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0026 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x042E + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(1078), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0026 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x042E + 8), f.chunkOffset(2));
f.seek(f.chunkOffset(0) - 8);
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.readBlock(4));
@@ -260,10 +260,10 @@ public:
f.setChunkData(0, data);
CPPUNIT_ASSERT_EQUAL(2076U, f.riffSize());
CPPUNIT_ASSERT_EQUAL(2084L, f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0414 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x081C + 8), f.chunkOffset(2));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2084), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0414 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x081C + 8), f.chunkOffset(2));
f.seek(f.chunkOffset(0) - 8);
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.readBlock(4));
@@ -274,9 +274,9 @@ public:
f.removeChunk("SSND");
CPPUNIT_ASSERT_EQUAL(1044U, f.riffSize());
CPPUNIT_ASSERT_EQUAL(1052L, f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0414 + 8), f.chunkOffset(1));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(1052), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0414 + 8), f.chunkOffset(1));
f.seek(f.chunkOffset(0) - 8);
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.readBlock(4));
@@ -285,8 +285,8 @@ public:
f.removeChunk(0);
CPPUNIT_ASSERT_EQUAL(12U, f.riffSize());
CPPUNIT_ASSERT_EQUAL(20L, f.length());
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(20), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
f.seek(f.chunkOffset(0) - 8);
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.readBlock(4));
@@ -295,4 +295,3 @@ public:
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestRIFF);

View File

@@ -67,7 +67,7 @@ public:
{
Ogg::Speex::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(156330L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(156330), f.length());
CPPUNIT_ASSERT_EQUAL(23, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(80U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(131116U, f.packet(1).size());
@@ -84,7 +84,7 @@ public:
{
Ogg::Speex::File f(newname.c_str());
CPPUNIT_ASSERT(f.isValid());
CPPUNIT_ASSERT_EQUAL(24317L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(24317), f.length());
CPPUNIT_ASSERT_EQUAL(7, f.lastPageHeader()->pageSequenceNumber());
CPPUNIT_ASSERT_EQUAL(80U, f.packet(0).size());
CPPUNIT_ASSERT_EQUAL(49U, f.packet(1).size());

View File

@@ -268,7 +268,7 @@ public:
ScopedFileCopy copy("duplicate_tags", ".wav");
RIFF::WAV::File f(copy.fileName().c_str());
CPPUNIT_ASSERT_EQUAL(17052L, f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(17052), f.length());
// duplicate_tags.wav has duplicate ID3v2/INFO tags.
// title() returns "Title2" if can't skip the second tag.
@@ -280,8 +280,8 @@ public:
CPPUNIT_ASSERT_EQUAL(String("Title1"), f.InfoTag()->title());
f.save();
CPPUNIT_ASSERT_EQUAL(15898L, f.length());
CPPUNIT_ASSERT_EQUAL(-1L, f.find("Title2"));
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(15898), f.length());
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("Title2"));
}
void testFuzzedFile1()