From a965c0d917b2b2ef9dbd1c773098e3de079be4fd Mon Sep 17 00:00:00 2001 From: gbhakteX Date: Thu, 26 Jul 2012 18:53:25 +0530 Subject: There is fd leak in sonivox lib when try open any media file > 2GB (MIDI parser memory leak) Midi Parser support only 32 bit file operations and thus files of size less than 2 GB. When file open is called on the Midi parser, for files more than 2GB, internal seek operation fails resulting in the non-closure of the opened file. This resulted in the memory leak of the opened file descriptor. This is fixed by closing the opened file descriptor on failed cases. Change-Id: Ie9f53275206e2b4616d1cfc41c12b90544895548 Author: Muthukumar Kandasamy Signed-off-by: Muthukumar Kandasamy Signed-off-by: Gurudatta Bhakte Singed-off-by: Shuo Gao Signed-off-by: Bruce Beare Signed-off-by: Jack Ren Author-tracking-BZ: 39292 --- arm-wt-22k/lib_src/eas_public.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/arm-wt-22k/lib_src/eas_public.c b/arm-wt-22k/lib_src/eas_public.c index 8195b98..51ac423 100644 --- a/arm-wt-22k/lib_src/eas_public.c +++ b/arm-wt-22k/lib_src/eas_public.c @@ -630,8 +630,11 @@ EAS_PUBLIC EAS_RESULT EAS_OpenFile (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR l /* allocate a stream */ if ((streamNum = EAS_AllocateStream(pEASData)) < 0) + { + /* Closing the opened file as stream allocation failed */ + EAS_HWCloseFile(pEASData->hwInstData, fileHandle); return EAS_ERROR_MAX_STREAMS_OPEN; - + } /* check Configuration Module for file parsers */ pParserModule = NULL; *ppStream = NULL; @@ -645,6 +648,9 @@ EAS_PUBLIC EAS_RESULT EAS_OpenFile (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR l /* see if this parser recognizes it */ if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) { + /* Closing the opened file as file type check failed */ + EAS_HWCloseFile(pEASData->hwInstData, fileHandle); + { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } return result; } @@ -661,7 +667,12 @@ EAS_PUBLIC EAS_RESULT EAS_OpenFile (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR l /* rewind the file for the next parser */ if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, 0L)) != EAS_SUCCESS) + { + /* Closing the opened file as file seek failed */ + EAS_HWCloseFile(pEASData->hwInstData, fileHandle); + return result; + } } /* no parser was able to recognize the file, close it and return an error */ -- cgit v1.2.3