On Tue, Jun 06, 2017 at 03:14:51PM -0500, Zebediah Figura wrote:
@@ -376,10 +377,13 @@ MMRESULT WINAPI acmFormatDetailsA(HACMDRIVER had, PACMFORMATDETAILSA pafd, ACMFORMATDETAILSW afdw; MMRESULT mmr;
- memset(&afdw, 0, sizeof(afdw)); + if (!pafd) + return MMSYSERR_INVALPARAM; + afdw.cbStruct = sizeof(afdw); afdw.dwFormatIndex = pafd->dwFormatIndex; afdw.dwFormatTag = pafd->dwFormatTag; + afdw.fdwSupport = pafd->fdwSupport; afdw.pwfx = pafd->pwfx; afdw.cbwfx = pafd->cbwfx;
Like before, is there a reason to no longer zero this struct?
@@ -430,7 +447,14 @@ MMRESULT WINAPI acmFormatDetailsW(HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD } break; case ACM_FORMATDETAILSF_INDEX: - /* should check pafd->dwFormatIndex < aftd->cStandardFormats */ + aftd.cbStruct = sizeof(aftd); + aftd.dwFormatTag = pafd->dwFormatTag; + acmFormatTagDetailsW(had, &aftd, ACM_FORMATTAGDETAILSF_FORMATTAG); + if (pafd->dwFormatIndex >= aftd.cStandardFormats) + { + mmr = MMSYSERR_INVALPARAM; + break; + }
Please add error checking for acmFormatTagDetailsW. The next two patches in the sequence fail on the test bot, so I stopped reviewing here. It's common for APIs to return different error codes on different Windows versions, so you likely just need to accept either code in your ok() checks. Andrew