diff options
author | Wonsik Kim <wonsik@google.com> | 2015-08-28 16:21:13 +0900 |
---|---|---|
committer | Wonsik Kim <wonsik@google.com> | 2015-08-31 17:03:12 +0900 |
commit | 153b3609bfd6f65c0a4ae0e7704495bfa3cfc347 (patch) | |
tree | 49b895572c8a4f1d47add356de5e5f37425888f7 /arm-wt-22k | |
parent | 0d434d064d9299aa458f7bfbbbb448aa1f34673c (diff) | |
download | android_external_sonivox-153b3609bfd6f65c0a4ae0e7704495bfa3cfc347.tar.gz android_external_sonivox-153b3609bfd6f65c0a4ae0e7704495bfa3cfc347.tar.bz2 android_external_sonivox-153b3609bfd6f65c0a4ae0e7704495bfa3cfc347.zip |
Fix S_SMF_DATA.numStreams being non-zero while streams is uninitialized
Let S_SMF_DATA.numStreams set after S_SMF_DATA.streams is
initialized.
Bug: 23528803
Change-Id: Ie45156a03ec6700a9b0971626eb08cb5c9cdab6e
Diffstat (limited to 'arm-wt-22k')
-rw-r--r-- | arm-wt-22k/lib_src/eas_smf.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/arm-wt-22k/lib_src/eas_smf.c b/arm-wt-22k/lib_src/eas_smf.c index 7b0bdd8..8b54b8e 100644 --- a/arm-wt-22k/lib_src/eas_smf.c +++ b/arm-wt-22k/lib_src/eas_smf.c @@ -1049,11 +1049,16 @@ EAS_RESULT SMF_ParseHeader (EAS_HW_DATA_HANDLE hwInstData, S_SMF_DATA *pSMFData) EAS_RESULT result; EAS_I32 i; EAS_U16 division; + EAS_U16 numStreams; EAS_U32 chunkSize; EAS_U32 chunkStart; EAS_U32 temp; EAS_U32 ticks; + /* explicitly set numStreams to 0. It will later be used by SMF_Close to + * determine whether we have valid streams or not. */ + pSMFData->numStreams = 0; + /* rewind the file and find the end of the header chunk */ if ((result = EAS_HWFileSeek(hwInstData, pSMFData->fileHandle, pSMFData->fileOffset + SMF_OFS_HEADER_SIZE)) != EAS_SUCCESS) goto ReadError; @@ -1063,15 +1068,15 @@ EAS_RESULT SMF_ParseHeader (EAS_HW_DATA_HANDLE hwInstData, S_SMF_DATA *pSMFData) /* determine the number of tracks */ if ((result = EAS_HWFileSeek(hwInstData, pSMFData->fileHandle, pSMFData->fileOffset + SMF_OFS_NUM_TRACKS)) != EAS_SUCCESS) goto ReadError; - if ((result = EAS_HWGetWord(hwInstData, pSMFData->fileHandle, &pSMFData->numStreams, EAS_TRUE)) != EAS_SUCCESS) + if ((result = EAS_HWGetWord(hwInstData, pSMFData->fileHandle, &numStreams, EAS_TRUE)) != EAS_SUCCESS) goto ReadError; /* limit the number of tracks */ - if (pSMFData->numStreams > MAX_SMF_STREAMS) + if (numStreams > MAX_SMF_STREAMS) { - { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "SMF file contains %u tracks, playing %d tracks\n", pSMFData->numStreams, MAX_SMF_STREAMS); */ } - pSMFData->numStreams = MAX_SMF_STREAMS; - } else if (pSMFData->numStreams == 0) + { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "SMF file contains %u tracks, playing %d tracks\n", numStreams, MAX_SMF_STREAMS); */ } + numStreams = MAX_SMF_STREAMS; + } else if (numStreams == 0) { /* avoid 0 sized allocation */ return EAS_ERROR_PARAMETER_RANGE; @@ -1092,13 +1097,14 @@ EAS_RESULT SMF_ParseHeader (EAS_HW_DATA_HANDLE hwInstData, S_SMF_DATA *pSMFData) /* dynamic memory allocation, allocate memory for streams */ if (pSMFData->streams == NULL) { - pSMFData->streams = EAS_HWMalloc(hwInstData,sizeof(S_SMF_STREAM) * pSMFData->numStreams); + pSMFData->streams = EAS_HWMalloc(hwInstData,sizeof(S_SMF_STREAM) * numStreams); if (pSMFData->streams == NULL) return EAS_ERROR_MALLOC_FAILED; /* zero the memory to insure complete initialization */ - EAS_HWMemSet((void *)(pSMFData->streams), 0, sizeof(S_SMF_STREAM) * pSMFData->numStreams); + EAS_HWMemSet((void *)(pSMFData->streams), 0, sizeof(S_SMF_STREAM) * numStreams); } + pSMFData->numStreams = numStreams; /* find the start of each track */ chunkStart = (EAS_U32) pSMFData->fileOffset; |