Better function parameter checking.
diff --git a/dlls/msacm/msacm32_main.c b/dlls/msacm/msacm32_main.c
index 6ca97e9..dde962a 100644
--- a/dlls/msacm/msacm32_main.c
+++ b/dlls/msacm/msacm32_main.c
@@ -120,6 +120,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_DRIVERS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
val++;
@@ -131,6 +132,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_CODECS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) &&
@@ -144,6 +146,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) &&
@@ -157,6 +160,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_FILTERS:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) &&
(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) &&
@@ -170,6 +174,7 @@
/* fall through */
case ACM_METRIC_COUNT_LOCAL_DISABLED:
if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
if ((padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid))
val++;
@@ -204,10 +209,17 @@
} else {
return MMSYSERR_INVALHANDLE;
}
+ if (!pMetric) return MMSYSERR_INVALPARAM;
*(LPDWORD)pMetric = val;
break;
case ACM_METRIC_COUNT_HARDWARE:
+ if (hao) return MMSYSERR_INVALHANDLE;
+ if (!pMetric) return MMSYSERR_INVALPARAM;
+ *(LPDWORD)pMetric = 0;
+ FIXME("ACM_METRIC_COUNT_HARDWARE not implemented\n");
+ break;
+
case ACM_METRIC_HARDWARE_WAVE_INPUT:
case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
case ACM_METRIC_MAX_SIZE_FILTER: