X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=mp3_afh.c;h=2506b95e8799780c5c5b26adf723450f63d41c91;hb=4f112bad9a4b61b8e1ce54cf2cb24285d9c81a6b;hp=251574a528d38a665b0ab67c88c213f6e27b5e41;hpb=650e5374914c1eb725ce7d2a720611bec22112bc;p=paraslash.git diff --git a/mp3_afh.c b/mp3_afh.c index 251574a5..2506b95e 100644 --- a/mp3_afh.c +++ b/mp3_afh.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2013 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;