1From eb9ded1206f18f2c319157337edea2533a40bea6 Mon Sep 17 00:00:00 2001
2From: "Stephen F. Booth" <me@sbooth.org>
3Date: Sun, 23 Jul 2017 10:11:09 -0400
4Subject: [PATCH] Don't assume TDRC is an instance of TextIdentificationFrame
5
6If TDRC is encrypted, FrameFactory::createFrame() returns UnknownFrame
7which causes problems in rebuildAggregateFrames() when it is assumed
8that TDRC is a TextIdentificationFrame
9[Retrieved from:
10https://github.com/taglib/taglib/pull/831/commits/eb9ded1206f18f2c319157337edea2533a40bea6]
11Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
12---
13 taglib/mpeg/id3v2/id3v2framefactory.cpp | 5 +++--
14 1 file changed, 3 insertions(+), 2 deletions(-)
15
16diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp
17index 759a9b7be..9347ab869 100644
18--- a/taglib/mpeg/id3v2/id3v2framefactory.cpp
19+++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp
20@@ -334,10 +334,11 @@ void FrameFactory::rebuildAggregateFrames(ID3v2::Tag *tag) const
21      tag->frameList("TDAT").size() == 1)
22   {
23     TextIdentificationFrame *tdrc =
24-      static_cast<TextIdentificationFrame *>(tag->frameList("TDRC").front());
25+      dynamic_cast<TextIdentificationFrame *>(tag->frameList("TDRC").front());
26     UnknownFrame *tdat = static_cast<UnknownFrame *>(tag->frameList("TDAT").front());
27
28-    if(tdrc->fieldList().size() == 1 &&
29+    if(tdrc &&
30+       tdrc->fieldList().size() == 1 &&
31        tdrc->fieldList().front().size() == 4 &&
32        tdat->data().size() >= 5)
33     {
34