libcdio-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Libcdio-devel] [PATCH] fix incorrect parsing of CD-Text with short fiel


From: Leon Merten Lohse
Subject: [Libcdio-devel] [PATCH] fix incorrect parsing of CD-Text with short fields
Date: Thu, 31 Mar 2016 19:08:27 +0200

---
 lib/driver/cdtext.c | 28 ++++++++++++++++------------
 test/cdtext.right   |  5 ++++-
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/lib/driver/cdtext.c b/lib/driver/cdtext.c
index a35c0e8..b73e062 100644
--- a/lib/driver/cdtext.c
+++ b/lib/driver/cdtext.c
@@ -502,6 +502,7 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t 
i_data)
   int           i;
   cdtext_blocksize_t blocksize;
   char          *charset = NULL;
+  uint8_t       cur_track;
 
   memset( buffer, 0, sizeof(buffer) );
 
@@ -624,6 +625,8 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t 
i_data)
     }
 #endif
 
+    cur_track = pack.i_track;
+
     /* read text packs first */
     j = 0;
     switch (pack.type) {
@@ -657,38 +660,39 @@ cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, 
size_t i_data)
 
             switch (pack.type) {
               case CDTEXT_PACK_TITLE:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_TITLE, buffer, pack.i_track, 
charset);
+                cdtext_set(p_cdtext, CDTEXT_FIELD_TITLE, buffer, cur_track, 
charset);
                 break;
               case CDTEXT_PACK_PERFORMER:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_PERFORMER, buffer, 
pack.i_track, charset);
+                cdtext_set(p_cdtext, CDTEXT_FIELD_PERFORMER, buffer, 
cur_track, charset);
                 break;
               case CDTEXT_PACK_SONGWRITER:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_SONGWRITER, buffer, 
pack.i_track, charset);
+                cdtext_set(p_cdtext, CDTEXT_FIELD_SONGWRITER, buffer, 
cur_track, charset);
                 break;
               case CDTEXT_PACK_COMPOSER:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_COMPOSER, buffer, 
pack.i_track, charset);
+                cdtext_set(p_cdtext, CDTEXT_FIELD_COMPOSER, buffer, cur_track, 
charset);
                 break;
               case CDTEXT_PACK_ARRANGER:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_ARRANGER, buffer, 
pack.i_track, charset);
+                cdtext_set(p_cdtext, CDTEXT_FIELD_ARRANGER, buffer, cur_track, 
charset);
                 break;
               case CDTEXT_PACK_MESSAGE:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_MESSAGE, buffer, 
pack.i_track, charset);
+                cdtext_set(p_cdtext, CDTEXT_FIELD_MESSAGE, buffer, cur_track, 
charset);
                 break;
               case CDTEXT_PACK_DISCID:
-                if (pack.i_track == 0)
-                  cdtext_set(p_cdtext, CDTEXT_FIELD_DISCID, buffer, 
pack.i_track, NULL);
+                if (cur_track == 0)
+                  cdtext_set(p_cdtext, CDTEXT_FIELD_DISCID, buffer, cur_track, 
NULL);
                 break;
               case CDTEXT_PACK_GENRE:
-                cdtext_set(p_cdtext, CDTEXT_FIELD_GENRE, buffer, pack.i_track, 
"ASCII");
+                cdtext_set(p_cdtext, CDTEXT_FIELD_GENRE, buffer, cur_track, 
"ASCII");
                 break;
               case CDTEXT_PACK_UPC:
-                if (pack.i_track == 0)
-                  cdtext_set(p_cdtext, CDTEXT_FIELD_UPC_EAN, buffer, 
pack.i_track, "ASCII");
+                if (cur_track == 0)
+                  cdtext_set(p_cdtext, CDTEXT_FIELD_UPC_EAN, buffer, 
cur_track, "ASCII");
                 else
-                  cdtext_set(p_cdtext, CDTEXT_FIELD_ISRC, buffer, 
pack.i_track, "ISO-8859-1");
+                  cdtext_set(p_cdtext, CDTEXT_FIELD_ISRC, buffer, cur_track, 
"ISO-8859-1");
                 break;
             }
             i_buf = 0;
+            ++cur_track;
 
           }
           if (pack.db_chars)
diff --git a/test/cdtext.right b/test/cdtext.right
index 6ddeb7f..8af09a7 100644
--- a/test/cdtext.right
+++ b/test/cdtext.right
@@ -29,7 +29,7 @@ CD-TEXT for Track  1:
        TITLE: Song of Joy
        PERFORMER: Felix and The Purrs
        SONGWRITER: Friedrich Schiller
-       COMPOSER: unknown
+       COMPOSER: Ludwig van Beethoven
        MESSAGE: Fritz and Louie once were punks
        ARRANGER: Tom Cat
        ISRC: XYBLG1101234
@@ -37,7 +37,9 @@ CD-TEXT for Track  2:
        TITLE: Humpty Dumpty
        PERFORMER: Catwalk Beauties
        SONGWRITER: Mother Goose
+       COMPOSER: unknown
        MESSAGE: Pluck the goose
+       ARRANGER: Tom Cat
        ISRC: XYBLG1100005
 CD-TEXT for Track  3:
        TITLE: Mee Owwww
@@ -73,6 +75,7 @@ CD-TEXT for Track  2:
        SONGWRITER: Mutter Gans
        COMPOSER: unbekannt
        MESSAGE: Rupft die Gans
+       ARRANGER: Tom Cat
        ISRC: XYBLG1100005
 CD-TEXT for Track  3:
        TITLE: Mie auu
-- 
2.7.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]