nsub: fix a bug in read_lrc
authorNiki Roo <niki@nikiroo.be>
Thu, 26 May 2022 15:07:20 +0000 (17:07 +0200)
committerNiki Roo <niki@nikiroo.be>
Thu, 26 May 2022 15:07:20 +0000 (17:07 +0200)
src/nsub/nsub.c
src/nsub/nsub.h
src/nsub/nsub_read_lrc.c

index 0ea748f52978574ae96629dc1f5fe8a53c809da8..6b9b72890e480ade941be905a0fac0ebdfdd6b71 100644 (file)
@@ -102,6 +102,14 @@ void song_add_meta(song_t *song, char *key, char *value) {
        meta->value = value ? strdup(value) : NULL;
 }
 
+void uninit_lyric(lyric_t *lyric) {
+       if (!lyric)
+               return;
+
+       free(lyric->name);
+       free(lyric->text);
+}
+
 song_t *nsub_read(FILE *in, NSUB_FORMAT fmt) {
        song_t *song = NULL;
        cstring_t *line = NULL;
index 170443723200aebf006ce66ddef2591f09373af4..2a6bd427b2c611e3b5b79470c11b2900e6a2b8a6 100644 (file)
@@ -134,7 +134,7 @@ typedef struct {
        char *lang;
 } song_t;
 
-/* Song */
+/* Song & Lyric */
 
 song_t *new_song();
 void free_song(song_t *song);
@@ -143,6 +143,7 @@ void song_add_empty(song_t *song);
 void song_add_comment(song_t *song, char *comment);
 void song_add_lyric(song_t *song, int start, int stop, char *name, char *text);
 void song_add_meta(song_t *song, char *key, char *value);
+void uninit_lyric(lyric_t *lyric);
 
 /* Read */
 
index 796424c7ab6d56ffdfd5ff02dc1834b6aba60201..d9360caf0aaf4cf8dec8c4a210c10c3c23103921 100644 (file)
@@ -53,8 +53,8 @@ int nsub_read_lrc(song_t *song, char *line) {
                int start = lrc_millisec(line);
                char *name = NULL;
 
-               array_loop(song->lyrics, lyric, lyric_t)
                {
+                       lyric_t *lyric = array_last(song->lyrics);
                        if (lyric->type == NSUB_LYRIC)
                                lyric->stop = start;
                        if (lyric->type == NSUB_COMMENT)
@@ -65,15 +65,15 @@ int nsub_read_lrc(song_t *song, char *line) {
                                name = NULL;
                }
 
-               int text_offset = end + 1;
+               int text_offset = end + 2;
                while (line[text_offset] == ' ')
                        text_offset++;
 
                if (line[text_offset]) {
                        if (name) {
+                               lyric_t *tmp = array_pop(song->lyrics);
+                               uninit_lyric(tmp);
                                song->current_num--;
-                               // TODO: memory leak?
-                               array_cut_at(song->lyrics, array_count(song->lyrics) - 1);
                        }
                        song_add_lyric(song, start, start + 5000, name, line + text_offset);
                } else {