TagLib 1.7 reporting tags always present

Gregorio Guidi gregorio.guidi at gmail.com
Fri Jan 20 20:43:45 UTC 2012

Hi all,

I noticed that if you compile this simple code against TagLib 1.7, to 
test if tags are present:

#include <iostream>
#include <mpegfile.h>
int main(int argc, char *argv[])
   TagLib::MPEG::File f(argv[1]);
   TagLib::ID3v2::Tag *tag2 = f.ID3v2Tag();
   if (tag2) {
     std::cout << "ID3v2 tag is present." << std::endl;
   TagLib::ID3v1::Tag *tag1 = f.ID3v1Tag();
   if (tag1) {
     std::cout << "ID3v1 tag is present." << std::endl;

   return 0;

... then you always get the result "ID3v2 tag is present" and "ID3v1 tag 
is present" for any file irrespective of actual content, in contrast to 
the API docs for the ID3v2Tag()/ID3v1Tag() methods.

The following patch shows where the problem lies. By removing those 
lines you get correct behavior, but of course I imagine there was a 
reason for them being added there and I am not sure if it is ok to just 
remove them...


diff -Nur taglib-1.7.orig/taglib/mpeg/mpegfile.cpp 
--- taglib-1.7.orig/taglib/mpeg/mpegfile.cpp    2011-03-11 
14:15:38.000000000 +0100
+++ taglib-1.7/taglib/mpeg/mpegfile.cpp 2012-01-20 21:30:21.469425159 +0100
@@ -430,11 +430,6 @@

      d->properties = new Properties(this, propertiesStyle);
-  // Make sure that we have our default tag types available.
-  ID3v2Tag(true);
-  ID3v1Tag(true);

  long MPEG::File::findID3v2()

More information about the taglib-devel mailing list