X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=mp3_afh.c;h=2506b95e8799780c5c5b26adf723450f63d41c91;hb=4ce5e90617837e558a35e411ae66eaf16a9e73f8;hp=0ca742cb1ac46e0208f535d122db7502c3b6d5f3;hpb=abfb661f35e99e99c09a94d84839356d905af080;p=paraslash.git diff --git a/mp3_afh.c b/mp3_afh.c index 0ca742cb..2506b95e 100644 --- a/mp3_afh.c +++ b/mp3_afh.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2014 Andre Noll + * Copyright (C) 2003 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -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;