[prev in list] [next in list] [prev in thread] [next in thread] 

List:       taglib-devel
Subject:    Re: TagLib 1.9.1 crash using C++11
From:       Festus Hagen <festushagenlists () yahoo ! com>
Date:       2015-06-22 22:09:37
Message-ID: 1697190877.3565890.1435010977962.JavaMail.yahoo () mail ! yahoo ! com
[Download RAW message or body]

Somehow this got off the list, this re-introduces it back onto the list.


Ibrahim Sha'ath,The code works using GCC c++11 on Windows, FreeBSD and OS X. (That is \
GNU's not Apples ...). However I don't believe the following provides the result \
expected.  if(mp4File != NULL){
I suspect the following would.

  if(mp4File->isValid()){

If TagLib::FileRef and TagLib::File are not actually used other then to create \
mp4File, The following

  TagLib::FileRef *fr = new \
TagLib::FileRef("/Users/ibrahimshaath/Downloads/test.m4a");  TagLib::File *f = \
fr->file();  TagLib::MP4::File *mp4File = dynamic_cast<TagLib::MP4::File*>(f);
can be reduced to

  TagLib::MP4::File *mp4File = new \
TagLib::MP4::File("/Users/ibrahimshaath/Downloads/test.m4a");

At this point in time I am still unable to get Clang to build on this OS X10.5.8 box, \
I'm not an Apple person, It was free, it's a dual 2.3Mhz PPC G5, I wanted a Big \
Endian test box, it fit the bill, I think!

Anything more I can do to help, feel free to ask!

-Enjoy
> )_~

________________________________
From: Ibrahim Sha'ath <ibrahimshaath@gmail.com>
To: Festus Hagen <festushagenlists@yahoo.com> 
Sent: Sunday, June 21, 2015 4:43 AM
Subject: Re: TagLib 1.9.1 crash using C++11



Hey Festus,

I rewrote this into a sample app so you can see everything that's going on. This \
crashes the same way:

int main() {
  TagLib::FileRef *fr = \
newTagLib::FileRef("/Users/ibrahimshaath/Downloads/test.m4a");  TagLib::File *f = \
fr->file();  TagLib::MP4::File *mp4File = dynamic_cast<TagLib::MP4::File*>(f);
  TagLib::String key = TagLib::String("\251grp");

  if (mp4File != NULL) {
    cout << "MP4filefound" << endl;
    if(mp4File->tag()->itemListMap().contains(key)) {
      TagLib::MP4::Itemi = mp4File->tag()->itemListMap()[key];
      TagLib::Stringstr = i.toStringList().front();
      cout << "Grouping:" << str.toCString(true) << endl;
    }

    TagLib::StringList sl(TagLib::String("DATA"));
    mp4File->tag()->itemListMap().insert(key, TagLib::MP4::Item(sl));
    cout << "Groupingdatainserted" << endl;
    mp4File->save();
    cout << "Filesaved" << endl;
  }
  return0;
}
It works if I compile it without C++11. With C++11, it can't read the itemListMap and \
crashes on insert. I haven't had the time to delve into the TagLib codebase and see \
what I might have done wrong, so I really appreciate your help and familiarity with \
the lib.

Best
Ibrahim




On 20 June 2015 at 17:11, Festus Hagen <festushagenlists@yahoo.com> wrote:

