Skip to content

Commit 114d169

Browse files
committed
WIP: implementing new parameter validation
1 parent 43eae60 commit 114d169

File tree

14 files changed

+708
-788
lines changed

14 files changed

+708
-788
lines changed

src/audio/SDL_audio.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,11 @@ int SDL_GetNumAudioDrivers(void)
136136

137137
const char *SDL_GetAudioDriver(int index)
138138
{
139-
if (index >= 0 && index < SDL_GetNumAudioDrivers()) {
140-
return deduped_bootstrap[index]->name;
139+
CHECK_PARAM(index < 0 || index >= SDL_GetNumAudioDrivers()) {
140+
SDL_InvalidParamError("index");
141+
return NULL;
141142
}
142-
SDL_InvalidParamError("index");
143-
return NULL;
143+
return deduped_bootstrap[index]->name;
144144
}
145145

146146
const char *SDL_GetCurrentAudioDriver(void)
@@ -1576,7 +1576,7 @@ const char *SDL_GetAudioDeviceName(SDL_AudioDeviceID devid)
15761576

15771577
bool SDL_GetAudioDeviceFormat(SDL_AudioDeviceID devid, SDL_AudioSpec *spec, int *sample_frames)
15781578
{
1579-
if (!spec) {
1579+
CHECK_PARAM(!spec) {
15801580
return SDL_InvalidParamError("spec");
15811581
}
15821582

@@ -1937,7 +1937,7 @@ float SDL_GetAudioDeviceGain(SDL_AudioDeviceID devid)
19371937

19381938
bool SDL_SetAudioDeviceGain(SDL_AudioDeviceID devid, float gain)
19391939
{
1940-
if (gain < 0.0f) {
1940+
CHECK_PARAM(gain < 0.0f) {
19411941
return SDL_InvalidParamError("gain");
19421942
}
19431943

@@ -1986,11 +1986,15 @@ bool SDL_BindAudioStreams(SDL_AudioDeviceID devid, SDL_AudioStream * const *stre
19861986

19871987
if (num_streams == 0) {
19881988
return true; // nothing to do
1989-
} else if (num_streams < 0) {
1989+
}
1990+
1991+
CHECK_PARAM(num_streams < 0) {
19901992
return SDL_InvalidParamError("num_streams");
1991-
} else if (!streams) {
1993+
}
1994+
CHECK_PARAM(!streams) {
19921995
return SDL_InvalidParamError("streams");
1993-
} else if (SDL_IsAudioDevicePhysical(devid)) {
1996+
}
1997+
CHECK_PARAM(SDL_IsAudioDevicePhysical(devid)) {
19941998
return SDL_SetError("Audio streams are bound to device ids from SDL_OpenAudioDevice, not raw physical devices");
19951999
}
19962000

@@ -2150,7 +2154,7 @@ SDL_AudioDeviceID SDL_GetAudioStreamDevice(SDL_AudioStream *stream)
21502154
{
21512155
SDL_AudioDeviceID result = 0;
21522156

2153-
if (!stream) {
2157+
CHECK_PARAM(!stream) {
21542158
SDL_InvalidParamError("stream");
21552159
return 0;
21562160
}

src/audio/SDL_audiocvt.c

Lines changed: 72 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,11 @@ SDL_AudioStream *SDL_CreateAudioStream(const SDL_AudioSpec *src_spec, const SDL_
474474

475475
SDL_PropertiesID SDL_GetAudioStreamProperties(SDL_AudioStream *stream)
476476
{
477-
if (!stream) {
477+
CHECK_PARAM(!stream) {
478478
SDL_InvalidParamError("stream");
479479
return 0;
480480
}
481+
481482
SDL_LockMutex(stream->lock);
482483
if (stream->props == 0) {
483484
stream->props = SDL_CreateProperties();
@@ -488,9 +489,10 @@ SDL_PropertiesID SDL_GetAudioStreamProperties(SDL_AudioStream *stream)
488489

489490
bool SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata)
490491
{
491-
if (!stream) {
492+
CHECK_PARAM(!stream) {
492493
return SDL_InvalidParamError("stream");
493494
}
495+
494496
SDL_LockMutex(stream->lock);
495497
stream->get_callback = callback;
496498
stream->get_callback_userdata = userdata;
@@ -500,9 +502,10 @@ bool SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamCallb
500502

501503
bool SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata)
502504
{
503-
if (!stream) {
505+
CHECK_PARAM(!stream) {
504506
return SDL_InvalidParamError("stream");
505507
}
508+
506509
SDL_LockMutex(stream->lock);
507510
stream->put_callback = callback;
508511
stream->put_callback_userdata = userdata;
@@ -512,25 +515,27 @@ bool SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamCallb
512515

513516
bool SDL_LockAudioStream(SDL_AudioStream *stream)
514517
{
515-
if (!stream) {
518+
CHECK_PARAM(!stream) {
516519
return SDL_InvalidParamError("stream");
517520
}
521+
518522
SDL_LockMutex(stream->lock);
519523
return true;
520524
}
521525

522526
bool SDL_UnlockAudioStream(SDL_AudioStream *stream)
523527
{
524-
if (!stream) {
528+
CHECK_PARAM(!stream) {
525529
return SDL_InvalidParamError("stream");
526530
}
531+
527532
SDL_UnlockMutex(stream->lock);
528533
return true;
529534
}
530535

531536
bool SDL_GetAudioStreamFormat(SDL_AudioStream *stream, SDL_AudioSpec *src_spec, SDL_AudioSpec *dst_spec)
532537
{
533-
if (!stream) {
538+
CHECK_PARAM(!stream) {
534539
if (src_spec) {
535540
SDL_zerop(src_spec);
536541
}
@@ -560,7 +565,7 @@ bool SDL_GetAudioStreamFormat(SDL_AudioStream *stream, SDL_AudioSpec *src_spec,
560565

561566
bool SDL_SetAudioStreamFormat(SDL_AudioStream *stream, const SDL_AudioSpec *src_spec, const SDL_AudioSpec *dst_spec)
562567
{
563-
if (!stream) {
568+
CHECK_PARAM(!stream) {
564569
return SDL_InvalidParamError("stream");
565570
}
566571

@@ -569,21 +574,25 @@ bool SDL_SetAudioStreamFormat(SDL_AudioStream *stream, const SDL_AudioSpec *src_
569574
// like 196608000Hz. File a bug. :P
570575

571576
if (src_spec) {
572-
if (!SDL_IsSupportedAudioFormat(src_spec->format)) {
577+
CHECK_PARAM(!SDL_IsSupportedAudioFormat(src_spec->format)) {
573578
return SDL_InvalidParamError("src_spec->format");
574-
} else if (!SDL_IsSupportedChannelCount(src_spec->channels)) {
579+
}
580+
CHECK_PARAM(!SDL_IsSupportedChannelCount(src_spec->channels)) {
575581
return SDL_InvalidParamError("src_spec->channels");
576-
} else if (src_spec->freq <= 0) {
582+
}
583+
CHECK_PARAM(src_spec->freq <= 0) {
577584
return SDL_InvalidParamError("src_spec->freq");
578585
}
579586
}
580587

581588
if (dst_spec) {
582-
if (!SDL_IsSupportedAudioFormat(dst_spec->format)) {
589+
CHECK_PARAM(!SDL_IsSupportedAudioFormat(dst_spec->format)) {
583590
return SDL_InvalidParamError("dst_spec->format");
584-
} else if (!SDL_IsSupportedChannelCount(dst_spec->channels)) {
591+
}
592+
CHECK_PARAM(!SDL_IsSupportedChannelCount(dst_spec->channels)) {
585593
return SDL_InvalidParamError("dst_spec->channels");
586-
} else if (dst_spec->freq <= 0) {
594+
}
595+
CHECK_PARAM(dst_spec->freq <= 0) {
587596
return SDL_InvalidParamError("dst_spec->freq");
588597
}
589598
}
@@ -622,7 +631,7 @@ bool SDL_SetAudioStreamFormat(SDL_AudioStream *stream, const SDL_AudioSpec *src_
622631

623632
bool SetAudioStreamChannelMap(SDL_AudioStream *stream, const SDL_AudioSpec *spec, int **stream_chmap, const int *chmap, int channels, int isinput)
624633
{
625-
if (!stream) {
634+
CHECK_PARAM(!stream) {
626635
return SDL_InvalidParamError("stream");
627636
}
628637

@@ -708,7 +717,7 @@ int *SDL_GetAudioStreamOutputChannelMap(SDL_AudioStream *stream, int *count)
708717

709718
float SDL_GetAudioStreamFrequencyRatio(SDL_AudioStream *stream)
710719
{
711-
if (!stream) {
720+
CHECK_PARAM(!stream) {
712721
SDL_InvalidParamError("stream");
713722
return 0.0f;
714723
}
@@ -722,7 +731,7 @@ float SDL_GetAudioStreamFrequencyRatio(SDL_AudioStream *stream)
722731

723732
bool SDL_SetAudioStreamFrequencyRatio(SDL_AudioStream *stream, float freq_ratio)
724733
{
725-
if (!stream) {
734+
CHECK_PARAM(!stream) {
726735
return SDL_InvalidParamError("stream");
727736
}
728737

@@ -745,7 +754,7 @@ bool SDL_SetAudioStreamFrequencyRatio(SDL_AudioStream *stream, float freq_ratio)
745754

746755
float SDL_GetAudioStreamGain(SDL_AudioStream *stream)
747756
{
748-
if (!stream) {
757+
CHECK_PARAM(!stream) {
749758
SDL_InvalidParamError("stream");
750759
return -1.0f;
751760
}
@@ -759,9 +768,10 @@ float SDL_GetAudioStreamGain(SDL_AudioStream *stream)
759768

760769
bool SDL_SetAudioStreamGain(SDL_AudioStream *stream, float gain)
761770
{
762-
if (!stream) {
771+
CHECK_PARAM(!stream) {
763772
return SDL_InvalidParamError("stream");
764-
} else if (gain < 0.0f) {
773+
}
774+
CHECK_PARAM(gain < 0.0f) {
765775
return SDL_InvalidParamError("gain");
766776
}
767777

@@ -847,13 +857,17 @@ static void SDLCALL FreeAllocatedAudioBuffer(void *userdata, const void *buf, in
847857

848858
bool SDL_PutAudioStreamData(SDL_AudioStream *stream, const void *buf, int len)
849859
{
850-
if (!stream) {
860+
CHECK_PARAM(!stream) {
851861
return SDL_InvalidParamError("stream");
852-
} else if (!buf) {
862+
}
863+
CHECK_PARAM(!buf) {
853864
return SDL_InvalidParamError("buf");
854-
} else if (len < 0) {
865+
}
866+
CHECK_PARAM(len < 0) {
855867
return SDL_InvalidParamError("len");
856-
} else if (len == 0) {
868+
}
869+
870+
if (len == 0) {
857871
return true; // nothing to do.
858872
}
859873

@@ -965,13 +979,17 @@ static void InterleaveAudioChannels(void *output, const void * const *channel_bu
965979

966980
bool SDL_PutAudioStreamPlanarData(SDL_AudioStream *stream, const void * const *channel_buffers, int num_channels, int num_samples)
967981
{
968-
if (!stream) {
982+
CHECK_PARAM(!stream) {
969983
return SDL_InvalidParamError("stream");
970-
} else if (!channel_buffers) {
984+
}
985+
CHECK_PARAM(!channel_buffers) {
971986
return SDL_InvalidParamError("channel_buffers");
972-
} else if (num_samples < 0) {
987+
}
988+
CHECK_PARAM(num_samples < 0) {
973989
return SDL_InvalidParamError("num_samples");
974-
} else if (num_samples == 0) {
990+
}
991+
992+
if (num_samples == 0) {
975993
return true; // nothing to do.
976994
}
977995

@@ -1039,13 +1057,17 @@ static void SDLCALL DontFreeThisAudioBuffer(void *userdata, const void *buf, int
10391057

10401058
bool SDL_PutAudioStreamDataNoCopy(SDL_AudioStream *stream, const void *buf, int len, SDL_AudioStreamDataCompleteCallback callback, void *userdata)
10411059
{
1042-
if (!stream) {
1060+
CHECK_PARAM(!stream) {
10431061
return SDL_InvalidParamError("stream");
1044-
} else if (!buf) {
1062+
}
1063+
CHECK_PARAM(!buf) {
10451064
return SDL_InvalidParamError("buf");
1046-
} else if (len < 0) {
1065+
}
1066+
CHECK_PARAM(len < 0) {
10471067
return SDL_InvalidParamError("len");
1048-
} else if (len == 0) {
1068+
}
1069+
1070+
if (len == 0) {
10491071
if (callback) {
10501072
callback(userdata, buf, len);
10511073
}
@@ -1057,7 +1079,7 @@ bool SDL_PutAudioStreamDataNoCopy(SDL_AudioStream *stream, const void *buf, int
10571079

10581080
bool SDL_FlushAudioStream(SDL_AudioStream *stream)
10591081
{
1060-
if (!stream) {
1082+
CHECK_PARAM(!stream) {
10611083
return SDL_InvalidParamError("stream");
10621084
}
10631085

@@ -1320,16 +1342,20 @@ int SDL_GetAudioStreamDataAdjustGain(SDL_AudioStream *stream, void *voidbuf, int
13201342
SDL_Log("AUDIOSTREAM: want to get %d converted bytes", len);
13211343
#endif
13221344

1323-
if (!stream) {
1345+
CHECK_PARAM(!stream) {
13241346
SDL_InvalidParamError("stream");
13251347
return -1;
1326-
} else if (!buf) {
1348+
}
1349+
CHECK_PARAM(!buf) {
13271350
SDL_InvalidParamError("buf");
13281351
return -1;
1329-
} else if (len < 0) {
1352+
}
1353+
CHECK_PARAM(len < 0) {
13301354
SDL_InvalidParamError("len");
13311355
return -1;
1332-
} else if (len == 0) {
1356+
}
1357+
1358+
if (len == 0) {
13331359
return 0; // nothing to do.
13341360
}
13351361

@@ -1427,7 +1453,7 @@ int SDL_GetAudioStreamData(SDL_AudioStream *stream, void *voidbuf, int len)
14271453
// number of converted/resampled bytes available for output
14281454
int SDL_GetAudioStreamAvailable(SDL_AudioStream *stream)
14291455
{
1430-
if (!stream) {
1456+
CHECK_PARAM(!stream) {
14311457
SDL_InvalidParamError("stream");
14321458
return -1;
14331459
}
@@ -1453,7 +1479,7 @@ int SDL_GetAudioStreamAvailable(SDL_AudioStream *stream)
14531479
// number of sample frames that are currently queued as input.
14541480
int SDL_GetAudioStreamQueued(SDL_AudioStream *stream)
14551481
{
1456-
if (!stream) {
1482+
CHECK_PARAM(!stream) {
14571483
SDL_InvalidParamError("stream");
14581484
return -1;
14591485
}
@@ -1470,7 +1496,7 @@ int SDL_GetAudioStreamQueued(SDL_AudioStream *stream)
14701496

14711497
bool SDL_ClearAudioStream(SDL_AudioStream *stream)
14721498
{
1473-
if (!stream) {
1499+
CHECK_PARAM(!stream) {
14741500
return SDL_InvalidParamError("stream");
14751501
}
14761502

@@ -1522,13 +1548,16 @@ bool SDL_ConvertAudioSamples(const SDL_AudioSpec *src_spec, const Uint8 *src_dat
15221548
*dst_len = 0;
15231549
}
15241550

1525-
if (!src_data) {
1551+
CHECK_PARAM(!src_data) {
15261552
return SDL_InvalidParamError("src_data");
1527-
} else if (src_len < 0) {
1553+
}
1554+
CHECK_PARAM(src_len < 0) {
15281555
return SDL_InvalidParamError("src_len");
1529-
} else if (!dst_data) {
1556+
}
1557+
CHECK_PARAM(!dst_data) {
15301558
return SDL_InvalidParamError("dst_data");
1531-
} else if (!dst_len) {
1559+
}
1560+
CHECK_PARAM(!dst_len) {
15321561
return SDL_InvalidParamError("dst_len");
15331562
}
15341563

src/audio/SDL_wave.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,16 +2092,19 @@ bool SDL_LoadWAV_IO(SDL_IOStream *src, bool closeio, SDL_AudioSpec *spec, Uint8
20922092
}
20932093

20942094
// Make sure we are passed a valid data source
2095-
if (!src) {
2095+
CHECK_PARAM(!src) {
20962096
SDL_InvalidParamError("src");
20972097
goto done;
2098-
} else if (!spec) {
2098+
}
2099+
CHECK_PARAM(!spec) {
20992100
SDL_InvalidParamError("spec");
21002101
goto done;
2101-
} else if (!audio_buf) {
2102+
}
2103+
CHECK_PARAM(!audio_buf) {
21022104
SDL_InvalidParamError("audio_buf");
21032105
goto done;
2104-
} else if (!audio_len) {
2106+
}
2107+
CHECK_PARAM(!audio_len) {
21052108
SDL_InvalidParamError("audio_len");
21062109
goto done;
21072110
}

0 commit comments

Comments
 (0)