Reject invalid bit per sample values

Francois Gouget fgouget at codeweavers.com
Sat Apr 24 18:03:17 CDT 2004


Our code only supports 8 and 16 bit sound. This is the case in the sound 
drivers like wineoss where we either pass AFMT_U8 or AFMT_S16_LE to OSS, 
but also in our wavemapper which only supports these two formats.

So we should reject any other bit per sample value. Also this is what 
Windows does on the systems I have access to (Win95, Win98 and WinXP).

Changelog:

  * dlls/winmm/winealsa/audio.c
    dlls/winmm/winearts/audio.c
    dlls/winmm/wineaudioio/audio.c
    dlls/winmm/winejack/audio.c
    dlls/winmm/winenas/audio.c
    dlls/winmm/wineoss/audio.c

    Francois Gouget <fgouget at codeweavers.com>
    We only support 8 and 16 bit sound so we should reject the other 
formats.


-- 
Francois Gouget
fgouget at codeweavers.com

-------------- next part --------------
Index: dlls/winmm/winealsa/audio.c
===================================================================
RCS file: /var/cvs/wine/dlls/winmm/winealsa/audio.c,v
retrieving revision 1.36
diff -u -r1.36 audio.c
--- a/dlls/winmm/winealsa/audio.c	19 Apr 2004 23:06:48 -0000	1.36
+++ b/dlls/winmm/winealsa/audio.c	20 Apr 2004 10:46:47 -0000
@@ -1436,7 +1441,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
@@ -2920,7 +2928,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
Index: dlls/winmm/winearts/audio.c
===================================================================
RCS file: /var/cvs/wine/dlls/winmm/winearts/audio.c,v
retrieving revision 1.15
diff -u -r1.15 audio.c
--- a/dlls/winmm/winearts/audio.c	9 Jan 2004 20:08:48 -0000	1.15
+++ b/dlls/winmm/winearts/audio.c	16 Apr 2004 22:44:12 -0000
@@ -1104,7 +1104,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
@@ -1785,7 +1786,8 @@
     /* only PCM format is support so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
Index: dlls/winmm/wineaudioio/audio.c
===================================================================
RCS file: /var/cvs/wine/dlls/winmm/wineaudioio/audio.c,v
retrieving revision 1.10
diff -u -r1.10 audio.c
--- a/dlls/winmm/wineaudioio/audio.c	14 Jan 2004 05:39:05 -0000	1.10
+++ b/dlls/winmm/wineaudioio/audio.c	16 Apr 2004 22:49:15 -0000
@@ -772,7 +772,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
@@ -1974,7 +1975,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
Index: dlls/winmm/winejack/audio.c
===================================================================
RCS file: /var/cvs/wine/dlls/winmm/winejack/audio.c,v
retrieving revision 1.8
diff -u -r1.8 audio.c
--- a/dlls/winmm/winejack/audio.c	20 Feb 2004 20:19:23 -0000	1.8
+++ b/dlls/winmm/winejack/audio.c	17 Apr 2004 11:57:40 -0000
@@ -1241,7 +1248,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
       lpDesc->lpFormat->nChannels == 0 ||
-      lpDesc->lpFormat->nSamplesPerSec == 0)
+      lpDesc->lpFormat->nSamplesPerSec == 0 ||
+      (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16))
     {
       WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
        lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
@@ -2113,7 +2121,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
       lpDesc->lpFormat->nChannels == 0 ||
-      lpDesc->lpFormat->nSamplesPerSec == 0)
+      lpDesc->lpFormat->nSamplesPerSec == 0 ||
+      (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16))
     {
       WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
        lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
Index: dlls/winmm/winenas/audio.c
===================================================================
RCS file: /var/cvs/wine/dlls/winmm/winenas/audio.c,v
retrieving revision 1.12
diff -u -r1.12 audio.c
--- a/dlls/winmm/winenas/audio.c	12 Dec 2003 05:55:26 -0000	1.12
+++ b/dlls/winmm/winenas/audio.c	16 Apr 2004 22:49:40 -0000
@@ -882,7 +882,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
Index: dlls/winmm/wineoss/audio.c
===================================================================
RCS file: /var/cvs/wine/dlls/winmm/wineoss/audio.c,v
retrieving revision 1.125
diff -u -r1.125 audio.c
--- a/dlls/winmm/wineoss/audio.c	12 Apr 2004 23:12:17 -0000	1.125
+++ b/dlls/winmm/wineoss/audio.c	17 Apr 2004 13:41:23 -0000
@@ -1665,7 +1665,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);
@@ -3507,7 +3508,8 @@
     /* only PCM format is supported so far... */
     if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
 	lpDesc->lpFormat->nChannels == 0 ||
-	lpDesc->lpFormat->nSamplesPerSec == 0) {
+	lpDesc->lpFormat->nSamplesPerSec == 0 ||
+        (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
 	WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%ld !\n",
 	     lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
 	     lpDesc->lpFormat->nSamplesPerSec);


More information about the wine-patches mailing list