]> granicus.if.org Git - taglib/commitdiff
Add a few checks to make sure that we don't blow up when trying to read zero-byte
authorScott Wheeler <wheeler@kde.org>
Thu, 27 Sep 2007 20:52:50 +0000 (20:52 +0000)
committerScott Wheeler <wheeler@kde.org>
Thu, 27 Sep 2007 20:52:50 +0000 (20:52 +0000)
values.

BUG:150250

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@717984 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

taglib/ape/apetag.cpp
taglib/toolkit/tbytevector.cpp
taglib/toolkit/tfile.cpp

index ef3c3cd0f59f4490d78bb3b2f5c9ef3be2051093..6c5c3b9b002933309c780431d8804809f1f4f7c0 100644 (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;
 
index 26dd18cbb7c91fec2b477749f17011ae916e3f74..488d47737f3f98c0f49c7b54d20d078a87df311e 100644 (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
index 2fa760776b806740e2eeeb49b45c2eec978667c0..a058763e15bc928daa3383f73c8b6bc1e6da0da4 100644 (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()))
   {