]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - mp3_afh.c
afh: Fix fd leak.
[paraslash.git] / mp3_afh.c
index cc3f49ffbb2b704af955e77e944a72250d3d309c..2506b95e8799780c5c5b26adf723450f63d41c91 100644 (file)
--- a/mp3_afh.c
+++ b/mp3_afh.c
@@ -126,9 +126,19 @@ static char *get_strings(struct id3_frame *fr)
 static void mp3_get_id3(__a_unused unsigned char *map,
                __a_unused size_t numbytes, int fd, struct taginfo *tags)
 {
-       int i;
+       int i, new_fd;
        struct id3_tag *id3_t;
-       struct id3_file *id3_f = id3_file_fdopen(fd, ID3_FILE_MODE_READONLY);
+       struct id3_file *id3_f;
+
+       /*
+        * We are not supposed to close fd, but to avoid memory leaks we must
+        * call id3_file_close() on the id3_file after we are done. As
+        * id3_file_close() closes fd, we first create a copy for libid3tag.
+        */
+       new_fd = dup(fd);
+       if (new_fd < 0)
+               return;
+       id3_f = id3_file_fdopen(new_fd, ID3_FILE_MODE_READONLY);
 
        if (!id3_f)
                return;