Whoops ... I should of been more clear, I didn't expect it to resolve the crash, just \
eliminating the obvious.
> Like I said previously, The example code you provided works as is, even though it's \
> slightly improper. 
> The first parameter (the key) is a TagLib::String not a c_string, it behooves you \
> to use proper data types. 
> It appears you have an Mp4FileMetadata class with a setGrouping(QString const&) \
> function. 
> I assume that is where the snippet of code you posted came from?
> May we see the entire function?
> 
> 
> Also, You should strip down your code to be as simple as possible and still have \
> the issue, I suspect you have an overrun or the like someplace and this just \
> happens to be where it's getting stepped on ... 
> If you want, I'll send/post my test kissapp (and its CMakeLists.txt) so you can try \
> it on your system, it is short, simple and to the point, though not pretty. 
> The CMakeLists is hard coded to find TagLib and would need modification to fit your \
> system. 
> 
> -Enjoy
> > )_~
> 
> ________________________________
> From: Ibrahim Sha'ath <ibrahimshaath@gmail.com>
> To: Festus Hagen <festushagenlists@yahoo.com>; taglib-devel@kde.org
> Sent: Friday, June 19, 2015 1:45 PM
> 
> Subject: Re: TagLib 1.9.1 crash using C++11
> 
> 
> 
> Unfortunately, that did not prevent the crash, though it did shorten the stack:
> 
> 0 ... std::__1::map<TagLib::String, TagLib::MP4::Item, \
> std::__1::less<TagLib::String>, std::__1::allocator<std::__1::pair<TagLib::String \
> const, TagLib::MP4::Item> > >::operator[](TagLib::String const&) + 211 1 ... \
> Mp4FileMetadata::setGrouping(QString const&) + 195 
> As it turned out I had already implemented this change in almost every similar \
> method in my app, but not that one! So thanks for pointing it out. I've also tried \
> using a TagLib::String as the map key rather than just the C-string, but to no \
> avail. I didn't notice the MP4::Tag::item property implementation in master, but \
> I'll take another look. 
> By any chance does the shorter stack clarify anything?
> 
> Thanks again.
> 
> 
> 
> 
> On 19 June 2015 at 14:11, Ibrahim Sha'ath <ibrahimshaath@gmail.com> wrote:
> 
> Festus, thank you very much. That looks spot on. Let me try it out when I get home.
> > 
> > 
> > On 19 June 2015 at 01:55, Festus Hagen <festushagenlists@yahoo.com> wrote:
> > 
> > Hi,
> > > 
> > > The following particulate from your stack trace shows that the second argument \
> > > to insert() is a TagLib::MP4::Item not a TagLib::StringList ...
> > > > insert(TagLib::String const&, TagLib::MP4::Item const&)
> > > 
> > > However, I did wrap your sample code with the rest of the necessities and it \
> > > tests fine using GCC c++11 on Windows, FreeBSD and OS X. 
> > > I shall try CLang when it's done building ...
> > > 
> > > Might I suggest a slight code change: \
> > > mp4File->tag()->itemListMap().insert("\251grp", TagLib::MP4::Item(sl)); 
> > > TagLib master has new accessors MP4::Tag::item(const String &key) and \
> > > MP4::Tag::setItem(const String &key, const Item &value) for this in the next \
> > > release. 
> > > -Enjoy
> > > > )_~
> > > ________________________________
> > > From: Ibrahim Sha'ath <ibrahimshaath@gmail.com>
> > > To: taglib-devel@kde.org
> > > Sent: Thursday, June 11, 2015 2:11 PM
> > > Subject: Re: TagLib 1.9.1 crash using C++11
> > > 
> > > 
> > > 
> > > 
> > > Hmmm. taglib2 didn't work either. A simpler stack trace, but looks like the \
> > > same crash essentially: 
> > > 0 ... 0x0000000108214283 std::__1::map<TagLib::String, TagLib::MP4::Item, \
> > > std::__1::less<TagLib::String>, \
> > > std::__1::allocator<std::__1::pair<TagLib::String const, TagLib::MP4::Item> > \
> > > >::operator[](TagLib::String const&) + 211 1 ... 0x00000001082132f1 \
> > > > TagLib::Map<TagLib::String, TagLib::MP4::Item>::insert(TagLib::String const&, \
> > > > TagLib::MP4::Item const&) + 97
> > > 
> > > Is anyone successfully using the itemListMap with C++11? I can't read from it \
> > > either, though that doesn't crash. 
> > > 
> > > 
> > > 
> > > 
> > > On 11 June 2015 at 18:33, Ibrahim Sha'ath <ibrahimshaath@gmail.com> wrote:
> > > 
> > > Sadly, current master didn't improve matters, so I imagine neither will that \
> > > specific tag.
> > > > I'll try out the v2 branch.
> > > > 
> > > > 
> > > > On 5 June 2015 at 09:36, Ibrahim Sha'ath <ibrahimshaath@gmail.com> wrote:
> > > > 
> > > > Excellent Rob, cheers; I'll definitely check that out.
> > > > > 
> > > > > 
> > > > > Your email ended up in spam for some reason.
> > > > > 
> > > > > 
> > > > > On 5 June 2015 at 09:03, Rob Arnold <rob@loci.net> wrote:
> > > > > 
> > > > > Same, but with master (specifically v1.9.1-197-g62ab41f), so perhaps a \
> > > > > little closer to 1.9.1 than the taglib2 branch
> > > > > > On OS X 10.10 with Clang, C++11 and 14 options turned on.
> > > > > > My code uses StringList, File:save() and tag(), but doesn't directly use \
> > > > > > itemListMap() 
> > > > > > 
> > > > > > On Jun 4, 2015, at 7:02 PM, Stephen F. Booth <me@sbooth.org> wrote:
> > > > > > > 
> > > > > > > I've used TagLib and C++11 successfully together, however I used the \
> > > > > > > taglib2 branch and not the 1.9.1 release.  Some of my classes using \
> > > > > > > TagLib are at \
> > > > > > > https://github.com/sbooth/SFBAudioEngine/tree/master/Metadata if you'd \
> > > > > > > like to take a look. 
> > > > > > > 
> > > > > > > Stephen
> > > > > > > 
> > > > > > > 
> > > > > > > On Wed, Jun 3, 2015 at 8:45 AM, Ibrahim Sha'ath \
> > > > > > > <ibrahimshaath@gmail.com> wrote: 
> > > > > > > If no-one has any idea about this issue specifically, has anyone \
> > > > > > > successfully used C++11 for a TagLib 1.9.1 project?
> > > > > > 
> > > > > > _______________________________________________
> > > > > > taglib-devel mailing list
> > > > > > taglib-devel@kde.org
> > > > > > https://mail.kde.org/mailman/listinfo/taglib-devel
> > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > > 
> > > 
> > > _______________________________________________
> > > taglib-devel mailing list
> > > taglib-devel@kde.org
> > > https://mail.kde.org/mailman/listinfo/taglib-devel
> > > _______________________________________________
> > > taglib-devel mailing list
> > > taglib-devel@kde.org
> > > https://mail.kde.org/mailman/listinfo/taglib-devel
> > > 
> > 
> 
_______________________________________________
taglib-devel mailing list
taglib-devel@kde.org
https://mail.kde.org/mailman/listinfo/taglib-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic