diff --git a/taglib/ape/apefile.cpp b/taglib/ape/apefile.cpp index 24158cf3..41341b86 100644 --- a/taglib/ape/apefile.cpp +++ b/taglib/ape/apefile.cpp @@ -90,14 +90,16 @@ APE::File::File(FileName file, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } APE::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } APE::File::~File() diff --git a/taglib/asf/asffile.cpp b/taglib/asf/asffile.cpp index d27fefcb..d576935d 100644 --- a/taglib/asf/asffile.cpp +++ b/taglib/asf/asffile.cpp @@ -372,14 +372,16 @@ ASF::File::File(FileName file, bool readProperties, Properties::ReadStyle proper : TagLib::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } ASF::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } ASF::File::~File() diff --git a/taglib/flac/flacfile.cpp b/taglib/flac/flacfile.cpp index d27bb555..63c20315 100644 --- a/taglib/flac/flacfile.cpp +++ b/taglib/flac/flacfile.cpp @@ -109,7 +109,8 @@ FLAC::File::File(FileName file, bool readProperties, TagLib::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } FLAC::File::File(FileName file, ID3v2::FrameFactory *frameFactory, @@ -118,7 +119,8 @@ FLAC::File::File(FileName file, ID3v2::FrameFactory *frameFactory, { d = new FilePrivate; d->ID3v2FrameFactory = frameFactory; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } FLAC::File::File(IOStream *stream, ID3v2::FrameFactory *frameFactory, @@ -127,7 +129,8 @@ FLAC::File::File(IOStream *stream, ID3v2::FrameFactory *frameFactory, { d = new FilePrivate; d->ID3v2FrameFactory = frameFactory; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } FLAC::File::~File() diff --git a/taglib/it/itfile.cpp b/taglib/it/itfile.cpp index 30638c97..6f49b170 100644 --- a/taglib/it/itfile.cpp +++ b/taglib/it/itfile.cpp @@ -45,7 +45,8 @@ IT::File::File(FileName file, bool readProperties, Mod::FileBase(file), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } IT::File::File(IOStream *stream, bool readProperties, @@ -53,7 +54,8 @@ IT::File::File(IOStream *stream, bool readProperties, Mod::FileBase(stream), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } IT::File::~File() diff --git a/taglib/mod/modfile.cpp b/taglib/mod/modfile.cpp index 25fc8715..ce974c16 100644 --- a/taglib/mod/modfile.cpp +++ b/taglib/mod/modfile.cpp @@ -45,7 +45,8 @@ Mod::File::File(FileName file, bool readProperties, Mod::FileBase(file), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } Mod::File::File(IOStream *stream, bool readProperties, @@ -53,7 +54,8 @@ Mod::File::File(IOStream *stream, bool readProperties, Mod::FileBase(stream), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } Mod::File::~File() diff --git a/taglib/mp4/mp4file.cpp b/taglib/mp4/mp4file.cpp index 02185575..a9543211 100644 --- a/taglib/mp4/mp4file.cpp +++ b/taglib/mp4/mp4file.cpp @@ -67,14 +67,16 @@ MP4::File::File(FileName file, bool readProperties, AudioProperties::ReadStyle a : TagLib::File(file) { d = new FilePrivate; - read(readProperties, audioPropertiesStyle); + if(isOpen()) + read(readProperties, audioPropertiesStyle); } MP4::File::File(IOStream *stream, bool readProperties, AudioProperties::ReadStyle audioPropertiesStyle) : TagLib::File(stream) { d = new FilePrivate; - read(readProperties, audioPropertiesStyle); + if(isOpen()) + read(readProperties, audioPropertiesStyle); } MP4::File::~File() diff --git a/taglib/mpc/mpcfile.cpp b/taglib/mpc/mpcfile.cpp index 5f377155..46fa1a2c 100644 --- a/taglib/mpc/mpcfile.cpp +++ b/taglib/mpc/mpcfile.cpp @@ -94,14 +94,16 @@ MPC::File::File(FileName file, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } MPC::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } MPC::File::~File() diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index 7e2e98a8..c7d74214 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -99,7 +99,7 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader) // A quick sanity check -- make sure that the frameID is 4 uppercase Latin1 // characters. Also make sure that there is data in the frame. - if(!frameID.size() == (version < 3 ? 3 : 4) || + if(frameID.size() != (version < 3 ? 3 : 4) || header->frameSize() <= uint(header->dataLengthIndicator() ? 4 : 0) || header->frameSize() > data.size()) { @@ -107,6 +107,17 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader) return 0; } +#ifndef NO_ITUNES_HACKS + if(version == 3 && frameID.size() == 4 && frameID[3] == '\0') { + // iTunes v2.3 tags store v2.2 frames - convert now + frameID = frameID.mid(0, 3); + header->setFrameID(frameID); + header->setVersion(2); + updateFrame(header); + header->setVersion(3); + } +#endif + for(ByteVector::ConstIterator it = frameID.begin(); it != frameID.end(); it++) { if( (*it < 'A' || *it > 'Z') && (*it < '0' || *it > '9') ) { delete header; diff --git a/taglib/ogg/flac/oggflacfile.cpp b/taglib/ogg/flac/oggflacfile.cpp index bf0d337e..53139bba 100644 --- a/taglib/ogg/flac/oggflacfile.cpp +++ b/taglib/ogg/flac/oggflacfile.cpp @@ -72,14 +72,16 @@ Ogg::FLAC::File::File(FileName file, bool readProperties, Properties::ReadStyle propertiesStyle) : Ogg::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } Ogg::FLAC::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : Ogg::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } Ogg::FLAC::File::~File() diff --git a/taglib/ogg/speex/speexfile.cpp b/taglib/ogg/speex/speexfile.cpp index 3a4940a2..8ac86e69 100644 --- a/taglib/ogg/speex/speexfile.cpp +++ b/taglib/ogg/speex/speexfile.cpp @@ -62,14 +62,16 @@ Speex::File::File(FileName file, bool readProperties, Properties::ReadStyle propertiesStyle) : Ogg::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } Speex::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : Ogg::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } Speex::File::~File() diff --git a/taglib/ogg/vorbis/vorbisfile.cpp b/taglib/ogg/vorbis/vorbisfile.cpp index e2eed9e2..82984536 100644 --- a/taglib/ogg/vorbis/vorbisfile.cpp +++ b/taglib/ogg/vorbis/vorbisfile.cpp @@ -67,14 +67,16 @@ Vorbis::File::File(FileName file, bool readProperties, Properties::ReadStyle propertiesStyle) : Ogg::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } Vorbis::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : Ogg::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } Vorbis::File::~File() diff --git a/taglib/s3m/s3mfile.cpp b/taglib/s3m/s3mfile.cpp index 7ffdf910..371340a5 100644 --- a/taglib/s3m/s3mfile.cpp +++ b/taglib/s3m/s3mfile.cpp @@ -47,7 +47,8 @@ S3M::File::File(FileName file, bool readProperties, Mod::FileBase(file), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } S3M::File::File(IOStream *stream, bool readProperties, @@ -55,7 +56,8 @@ S3M::File::File(IOStream *stream, bool readProperties, Mod::FileBase(stream), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } S3M::File::~File() diff --git a/taglib/wavpack/wavpackfile.cpp b/taglib/wavpack/wavpackfile.cpp index 8fe78830..25495662 100644 --- a/taglib/wavpack/wavpackfile.cpp +++ b/taglib/wavpack/wavpackfile.cpp @@ -86,14 +86,16 @@ WavPack::File::File(FileName file, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(file) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } WavPack::File::File(IOStream *stream, bool readProperties, Properties::ReadStyle propertiesStyle) : TagLib::File(stream) { d = new FilePrivate; - read(readProperties, propertiesStyle); + if(isOpen()) + read(readProperties, propertiesStyle); } WavPack::File::~File() diff --git a/taglib/xm/xmfile.cpp b/taglib/xm/xmfile.cpp index c311a06e..d8373a78 100644 --- a/taglib/xm/xmfile.cpp +++ b/taglib/xm/xmfile.cpp @@ -359,7 +359,8 @@ XM::File::File(FileName file, bool readProperties, Mod::FileBase(file), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } XM::File::File(IOStream *stream, bool readProperties, @@ -367,7 +368,8 @@ XM::File::File(IOStream *stream, bool readProperties, Mod::FileBase(stream), d(new FilePrivate(propertiesStyle)) { - read(readProperties); + if(isOpen()) + read(readProperties); } XM::File::~File()