aboutsummaryrefslogtreecommitdiffstats
path: root/taglib
diff options
context:
space:
mode:
authorStephen F. Booth <me@sbooth.org>2017-09-30 10:15:41 -0500
committerGitHub <noreply@github.com>2017-09-30 10:15:41 -0500
commitcb9f07d9dcd791b63e622da43f7b232adaec0a9a (patch)
treea1ff82164c82c9d00519a4a29fc97165974727f7 /taglib
parent0b583bafd09c29695af9e84f7e7182280411a78e (diff)
Don't assume TDRC is an instance of TextIdentificationFrame (#831)
If TDRC is encrypted, FrameFactory::createFrame() returns UnknownFrame which causes problems in rebuildAggregateFrames() when it is assumed that TDRC is a TextIdentificationFrame
Diffstat (limited to 'taglib')
-rw-r--r--taglib/mpeg/id3v2/id3v2framefactory.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp
index 759a9b7b..9347ab86 100644
--- a/taglib/mpeg/id3v2/id3v2framefactory.cpp
+++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp
@@ -334,10 +334,11 @@ void FrameFactory::rebuildAggregateFrames(ID3v2::Tag *tag) const
tag->frameList("TDAT").size() == 1)
{
TextIdentificationFrame *tdrc =
- static_cast<TextIdentificationFrame *>(tag->frameList("TDRC").front());
+ dynamic_cast<TextIdentificationFrame *>(tag->frameList("TDRC").front());
UnknownFrame *tdat = static_cast<UnknownFrame *>(tag->frameList("TDAT").front());
- if(tdrc->fieldList().size() == 1 &&
+ if(tdrc &&
+ tdrc->fieldList().size() == 1 &&
tdrc->fieldList().front().size() == 4 &&
tdat->data().size() >= 5)
{