Add a few checks to make sure that we don't blow up when trying to read zero-byte

values.

BUG:150250


git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@717984 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
Scott Wheeler 2007-09-27 20:52:50 +00:00
parent 2eda04f934
commit 14eda582ee
3 changed files with 9 additions and 4 deletions

View File

@ -216,7 +216,7 @@ void APE::Tag::read()
d->file->seek(d->tagOffset);
d->footer.setData(d->file->readBlock(Footer::size()));
if(d->footer.tagSize() == 0 ||
if(d->footer.tagSize() <= Footer::size() ||
d->footer.tagSize() > uint(d->file->length()))
return;

View File

@ -321,7 +321,9 @@ ByteVector &ByteVector::setData(const char *data, uint length)
detach();
resize(length);
::memcpy(DATA(d), data, length);
if(length > 0)
::memcpy(DATA(d), data, length);
return *this;
}
@ -334,12 +336,12 @@ ByteVector &ByteVector::setData(const char *data)
char *ByteVector::data()
{
detach();
return DATA(d);
return size() > 0 ? DATA(d) : 0;
}
const char *ByteVector::data() const
{
return DATA(d);
return size() > 0 ? DATA(d) : 0;
}
ByteVector ByteVector::mid(uint index, uint length) const

View File

@ -108,6 +108,9 @@ ByteVector File::readBlock(ulong length)
return ByteVector::null;
}
if(length == 0)
return ByteVector::null;
if(length > FilePrivate::bufferSize &&
length > ulong(File::length()))
{