View | Details | Raw Unified | Return to bug 278491
Collapse All | Expand All

(-)b/audio/sdl2_sound/Makefile (-6 / +6 lines)
Lines 1-7 Link Here
1
PORTNAME=	sdl2_sound
1
PORTNAME=	sdl2_sound
2
DISTVERSIONPREFIX=	v
3
DISTVERSION=	2.0.2
2
DISTVERSION=	2.0.2
3
PORTREVISION=	1
4
CATEGORIES=	audio
4
CATEGORIES=	audio
5
MASTER_SITES=	https://github.com/icculus/SDL_sound/releases/download/v${DISTVERSION}/
6
DISTNAME=	SDL2_sound-${DISTVERSION}
5
7
6
MAINTAINER=	amdmi3@FreeBSD.org
8
MAINTAINER=	amdmi3@FreeBSD.org
7
COMMENT=	Abstract SDL soundfile decoder
9
COMMENT=	Abstract SDL soundfile decoder
Lines 11-30 WWW= https://icculus.org/SDL_sound/ \ Link Here
11
LICENSE=	ZLIB
13
LICENSE=	ZLIB
12
LICENSE_FILE_ZLIB=${WRKSRC}/LICENSE.txt
14
LICENSE_FILE_ZLIB=${WRKSRC}/LICENSE.txt
13
15
14
USES=		cmake sdl
16
USES=		cmake pathfix sdl
15
USE_SDL=	sdl2
17
USE_SDL=	sdl2
16
USE_GITHUB=	yes
17
GH_ACCOUNT=	icculus
18
GH_PROJECT=	SDL_sound
19
USE_LDCONFIG=	yes
18
USE_LDCONFIG=	yes
20
19
21
PORTDOCS=	*
20
PORTDOCS=	*
22
PORTEXAMPLES=	*
21
PORTEXAMPLES=	*
23
22
24
OPTIONS_DEFINE=	MIDI DOCS EXAMPLES
23
OPTIONS_DEFINE=	DOCS EXAMPLES MIDI
25
OPTIONS_DEFAULT=MIDI
24
OPTIONS_DEFAULT=MIDI
26
25
27
MIDI_DESC=	MIDI support
26
MIDI_DESC=	MIDI support
27
28
MIDI_CMAKE_BOOL=SDLSOUND_DECODER_MIDI
28
MIDI_CMAKE_BOOL=SDLSOUND_DECODER_MIDI
29
MIDI_VARS=	LICENSE+=ART10 \
29
MIDI_VARS=	LICENSE+=ART10 \
30
		LICENSE_COMB=multi \
30
		LICENSE_COMB=multi \
(-)b/audio/sdl2_sound/distinfo (-3 / +3 lines)
Lines 1-3 Link Here
1
TIMESTAMP = 1688690484
1
TIMESTAMP = 1713649595
2
SHA256 (icculus-SDL_sound-v2.0.2_GH0.tar.gz) = 5f92600de48ec640985d13e50d111af9ac30be797bc9a36eafa5d8cecc7e1f60
2
SHA256 (SDL2_sound-2.0.2.tar.gz) = 465a81d6004af731768b881b2f50383150cc58a8d346653bad85e2375829cc3a
3
SIZE (icculus-SDL_sound-v2.0.2_GH0.tar.gz) = 459868
3
SIZE (SDL2_sound-2.0.2.tar.gz) = 459893
(-)b/audio/sdl2_sound/files/patch-git-01-20240119 (+1261 lines)
Added Link Here
1
From 1f8b5c25fabe1d611e828f112b7c76dac907b524 Mon Sep 17 00:00:00 2001
2
From: Anonymous Maarten <anonymous.maarten@gmail.com>
3
Date: Wed, 5 Jul 2023 12:31:47 +0200
4
Subject: [PATCH 01/17] cmake: use SDL2_INCLUDE_DIRS instead of target property
5
6
---
7
 CMakeLists.txt | 20 ++++----------------
8
 1 file changed, 4 insertions(+), 16 deletions(-)
9
10
diff --git a/CMakeLists.txt b/CMakeLists.txt
11
index 8dedebc..0773dec 100644
12
--- CMakeLists.txt
13
+++ CMakeLists.txt
14
@@ -215,14 +215,8 @@ if(SDLSOUND_BUILD_STATIC)
15
         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
16
         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>
17
         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
18
-    if(TARGET SDL2::SDL2-static)
19
-        get_target_property(_sdl2_include_dir SDL2::SDL2-static INTERFACE_INCLUDE_DIRECTORIES)
20
-        target_include_directories(SDL2_sound-static PUBLIC "$<BUILD_INTERFACE:${_sdl2_include_dir}>")
21
-        target_link_libraries(SDL2_sound-static PRIVATE $<BUILD_INTERFACE:SDL2::SDL2-static> ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
22
-    else()
23
-        target_include_directories(SDL2_sound-static PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
24
-        target_link_libraries(SDL2_sound-static PRIVATE "$<BUILD_INTERFACE:${SDL2_LIBRARIES}>" ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
25
-    endif()
26
+    target_include_directories(SDL2_sound-static PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
27
+    target_link_libraries(SDL2_sound-static PRIVATE "$<BUILD_INTERFACE:${SDL2_LIBRARIES}>" ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
28
     set(SDLSOUND_LIB_TARGET SDL2_sound-static)
29
 endif()
30
 
31
@@ -249,14 +243,8 @@ if(SDLSOUND_BUILD_SHARED)
32
         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/SDL2>
33
         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
34
     )
35
-    if(TARGET SDL2::SDL2)
36
-        get_target_property(_sdl2_include_dir SDL2::SDL2 INTERFACE_INCLUDE_DIRECTORIES)
37
-        target_include_directories(SDL2_sound PUBLIC "$<BUILD_INTERFACE:${_sdl2_include_dir}>")
38
-        target_link_libraries(SDL2_sound PRIVATE $<BUILD_INTERFACE:SDL2::SDL2> ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
39
-    else()
40
-        target_include_directories(SDL2_sound PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
41
-        target_link_libraries(SDL2_sound PRIVATE "$<BUILD_INTERFACE:${SDL2_LIBRARIES}>" ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
42
-    endif()
43
+    target_include_directories(SDL2_sound PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
44
+    target_link_libraries(SDL2_sound PRIVATE "$<BUILD_INTERFACE:${SDL2_LIBRARIES}>" ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS})
45
     set(SDLSOUND_LIB_TARGET SDL2_sound)
46
 endif()
47
 
48
49
From f80947aa7bda23925b2c22cbb2b4da1f9e8d2e6c Mon Sep 17 00:00:00 2001
50
From: Ozkan Sezer <sezeroz@gmail.com>
51
Date: Wed, 5 Jul 2023 17:55:32 +0300
52
Subject: [PATCH 02/17] sync dr_mp3 and dr_flac with mainstream.
53
54
---
55
 src/dr_flac.h | 71 ++++++++++++++++++++++++++++++++++-----------------
56
 src/dr_mp3.h  | 48 ++++++++++++++++++++++++----------
57
 2 files changed, 82 insertions(+), 37 deletions(-)
58
59
diff --git a/src/dr_flac.h b/src/dr_flac.h
60
index 0c43eed..1ede99f 100644
61
--- src/dr_flac.h
62
+++ src/dr_flac.h
63
@@ -1,6 +1,6 @@
64
 /*
65
 FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
66
-dr_flac - v0.12.39 - 2022-09-17
67
+dr_flac - v0.12.41 - 2023-06-17
68
 
69
 David Reid - mackron@gmail.com
70
 
71
@@ -235,12 +235,12 @@ extern "C" {
72
 
73
 #define DRFLAC_VERSION_MAJOR     0
74
 #define DRFLAC_VERSION_MINOR     12
75
-#define DRFLAC_VERSION_REVISION  39
76
+#define DRFLAC_VERSION_REVISION  41
77
 #define DRFLAC_VERSION_STRING    DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION)
78
 
79
 #include <stddef.h> /* For size_t. */
80
 
81
-/* Sized types. */
82
+/* Sized Types */
83
 typedef   signed char           drflac_int8;
84
 typedef unsigned char           drflac_uint8;
85
 typedef   signed short          drflac_int16;
86
@@ -273,7 +273,9 @@ typedef drflac_uint8            drflac_bool8;
87
 typedef drflac_uint32           drflac_bool32;
88
 #define DRFLAC_TRUE             1
89
 #define DRFLAC_FALSE            0
90
+/* End Sized Types */
91
 
92
+/* Decorations */
93
 #if !defined(DRFLAC_API)
94
     #if defined(DRFLAC_DLL)
95
         #if defined(_WIN32)
96
@@ -303,6 +305,7 @@ typedef drflac_uint32           drflac_bool32;
97
         #define DRFLAC_PRIVATE static
98
     #endif
99
 #endif
100
+/* End Decorations */
101
 
102
 #if defined(_MSC_VER) && _MSC_VER >= 1700   /* Visual Studio 2012 */
103
     #define DRFLAC_DEPRECATED       __declspec(deprecated)
104
@@ -321,6 +324,16 @@ typedef drflac_uint32           drflac_bool32;
105
 DRFLAC_API void drflac_version(drflac_uint32* pMajor, drflac_uint32* pMinor, drflac_uint32* pRevision);
106
 DRFLAC_API const char* drflac_version_string(void);
107
 
108
+/* Allocation Callbacks */
109
+typedef struct
110
+{
111
+    void* pUserData;
112
+    void* (* onMalloc)(size_t sz, void* pUserData);
113
+    void* (* onRealloc)(void* p, size_t sz, void* pUserData);
114
+    void  (* onFree)(void* p, void* pUserData);
115
+} drflac_allocation_callbacks;
116
+/* End Allocation Callbacks */
117
+
118
 /*
119
 As data is read from the client it is placed into an internal buffer for fast access. This controls the size of that buffer. Larger values means more speed,
120
 but also more memory. In my testing there is diminishing returns after about 4KB, but you can fiddle with this to suit your own needs. Must be a multiple of 8.
121
@@ -329,11 +342,22 @@ but also more memory. In my testing there is diminishing returns after about 4KB
122
 #define DR_FLAC_BUFFER_SIZE   4096
123
 #endif
124
 
125
-/* Check if we can enable 64-bit optimizations. */
126
+
127
+/* Architecture Detection */
128
 #if defined(_WIN64) || defined(_LP64) || defined(__LP64__)
129
 #define DRFLAC_64BIT
130
 #endif
131
 
132
+#if defined(__x86_64__) || defined(_M_X64)
133
+    #define DRFLAC_X64
134
+#elif defined(__i386) || defined(_M_IX86)
135
+    #define DRFLAC_X86
136
+#elif defined(__arm__) || defined(_M_ARM) || defined(__arm64) || defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)
137
+    #define DRFLAC_ARM
138
+#endif
139
+/* End Architecture Detection */
140
+
141
+
142
 #ifdef DRFLAC_64BIT
143
 typedef drflac_uint64 drflac_cache_t;
144
 #else
145
@@ -562,14 +586,6 @@ will be set to one of the DRFLAC_METADATA_BLOCK_TYPE_* tokens.
146
 typedef void (* drflac_meta_proc)(void* pUserData, drflac_metadata* pMetadata);
147
 
148
 
149
-typedef struct
150
-{
151
-    void* pUserData;
152
-    void* (* onMalloc)(size_t sz, void* pUserData);
153
-    void* (* onRealloc)(void* p, size_t sz, void* pUserData);
154
-    void  (* onFree)(void* p, void* pUserData);
155
-} drflac_allocation_callbacks;
156
-
157
 /* Structure for internal use. Only used for decoders opened with drflac_open_memory. */
158
 typedef struct
159
 {
160
@@ -1351,6 +1367,7 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat
161
 #include <stdlib.h>
162
 #include <string.h>
163
 
164
+/* Inline */
165
 #ifdef _MSC_VER
166
     #define DRFLAC_INLINE __forceinline
167
 #elif defined(__GNUC__)
168
@@ -1377,15 +1394,7 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat
169
 #else
170
     #define DRFLAC_INLINE
171
 #endif
172
-
173
-/* CPU architecture. */
174
-#if defined(__x86_64__) || defined(_M_X64)
175
-    #define DRFLAC_X64
176
-#elif defined(__i386) || defined(_M_IX86)
177
-    #define DRFLAC_X86
178
-#elif defined(__arm__) || defined(_M_ARM) || defined(__arm64) || defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)
179
-    #define DRFLAC_ARM
180
-#endif
181
+/* End Inline */
182
 
183
 /*
184
 Intrinsics Support
185
@@ -1623,6 +1632,7 @@ static DRFLAC_INLINE drflac_bool32 drflac_has_sse41(void)
186
 
187
 #define DRFLAC_MAX_SIMD_VECTOR_SIZE                     64  /* 64 for AVX-512 in the future. */
188
 
189
+/* Result Codes */
190
 typedef drflac_int32 drflac_result;
191
 #define DRFLAC_SUCCESS                                   0
192
 #define DRFLAC_ERROR                                    -1   /* A generic error. */
193
@@ -1678,7 +1688,10 @@ typedef drflac_int32 drflac_result;
194
 #define DRFLAC_CANCELLED                                -51
195
 #define DRFLAC_MEMORY_ALREADY_MAPPED                    -52
196
 #define DRFLAC_AT_END                                   -53
197
-#define DRFLAC_CRC_MISMATCH                             -128
198
+
199
+#define DRFLAC_CRC_MISMATCH                             -100
200
+/* End Result Codes */
201
+
202
 
203
 #define DRFLAC_SUBFRAME_CONSTANT                        0
204
 #define DRFLAC_SUBFRAME_VERBATIM                        1
205
@@ -8141,6 +8154,7 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac
206
 #include <wchar.h>      /* For wcslen(), wcsrtombs() */
207
 #endif
208
 
209
+/* Errno */
210
 /* drflac_result_from_errno() is only used for fopen() and wfopen() so putting it inside DR_WAV_NO_STDIO for now. If something else needs this later we can move it out. */
211
 #include <errno.h>
212
 static drflac_result drflac_result_from_errno(int e)
213
@@ -8544,7 +8558,9 @@ static drflac_result drflac_result_from_errno(int e)
214
         default: return DRFLAC_ERROR;
215
     }
216
 }
217
+/* End Errno */
218
 
219
+/* fopen */
220
 static drflac_result drflac_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode)
221
 {
222
 #if defined(_MSC_VER) && _MSC_VER >= 1400
223
@@ -8702,6 +8718,7 @@ static drflac_result drflac_wfopen(FILE** ppFile, const wchar_t* pFilePath, cons
224
     return DRFLAC_SUCCESS;
225
 }
226
 #endif
227
+/* End fopen */
228
 
229
 static size_t drflac__on_read_stdio(void* pUserData, void* bufferOut, size_t bytesToRead)
230
 {
231
@@ -11666,6 +11683,7 @@ DRFLAC_API drflac_bool32 drflac_seek_to_pcm_frame(drflac* pFlac, drflac_uint64 p
232
 
233
 /* High Level APIs */
234
 
235
+/* SIZE_MAX */
236
 #if defined(SIZE_MAX)
237
     #define DRFLAC_SIZE_MAX  SIZE_MAX
238
 #else
239
@@ -11675,6 +11693,7 @@ DRFLAC_API drflac_bool32 drflac_seek_to_pcm_frame(drflac* pFlac, drflac_uint64 p
240
         #define DRFLAC_SIZE_MAX  0xFFFFFFFF
241
     #endif
242
 #endif
243
+/* End SIZE_MAX */
244
 
245
 
246
 /* Using a macro as the definition of the drflac__full_decode_and_close_*() API family. Sue me. */
247
@@ -12058,6 +12077,12 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat
248
 /*
249
 REVISION HISTORY
250
 ================
251
+v0.12.41 - 2023-06-17
252
+  - Fix an incorrect date in revision history. No functional change.
253
+
254
+v0.12.40 - 2023-05-22
255
+  - Minor code restructure. No functional change.
256
+
257
 v0.12.39 - 2022-09-17
258
   - Fix compilation with DJGPP.
259
   - Fix compilation error with Visual Studio 2019 and the ARM build.
260
@@ -12488,7 +12513,7 @@ For more information, please refer to <http://unlicense.org/>
261
 ===============================================================================
262
 ALTERNATIVE 2 - MIT No Attribution
263
 ===============================================================================
264
-Copyright 2020 David Reid
265
+Copyright 2023 David Reid
266
 
267
 Permission is hereby granted, free of charge, to any person obtaining a copy of
268
 this software and associated documentation files (the "Software"), to deal in
269
diff --git a/src/dr_mp3.h b/src/dr_mp3.h
270
index 59876c8..2e82189 100644
271
--- src/dr_mp3.h
272
+++ src/dr_mp3.h
273
@@ -1,6 +1,6 @@
274
 /*
275
 MP3 audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
276
-dr_mp3 - v0.6.34 - 2022-09-17
277
+dr_mp3 - v0.6.36 - 2023-06-17
278
 
279
 David Reid - mackron@gmail.com
280
 
281
@@ -95,12 +95,12 @@ extern "C" {
282
 
283
 #define DRMP3_VERSION_MAJOR     0
284
 #define DRMP3_VERSION_MINOR     6
285
-#define DRMP3_VERSION_REVISION  34
286
+#define DRMP3_VERSION_REVISION  36
287
 #define DRMP3_VERSION_STRING    DRMP3_XSTRINGIFY(DRMP3_VERSION_MAJOR) "." DRMP3_XSTRINGIFY(DRMP3_VERSION_MINOR) "." DRMP3_XSTRINGIFY(DRMP3_VERSION_REVISION)
288
 
289
 #include <stddef.h> /* For size_t. */
290
 
291
-/* Sized types. */
292
+/* Sized Types */
293
 typedef   signed char           drmp3_int8;
294
 typedef unsigned char           drmp3_uint8;
295
 typedef   signed short          drmp3_int16;
296
@@ -133,7 +133,9 @@ typedef drmp3_uint8             drmp3_bool8;
297
 typedef drmp3_uint32            drmp3_bool32;
298
 #define DRMP3_TRUE              1
299
 #define DRMP3_FALSE             0
300
+/* End Sized Types */
301
 
302
+/* Decorations */
303
 #if !defined(DRMP3_API)
304
     #if defined(DRMP3_DLL)
305
         #if defined(_WIN32)
306
@@ -163,7 +165,9 @@ typedef drmp3_uint32            drmp3_bool32;
307
         #define DRMP3_PRIVATE static
308
     #endif
309
 #endif
310
+/* End Decorations */
311
 
312
+/* Result Codes */
313
 typedef drmp3_int32 drmp3_result;
314
 #define DRMP3_SUCCESS                        0
315
 #define DRMP3_ERROR                         -1   /* A generic error. */
316
@@ -219,11 +223,12 @@ typedef drmp3_int32 drmp3_result;
317
 #define DRMP3_CANCELLED                     -51
318
 #define DRMP3_MEMORY_ALREADY_MAPPED         -52
319
 #define DRMP3_AT_END                        -53
320
-
321
+/* End Result Codes */
322
 
323
 #define DRMP3_MAX_PCM_FRAMES_PER_MP3_FRAME  1152
324
 #define DRMP3_MAX_SAMPLES_PER_FRAME         (DRMP3_MAX_PCM_FRAMES_PER_MP3_FRAME*2)
325
 
326
+/* Inline */
327
 #ifdef _MSC_VER
328
     #define DRMP3_INLINE __forceinline
329
 #elif defined(__GNUC__)
330
@@ -250,12 +255,24 @@ typedef drmp3_int32 drmp3_result;
331
 #else
332
     #define DRMP3_INLINE
333
 #endif
334
+/* End Inline */
335
 
336
 
337
 DRMP3_API void drmp3_version(drmp3_uint32* pMajor, drmp3_uint32* pMinor, drmp3_uint32* pRevision);
338
 DRMP3_API const char* drmp3_version_string(void);
339
 
340
 
341
+/* Allocation Callbacks */
342
+typedef struct
343
+{
344
+    void* pUserData;
345
+    void* (* onMalloc)(size_t sz, void* pUserData);
346
+    void* (* onRealloc)(void* p, size_t sz, void* pUserData);
347
+    void  (* onFree)(void* p, void* pUserData);
348
+} drmp3_allocation_callbacks;
349
+/* End Allocation Callbacks */
350
+
351
+
352
 /*
353
 Low Level Push API
354
 ==================
355
@@ -329,14 +346,6 @@ will be either drmp3_seek_origin_start or drmp3_seek_origin_current.
356
 */
357
 typedef drmp3_bool32 (* drmp3_seek_proc)(void* pUserData, int offset, drmp3_seek_origin origin);
358
 
359
-typedef struct
360
-{
361
-    void* pUserData;
362
-    void* (* onMalloc)(size_t sz, void* pUserData);
363
-    void* (* onRealloc)(void* p, size_t sz, void* pUserData);
364
-    void  (* onFree)(void* p, void* pUserData);
365
-} drmp3_allocation_callbacks;
366
-
367
 typedef struct
368
 {
369
     drmp3_uint32 channels;
370
@@ -2415,6 +2424,7 @@ DRMP3_API void drmp3dec_f32_to_s16(const float *in, drmp3_int16 *out, size_t num
371
  Main Public API
372
 
373
  ************************************************************************************************************************************************************/
374
+/* SIZE_MAX */
375
 #if defined(SIZE_MAX)
376
     #define DRMP3_SIZE_MAX  SIZE_MAX
377
 #else
378
@@ -2424,6 +2434,7 @@ DRMP3_API void drmp3dec_f32_to_s16(const float *in, drmp3_int16 *out, size_t num
379
         #define DRMP3_SIZE_MAX  0xFFFFFFFF
380
     #endif
381
 #endif
382
+/* End SIZE_MAX */
383
 
384
 /* Options. */
385
 #ifndef DRMP3_SEEK_LEADING_MP3_FRAMES
386
@@ -2931,6 +2942,7 @@ DRMP3_API drmp3_bool32 drmp3_init_memory(drmp3* pMP3, const void* pData, size_t
387
 #include <stdio.h>
388
 #include <wchar.h>      /* For wcslen(), wcsrtombs() */
389
 
390
+/* Errno */
391
 /* drmp3_result_from_errno() is only used inside DR_MP3_NO_STDIO for now. Move this out if it's ever used elsewhere. */
392
 #include <errno.h>
393
 static drmp3_result drmp3_result_from_errno(int e)
394
@@ -3334,7 +3346,9 @@ static drmp3_result drmp3_result_from_errno(int e)
395
         default: return DRMP3_ERROR;
396
     }
397
 }
398
+/* End Errno */
399
 
400
+/* fopen */
401
 static drmp3_result drmp3_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode)
402
 {
403
 #if defined(_MSC_VER) && _MSC_VER >= 1400
404
@@ -3490,7 +3504,7 @@ static drmp3_result drmp3_wfopen(FILE** ppFile, const wchar_t* pFilePath, const
405
 
406
     return DRMP3_SUCCESS;
407
 }
408
-
409
+/* End fopen */
410
 
411
 
412
 static size_t drmp3__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead)
413
@@ -4476,6 +4490,12 @@ counts rather than sample counts.
414
 /*
415
 REVISION HISTORY
416
 ================
417
+v0.6.36 - 2023-06-17
418
+  - Fix an incorrect date in revision history. No functional change.
419
+
420
+v0.6.35 - 2023-05-22
421
+  - Minor code restructure. No functional change.
422
+
423
 v0.6.34 - 2022-09-17
424
   - Fix compilation with DJGPP.
425
   - Fix compilation when compiling with x86 with no SSE2.
426
@@ -4777,7 +4797,7 @@ For more information, please refer to <http://unlicense.org/>
427
 ===============================================================================
428
 ALTERNATIVE 2 - MIT No Attribution
429
 ===============================================================================
430
-Copyright 2020 David Reid
431
+Copyright 2023 David Reid
432
 
433
 Permission is hereby granted, free of charge, to any person obtaining a copy of
434
 this software and associated documentation files (the "Software"), to deal in
435
436
From 1507be95c3605e4fd6a48ea4c527e4aa711a1566 Mon Sep 17 00:00:00 2001
437
From: Anonymous Maarten <madebr@users.noreply.github.com>
438
Date: Fri, 13 Oct 2023 17:50:02 +0000
439
Subject: [PATCH 05/17] playsound: fix potention null pointer read
440
441
Potential fix for https://retrace.fedoraproject.org/faf/reports/556333/
442
---
443
 examples/playsound.c | 2 +-
444
 1 file changed, 1 insertion(+), 1 deletion(-)
445
446
diff --git a/examples/playsound.c b/examples/playsound.c
447
index b23b001..24f8132 100644
448
--- examples/playsound.c
449
+++ examples/playsound.c
450
@@ -839,7 +839,7 @@ int main(int argc, char **argv)
451
             global_state.predecode = 1;
452
         } /* else if */
453
 
454
-        else if (SDL_strcmp(argv[i], "--loop") == 0)
455
+        else if (SDL_strcmp(argv[i], "--loop") == 0 && argc > i + 1)
456
         {
457
             global_state.looping = SDL_atoi(argv[++i]);
458
         } /* else if */
459
460
From c8e96bec10e7f314ecbf422bdafaf386098d3105 Mon Sep 17 00:00:00 2001
461
From: Anonymous Maarten <anonymous.maarten@gmail.com>
462
Date: Thu, 26 Oct 2023 18:18:14 +0200
463
Subject: [PATCH 06/17] cmake: make sure SDL2_sound::SDL2_sound always exists
464
465
---
466
 CMakeLists.txt                  |  5 +++++
467
 cmake/SDL2_soundConfig.cmake.in | 11 +++++++++++
468
 2 files changed, 16 insertions(+)
469
470
diff --git a/CMakeLists.txt b/CMakeLists.txt
471
index 67d5ef9..1e08345 100644
472
--- CMakeLists.txt
473
+++ CMakeLists.txt
474
@@ -413,4 +413,9 @@ message_bool_option("Build static library" SDLSOUND_BUILD_STATIC)
475
 message_bool_option("Build shared library" SDLSOUND_BUILD_SHARED)
476
 message_bool_option("Build stdio test program" SDLSOUND_BUILD_TEST)
477
 
478
+# Make sure SDL2_sound::SDL2_sound always exists
479
+if(TARGET SDL2_sound::SDL2_sound-static AND NOT TARGET SDL2_sound::SDL2_sound)
480
+    add_library(SDL2_sound::SDL2_sound ALIAS SDL2_sound-static)
481
+endif()
482
+
483
 # end of CMakeLists.txt
484
diff --git a/cmake/SDL2_soundConfig.cmake.in b/cmake/SDL2_soundConfig.cmake.in
485
index 5ad8890..c92bdd0 100644
486
--- cmake/SDL2_soundConfig.cmake.in
487
+++ cmake/SDL2_soundConfig.cmake.in
488
@@ -21,3 +21,14 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_sound-static-targets.cmake")
489
 endif()
490
 
491
 check_required_components(SDL2_sound)
492
+
493
+# Create SDL2_sound::SDL2_sound alias for static-only builds
494
+if(TARGET SDL2_sound::SDL2_sound-static AND NOT TARGET SDL2_sound::SDL2_sound)
495
+  if(CMAKE_VERSION VERSION_LESS "3.18")
496
+    # FIXME: Aliasing local targets is not supported on CMake < 3.18, so make it global.
497
+    add_library(SDL2_sound::SDL2_sound INTERFACE IMPORTED)
498
+    set_target_properties(SDL2_sound::SDL2_sound PROPERTIES INTERFACE_LINK_LIBRARIES "SDL2_sound::SDL2_sound-static")
499
+  else()
500
+    add_library(SDL2_sound::SDL2_sound ALIAS SDL2_sound::SDL2_sound-static)
501
+  endif()
502
+endif()
503
504
From a7e7d1f6e9bdc5e813c696d13ba243706f8ccce3 Mon Sep 17 00:00:00 2001
505
From: Ozkan Sezer <sezeroz@gmail.com>
506
Date: Tue, 7 Nov 2023 22:40:04 +0300
507
Subject: [PATCH 07/17] Import an stb_vorbis fix from upstream PR/1563:
508
509
Patch by Seb de Graffenried (@Seb-degraff): https://github.com/nothings/stb/pull/1563
510
Fixes distorted decompressed audio when UBSan was enabled.
511
---
512
 src/stb_vorbis.h | 4 ++--
513
 1 file changed, 2 insertions(+), 2 deletions(-)
514
515
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
516
index f651f74..34c53b5 100644
517
--- src/stb_vorbis.h
518
+++ src/stb_vorbis.h
519
@@ -2151,7 +2151,7 @@ STB_FORCEINLINE void draw_line(float *output, int x0, int y0, int x1, int y1, in
520
    ady -= abs(base) * adx;
521
    if (x1 > n) x1 = n;
522
    if (x < x1) {
523
-      LINE_OP(output[x], inverse_db_table[y&255]);
524
+      LINE_OP(output[x], inverse_db_table[(uint32)y&255]);
525
       for (++x; x < x1; ++x) {
526
          err += ady;
527
          if (err >= adx) {
528
@@ -2159,7 +2159,7 @@ STB_FORCEINLINE void draw_line(float *output, int x0, int y0, int x1, int y1, in
529
             y += sy;
530
          } else
531
             y += base;
532
-         LINE_OP(output[x], inverse_db_table[y&255]);
533
+         LINE_OP(output[x], inverse_db_table[(uint32)y&255]);
534
       }
535
    }
536
 }
537
538
From d9d196a43ff1b207fe5644e3943a459495a6642c Mon Sep 17 00:00:00 2001
539
From: Ozkan Sezer <sezeroz@gmail.com>
540
Date: Sat, 2 Dec 2023 10:29:20 +0300
541
Subject: [PATCH 08/17] updated dr_libs from mainstream.
542
543
---
544
 src/dr_flac.h | 14 +++++++++-----
545
 src/dr_mp3.h  | 17 ++++++++++++++---
546
 2 files changed, 23 insertions(+), 8 deletions(-)
547
548
diff --git a/src/dr_flac.h b/src/dr_flac.h
549
index 1ede99f..14324cf 100644
550
--- src/dr_flac.h
551
+++ src/dr_flac.h
552
@@ -1,6 +1,6 @@
553
 /*
554
 FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
555
-dr_flac - v0.12.41 - 2023-06-17
556
+dr_flac - v0.12.42 - 2023-11-02
557
 
558
 David Reid - mackron@gmail.com
559
 
560
@@ -235,7 +235,7 @@ extern "C" {
561
 
562
 #define DRFLAC_VERSION_MAJOR     0
563
 #define DRFLAC_VERSION_MINOR     12
564
-#define DRFLAC_VERSION_REVISION  41
565
+#define DRFLAC_VERSION_REVISION  42
566
 #define DRFLAC_VERSION_STRING    DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION)
567
 
568
 #include <stddef.h> /* For size_t. */
569
@@ -1851,7 +1851,7 @@ static DRFLAC_INLINE drflac_uint32 drflac__swap_endian_uint32(drflac_uint32 n)
570
     #if defined(_MSC_VER) && !defined(__clang__)
571
         return _byteswap_ulong(n);
572
     #elif defined(__GNUC__) || defined(__clang__)
573
-        #if defined(DRFLAC_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 6) && !defined(DRFLAC_64BIT)   /* <-- 64-bit inline assembly has not been tested, so disabling for now. */
574
+        #if defined(DRFLAC_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 6) && !defined(__ARM_ARCH_6M__) && !defined(DRFLAC_64BIT)   /* <-- 64-bit inline assembly has not been tested, so disabling for now. */
575
             /* Inline assembly optimized implementation for ARM. In my testing, GCC does not generate optimized code with __builtin_bswap32(). */
576
             drflac_uint32 r;
577
             __asm__ __volatile__ (
578
@@ -2815,7 +2815,7 @@ static DRFLAC_INLINE drflac_uint32 drflac__clz_lzcnt(drflac_cache_t x)
579
 
580
                 return r;
581
             }
582
-        #elif defined(DRFLAC_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 5) && !defined(DRFLAC_64BIT)   /* <-- I haven't tested 64-bit inline assembly, so only enabling this for the 32-bit build for now. */
583
+        #elif defined(DRFLAC_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 5) && !defined(__ARM_ARCH_6M__) && !defined(DRFLAC_64BIT)   /* <-- I haven't tested 64-bit inline assembly, so only enabling this for the 32-bit build for now. */
584
             {
585
                 unsigned int r;
586
                 __asm__ __volatile__ (
587
@@ -6492,7 +6492,7 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d
588
     for (;;) {
589
         drflac_metadata metadata;
590
         drflac_uint8 isLastBlock = 0;
591
-        drflac_uint8 blockType;
592
+        drflac_uint8 blockType = 0;
593
         drflac_uint32 blockSize;
594
         if (drflac__read_and_decode_block_header(onRead, pUserData, &isLastBlock, &blockType, &blockSize) == DRFLAC_FALSE) {
595
             return DRFLAC_FALSE;
596
@@ -12077,6 +12077,10 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat
597
 /*
598
 REVISION HISTORY
599
 ================
600
+v0.12.42 - 2023-11-02
601
+  - Fix build for ARMv6-M.
602
+  - Fix a compilation warning with GCC.
603
+
604
 v0.12.41 - 2023-06-17
605
   - Fix an incorrect date in revision history. No functional change.
606
 
607
diff --git a/src/dr_mp3.h b/src/dr_mp3.h
608
index 2e82189..84849ee 100644
609
--- src/dr_mp3.h
610
+++ src/dr_mp3.h
611
@@ -1,6 +1,6 @@
612
 /*
613
 MP3 audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file.
614
-dr_mp3 - v0.6.36 - 2023-06-17
615
+dr_mp3 - v0.6.38 - 2023-11-02
616
 
617
 David Reid - mackron@gmail.com
618
 
619
@@ -95,7 +95,7 @@ extern "C" {
620
 
621
 #define DRMP3_VERSION_MAJOR     0
622
 #define DRMP3_VERSION_MINOR     6
623
-#define DRMP3_VERSION_REVISION  36
624
+#define DRMP3_VERSION_REVISION  38
625
 #define DRMP3_VERSION_STRING    DRMP3_XSTRINGIFY(DRMP3_VERSION_MAJOR) "." DRMP3_XSTRINGIFY(DRMP3_VERSION_MINOR) "." DRMP3_XSTRINGIFY(DRMP3_VERSION_REVISION)
626
 
627
 #include <stddef.h> /* For size_t. */
628
@@ -713,7 +713,7 @@ static int drmp3_have_simd(void)
629
 
630
 #endif
631
 
632
-#if defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__aarch64__) && !defined(_M_ARM64)
633
+#if defined(__ARM_ARCH) && (__ARM_ARCH >= 6) && !defined(__aarch64__) && !defined(_M_ARM64) && !defined(__ARM_ARCH_6M__)
634
 #define DRMP3_HAVE_ARMV6 1
635
 static __inline__ __attribute__((always_inline)) drmp3_int32 drmp3_clip_int16_arm(drmp3_int32 a)
636
 {
637
@@ -2701,6 +2701,11 @@ static drmp3_uint32 drmp3_decode_next_frame_ex__callbacks(drmp3* pMP3, drmp3d_sa
638
         DRMP3_ASSERT(pMP3->pData != NULL);
639
         DRMP3_ASSERT(pMP3->dataCapacity > 0);
640
 
641
+        /* Do a runtime check here to try silencing a false-positive from clang-analyzer. */
642
+        if (pMP3->pData == NULL) {
643
+            return 0;
644
+        }
645
+
646
         pcmFramesRead = drmp3dec_decode_frame(&pMP3->decoder, pMP3->pData + pMP3->dataConsumed, (int)pMP3->dataSize, pPCMFrames, &info);    /* <-- Safe size_t -> int conversion thanks to the check above. */
647
 
648
         /* Consume the data. */
649
@@ -4490,6 +4495,12 @@ counts rather than sample counts.
650
 /*
651
 REVISION HISTORY
652
 ================
653
+v0.6.38 - 2023-11-02
654
+  - Fix build for ARMv6-M.
655
+
656
+v0.6.37 - 2023-07-07
657
+  - Silence a static analysis warning.
658
+
659
 v0.6.36 - 2023-06-17
660
   - Fix an incorrect date in revision history. No functional change.
661
 
662
663
From a9e5aa85b2fe2c28e1af398105a9260eee1d7f9d Mon Sep 17 00:00:00 2001
664
From: Ozkan Sezer <sezeroz@gmail.com>
665
Date: Mon, 11 Dec 2023 05:50:02 +0300
666
Subject: [PATCH 09/17] stb_vorbis: fix CVE-2023-45676 and CVE-2023-45677.
667
MIME-Version: 1.0
668
Content-Type: text/plain; charset=UTF-8
669
Content-Transfer-Encoding: 8bit
670
671
Based on the patches by Jaroslav Lobačevski (@JarLob) submitted
672
to mainstream at: https://github.com/nothings/stb/pull/1554 and
673
https://github.com/nothings/stb/pull/1555
674
675
GHSL-2023-166/CVE-2023-45676: Multi-byte write heap buffer overflow in start_decoder()
676
GHSL-2023-167/CVE-2023-45677: Heap buffer out of bounds write in start_decoder()
677
---
678
 src/stb_vorbis.h | 1 +
679
 1 file changed, 1 insertion(+)
680
681
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
682
index 34c53b5..ca102ac 100644
683
--- src/stb_vorbis.h
684
+++ src/stb_vorbis.h
685
@@ -982,6 +982,7 @@ static void *make_block_array(void *mem, int count, int size)
686
 
687
 static void *setup_malloc(vorb *f, int sz)
688
 {
689
+   if (sz < 0 || INT_MAX - 7 < sz) return NULL;
690
    sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs.
691
    f->setup_memory_required += sz;
692
    if (f->alloc.alloc_buffer) {
693
694
From 09996c45b9d4d9601aa48fa1e872c6bb302f0ad9 Mon Sep 17 00:00:00 2001
695
From: Ozkan Sezer <sezeroz@gmail.com>
696
Date: Mon, 11 Dec 2023 05:50:10 +0300
697
Subject: [PATCH 10/17] stb_vorbis: fix CVE-2023-45679 and CVE-2023-45680.
698
MIME-Version: 1.0
699
Content-Type: text/plain; charset=UTF-8
700
Content-Transfer-Encoding: 8bit
701
702
Based on the patches by Jaroslav Lobačevski (@JarLob) submitted
703
to mainstream at: https://github.com/nothings/stb/pull/1557 and
704
https://github.com/nothings/stb/pull/1558
705
706
GHSL-2023-169/CVE-2023-45679: Attempt to free an uninitialized memory pointer in vorbis_deinit()
707
GHSL-2023-170/CVE-2023-45680: Null pointer dereference in vorbis_deinit()
708
---
709
 src/stb_vorbis.h | 9 +++++++--
710
 1 file changed, 7 insertions(+), 2 deletions(-)
711
712
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
713
index ca102ac..9ded38c 100644
714
--- src/stb_vorbis.h
715
+++ src/stb_vorbis.h
716
@@ -3747,8 +3747,13 @@ static int start_decoder(vorb *f)
717
    f->comment_list = NULL;
718
    if (f->comment_list_length > 0)
719
    {
720
-      f->comment_list = (char**) setup_malloc(f, sizeof(char*) * (f->comment_list_length));
721
-      if (f->comment_list == NULL)                  return error(f, VORBIS_outofmem);
722
+      len = sizeof(char*) * f->comment_list_length;
723
+      f->comment_list = (char**) setup_malloc(f, len);
724
+      if (f->comment_list == NULL) {
725
+         f->comment_list_length = 0;
726
+         return error(f, VORBIS_outofmem);
727
+      }
728
+      memset(f->comment_list, 0, len);
729
    }
730
 
731
    for(i=0; i < f->comment_list_length; ++i) {
732
733
From f04567f547a76fbd63f7271054aeaa7dd3659710 Mon Sep 17 00:00:00 2001
734
From: Ozkan Sezer <sezeroz@gmail.com>
735
Date: Mon, 11 Dec 2023 05:50:14 +0300
736
Subject: [PATCH 11/17] stb_vorbis: fix CVE-2023-45681 (integer overflow.)
737
MIME-Version: 1.0
738
Content-Type: text/plain; charset=UTF-8
739
Content-Transfer-Encoding: 8bit
740
741
Based on patch by Jaroslav Lobačevski (@JarLob) submitted to
742
mainstream at https://github.com/nothings/stb/pull/1559
743
744
GHSL-2023-171/CVE-2023-45681: Out of bounds heap buffer write
745
---
746
 src/stb_vorbis.h | 3 +++
747
 1 file changed, 3 insertions(+)
748
749
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
750
index 9ded38c..0d916e8 100644
751
--- src/stb_vorbis.h
752
+++ src/stb_vorbis.h
753
@@ -3747,9 +3747,12 @@ static int start_decoder(vorb *f)
754
    f->comment_list = NULL;
755
    if (f->comment_list_length > 0)
756
    {
757
+      if (INT_MAX / sizeof(char*) < f->comment_list_length)
758
+          goto no_comment;
759
       len = sizeof(char*) * f->comment_list_length;
760
       f->comment_list = (char**) setup_malloc(f, len);
761
       if (f->comment_list == NULL) {
762
+         no_comment:
763
          f->comment_list_length = 0;
764
          return error(f, VORBIS_outofmem);
765
       }
766
767
From 9ebcb8bb5f2ad9233022fa064c48dd91a707b0ac Mon Sep 17 00:00:00 2001
768
From: Ozkan Sezer <sezeroz@gmail.com>
769
Date: Mon, 11 Dec 2023 05:50:50 +0300
770
Subject: [PATCH 12/17] stb_vorbis: fix CVE-2023-45682
771
MIME-Version: 1.0
772
Content-Type: text/plain; charset=UTF-8
773
Content-Transfer-Encoding: 8bit
774
775
Based on patch by Jaroslav Lobačevski (@JarLob) submitted to
776
mainstream at https://github.com/nothings/stb/pull/1560
777
778
GHSL-2023-172/CVE-2023-45682: Wild address read in vorbis_decode_packet_rest()
779
---
780
 src/stb_vorbis.h | 2 +-
781
 1 file changed, 1 insertion(+), 1 deletion(-)
782
783
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
784
index 0d916e8..1b1a206 100644
785
--- src/stb_vorbis.h
786
+++ src/stb_vorbis.h
787
@@ -1838,7 +1838,7 @@ static int codebook_decode_scalar(vorb *f, Codebook *c)
788
 
789
 #define DECODE(var,f,c)                                       \
790
    DECODE_RAW(var,f,c)                                        \
791
-   if (c->sparse) var = c->sorted_values[var];
792
+   if (c->sparse && var >= 0) var = c->sorted_values[var];
793
 
794
 #ifndef STB_VORBIS_DIVIDES_IN_CODEBOOK
795
   #define DECODE_VQ(var,f,c)   DECODE_RAW(var,f,c)
796
797
From d372bfed324b27184ceaf878955429fe21c4fd8a Mon Sep 17 00:00:00 2001
798
From: Ozkan Sezer <sezeroz@gmail.com>
799
Date: Mon, 11 Dec 2023 08:51:10 +0300
800
Subject: [PATCH 13/17] SDL_sound_vorbis.c: error-out if the vorbis file has no
801
 samples.
802
803
---
804
 src/SDL_sound_vorbis.c | 4 +++-
805
 1 file changed, 3 insertions(+), 1 deletion(-)
806
807
diff --git a/src/SDL_sound_vorbis.c b/src/SDL_sound_vorbis.c
808
index c418831..ac44446 100644
809
--- src/SDL_sound_vorbis.c
810
+++ src/SDL_sound_vorbis.c
811
@@ -124,7 +124,9 @@ static int VORBIS_open(Sound_Sample *sample, const char *ext)
812
     sample->actual.rate = stb->sample_rate;
813
     num_frames = stb_vorbis_stream_length_in_samples(stb);
814
     if (!num_frames)
815
-        internal->total_time = -1;
816
+    {
817
+        BAIL_MACRO("VORBIS: No samples in ogg/vorbis stream.", 0);
818
+    }
819
     else
820
     {
821
         const unsigned int rate = stb->sample_rate;
822
823
From 7cc5fecbd78e4dabd9915d6e55cf565895ada116 Mon Sep 17 00:00:00 2001
824
From: Ozkan Sezer <sezeroz@gmail.com>
825
Date: Mon, 11 Dec 2023 08:55:40 +0300
826
Subject: [PATCH 14/17] stb_vorbis: revise CVE-2023-45676 / CVE-2023-45677 fix.
827
828
c.f.: https://github.com/nothings/stb/issues/1248.
829
---
830
 src/stb_vorbis.h | 2 +-
831
 1 file changed, 1 insertion(+), 1 deletion(-)
832
833
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
834
index 1b1a206..06a684c 100644
835
--- src/stb_vorbis.h
836
+++ src/stb_vorbis.h
837
@@ -982,7 +982,7 @@ static void *make_block_array(void *mem, int count, int size)
838
 
839
 static void *setup_malloc(vorb *f, int sz)
840
 {
841
-   if (sz < 0 || INT_MAX - 7 < sz) return NULL;
842
+   if (sz <= 0 || INT_MAX - 7 < sz) return NULL;
843
    sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs.
844
    f->setup_memory_required += sz;
845
    if (f->alloc.alloc_buffer) {
846
847
From 6ee6c835364360954847eda74824f141e1409775 Mon Sep 17 00:00:00 2001
848
From: Ozkan Sezer <sezeroz@gmail.com>
849
Date: Mon, 11 Dec 2023 11:37:04 +0300
850
Subject: [PATCH 15/17] stb_vorbis: apply CVE-2023-45676/CVE-2023-45677 fix to
851
 setup_temp_malloc
852
853
(c.f.: https://github.com/nothings/stb/issues/1248,
854
       https://github.com/nothings/stb/pull/1554 ,
855
       https://github.com/nothings/stb/pull/1555 )
856
---
857
 src/stb_vorbis.h | 4 ++++
858
 1 file changed, 4 insertions(+)
859
860
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
861
index 06a684c..cf33242 100644
862
--- src/stb_vorbis.h
863
+++ src/stb_vorbis.h
864
@@ -970,6 +970,8 @@ static int error(vorb *f, enum STBVorbisError e)
865
 // given a sufficiently large block of memory, make an array of pointers to subblocks of it
866
 static void *make_block_array(void *mem, int count, int size)
867
 {
868
+  if (!mem) return NULL;
869
+  else {
870
    int i;
871
    void ** p = (void **) mem;
872
    char *q = (char *) (p + count);
873
@@ -978,6 +980,7 @@ static void *make_block_array(void *mem, int count, int size)
874
       q += size;
875
    }
876
    return p;
877
+  }
878
 }
879
 
880
 static void *setup_malloc(vorb *f, int sz)
881
@@ -1002,6 +1005,7 @@ static void setup_free(vorb *f, void *p)
882
 
883
 static void *setup_temp_malloc(vorb *f, int sz)
884
 {
885
+   if (sz <= 0 || INT_MAX - 7 < sz) return NULL;
886
    sz = (sz+7) & ~7; // round up to nearest 8 for alignment of future allocs.
887
    if (f->alloc.alloc_buffer) {
888
       if (f->temp_offset - sz < f->setup_offset) return NULL;
889
890
From c5639414c1bb24fb4eef5861c13adb42a4aab950 Mon Sep 17 00:00:00 2001
891
From: Ozkan Sezer <sezeroz@gmail.com>
892
Date: Wed, 13 Dec 2023 08:00:02 +0300
893
Subject: [PATCH 16/17] stb_vorbis: sync with stb_vorbis SDL fork, and
894
 SDL_mixer
895
896
---
897
 src/SDL_sound_vorbis.c |  5 ++--
898
 src/stb_vorbis.h       | 63 ++++++++++++++++++++++++++++++++----------
899
 2 files changed, 51 insertions(+), 17 deletions(-)
900
901
diff --git a/src/SDL_sound_vorbis.c b/src/SDL_sound_vorbis.c
902
index ac44446..b427521 100644
903
--- src/SDL_sound_vorbis.c
904
+++ src/SDL_sound_vorbis.c
905
@@ -23,16 +23,17 @@
906
 #if SOUND_SUPPORTS_VORBIS
907
 
908
 /* Configure and include stb_vorbis for compiling... */
909
+#define STB_VORBIS_SDL 1 /* for SDL_sound-specific stuff. */
910
 #define STB_VORBIS_NO_STDIO 1
911
 #define STB_VORBIS_NO_CRT 1
912
 #define STB_VORBIS_NO_PUSHDATA_API 1
913
-#define STB_VORBIS_MAX_CHANNELS 6
914
+#define STB_VORBIS_MAX_CHANNELS 8   /* For 7.1 surround sound */
915
 #define STB_VORBIS_NO_COMMENTS 1
916
 #define STB_FORCEINLINE SDL_FORCE_INLINE
917
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
918
 #define STB_VORBIS_BIG_ENDIAN 1
919
 #endif
920
-#define STBV_CDECL SDLCALL /* for SDL_qsort */
921
+#define STBV_CDECL SDLCALL /* for SDL_qsort() */
922
 
923
 #if !defined(__clang_analyzer__)
924
 #ifdef assert
925
diff --git a/src/stb_vorbis.h b/src/stb_vorbis.h
926
index cf33242..8686bdf 100644
927
--- src/stb_vorbis.h
928
+++ src/stb_vorbis.h
929
@@ -21,6 +21,7 @@
930
 //
931
 // Feature contributors:
932
 //    Dougall Johnson (sample-exact seeking)
933
+//    Vitaly Novichkov (sample-accurate tell)
934
 //
935
 // Bugfix/warning contributors:
936
 //    Terje Mathisen     Niklas Frykholm     Andy Hill
937
@@ -150,8 +151,10 @@ typedef struct
938
 // get general information about the file
939
 extern stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f);
940
 
941
+#ifndef STB_VORBIS_NO_COMMENTS
942
 // get ogg comments
943
 extern stb_vorbis_comment stb_vorbis_get_comment(stb_vorbis *f);
944
+#endif
945
 
946
 // get the last error detected (clears it, too)
947
 extern int stb_vorbis_get_error(stb_vorbis *f);
948
@@ -166,6 +169,12 @@ extern void stb_vorbis_close(stb_vorbis *f);
949
 // NOT WORKING YET after a seek with PULLDATA API
950
 extern int stb_vorbis_get_sample_offset(stb_vorbis *f);
951
 
952
+//  this function returns the count of returned samples from the beginning of the
953
+//  file. Functions "stb_vorbis_get_samples_*", "stb_vorbis_seek_*()" will
954
+//  affect the returned value. Use this call to get the accurate sample position
955
+//  during playback.
956
+extern int stb_vorbis_get_playback_sample_offset(stb_vorbis *f);
957
+
958
 // returns the current seek point within the file, or offset from the beginning
959
 // of the memory buffer. In pushdata mode it returns 0.
960
 extern unsigned int stb_vorbis_get_file_offset(stb_vorbis *f);
961
@@ -296,7 +305,7 @@ extern stb_vorbis * stb_vorbis_open_file_section(FILE *f, int close_handle_on_cl
962
 // confused.
963
 #endif
964
 
965
-#ifdef __SDL_SOUND_INTERNAL__
966
+#ifdef STB_VORBIS_SDL
967
 extern stb_vorbis * stb_vorbis_open_rwops_section(SDL_RWops *rwops, int close_on_free, int *error, const stb_vorbis_alloc *alloc, unsigned int length);
968
 extern stb_vorbis * stb_vorbis_open_rwops(SDL_RWops *rwops, int close_on_free, int *error, const stb_vorbis_alloc *alloc);
969
 #endif
970
@@ -551,10 +560,12 @@ enum STBVorbisError
971
 // #define STB_VORBIS_NO_DEFER_FLOOR
972
 
973
 // STB_VORBIS_NO_COMMENTS
974
-//     disables reading and storing user comments
975
+//     Disables reading and storing user comments.
976
 // #define STB_VORBIS_NO_COMMENTS
977
 
978
 
979
+
980
+
981
 //////////////////////////////////////////////////////////////////////////////
982
 
983
 #ifdef STB_VORBIS_NO_PULLDATA_API
984
@@ -637,7 +648,7 @@ enum STBVorbisError
985
 #define MAX_BLOCKSIZE_LOG  13   // from specification
986
 #define MAX_BLOCKSIZE      (1 << MAX_BLOCKSIZE_LOG)
987
 
988
-#ifdef __SDL_SOUND_INTERNAL__
989
+#ifdef STB_VORBIS_SDL
990
 typedef Uint8 uint8;
991
 typedef Sint8 int8;
992
 typedef Uint16 uint16;
993
@@ -768,7 +779,6 @@ typedef struct
994
 
995
 typedef struct
996
 {
997
-  // https://github.com/nothings/stb/pull/1312
998
    MappingChannel *chan;
999
    uint16 coupling_steps;
1000
    uint8  submaps;
1001
@@ -821,7 +831,7 @@ struct stb_vorbis
1002
    uint32 f_start;
1003
    int close_on_free;
1004
 #endif
1005
-#ifdef __SDL_SOUND_INTERNAL__
1006
+#ifdef STB_VORBIS_SDL
1007
    SDL_RWops *rwops;
1008
    uint32 rwops_start;
1009
    int close_on_free;
1010
@@ -887,6 +897,9 @@ struct stb_vorbis
1011
    uint32 current_loc; // sample location of next frame to decode
1012
    int    current_loc_valid;
1013
 
1014
+   int32  current_playback_loc; // sample location of played samples
1015
+   int    current_playback_loc_valid;
1016
+
1017
   // per-blocksize precomputed data
1018
 
1019
    // twiddle factors
1020
@@ -1374,7 +1387,7 @@ static int STBV_CDECL point_compare(const void *p, const void *q)
1021
 /////////////////////// END LEAF SETUP FUNCTIONS //////////////////////////
1022
 
1023
 
1024
-#ifdef __SDL_SOUND_INTERNAL__
1025
+#ifdef STB_VORBIS_SDL
1026
    #define USE_MEMORY(z)    FALSE
1027
 #elif defined(STB_VORBIS_NO_STDIO)
1028
    #define USE_MEMORY(z)    TRUE
1029
@@ -1384,7 +1397,7 @@ static int STBV_CDECL point_compare(const void *p, const void *q)
1030
 
1031
 static uint8 get8(vorb *z)
1032
 {
1033
-   #ifdef __SDL_SOUND_INTERNAL__
1034
+   #ifdef STB_VORBIS_SDL
1035
    uint8 c;
1036
    if (SDL_RWread(z->rwops, &c, 1, 1) != 1) { z->eof = TRUE; return 0; }
1037
    return c;
1038
@@ -1417,7 +1430,7 @@ static uint32 get32(vorb *f)
1039
 
1040
 static int getn(vorb *z, uint8 *data, int n)
1041
 {
1042
-   #ifdef __SDL_SOUND_INTERNAL__
1043
+   #ifdef STB_VORBIS_SDL
1044
    if (SDL_RWread(z->rwops, data, n, 1) == 1) return 1;
1045
    z->eof = 1;
1046
    return 0;
1047
@@ -1443,7 +1456,7 @@ static int getn(vorb *z, uint8 *data, int n)
1048
 
1049
 static void skip(vorb *z, int n)
1050
 {
1051
-   #ifdef __SDL_SOUND_INTERNAL__
1052
+   #ifdef STB_VORBIS_SDL
1053
    SDL_RWseek(z->rwops, n, RW_SEEK_CUR);
1054
 
1055
    #else
1056
@@ -1469,7 +1482,7 @@ static int set_file_offset(stb_vorbis *f, unsigned int loc)
1057
    #endif
1058
    f->eof = 0;
1059
 
1060
-   #ifdef __SDL_SOUND_INTERNAL__
1061
+   #ifdef STB_VORBIS_SDL
1062
    if (loc + f->rwops_start < loc || loc >= 0x80000000) {
1063
       loc = 0x7fffffff;
1064
       f->eof = 1;
1065
@@ -3601,6 +3614,8 @@ static int vorbis_pump_first_frame(stb_vorbis *f)
1066
    res = vorbis_decode_packet(f, &len, &left, &right);
1067
    if (res)
1068
       vorbis_finish_frame(f, len, left, right);
1069
+   f->current_playback_loc = 0;
1070
+   f->current_playback_loc_valid = TRUE;
1071
    return res;
1072
 }
1073
 
1074
@@ -4392,7 +4407,7 @@ static void vorbis_deinit(stb_vorbis *p)
1075
       setup_temp_free(p, &p->temp_values, 0);
1076
       setup_temp_free(p, &p->temp_mults, 0);
1077
    }
1078
-   #ifdef __SDL_SOUND_INTERNAL__
1079
+   #ifdef STB_VORBIS_SDL
1080
    if (p->close_on_free) SDL_RWclose(p->rwops);
1081
    #endif
1082
    #ifndef STB_VORBIS_NO_STDIO
1083
@@ -4420,7 +4435,7 @@ static void vorbis_init(stb_vorbis *p, const stb_vorbis_alloc *z)
1084
    p->stream = NULL;
1085
    p->codebooks = NULL;
1086
    p->page_crc_tests = -1;
1087
-   #ifdef __SDL_SOUND_INTERNAL__
1088
+   #ifdef STB_VORBIS_SDL
1089
    p->close_on_free = FALSE;
1090
    p->rwops = NULL;
1091
    #endif
1092
@@ -4438,6 +4453,14 @@ int stb_vorbis_get_sample_offset(stb_vorbis *f)
1093
       return -1;
1094
 }
1095
 
1096
+int stb_vorbis_get_playback_sample_offset(stb_vorbis *f)
1097
+{
1098
+   if (f->current_playback_loc_valid)
1099
+      return f->current_playback_loc;
1100
+   else
1101
+      return -1;
1102
+}
1103
+
1104
 stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f)
1105
 {
1106
    stb_vorbis_info d;
1107
@@ -4685,7 +4708,7 @@ unsigned int stb_vorbis_get_file_offset(stb_vorbis *f)
1108
    #ifndef STB_VORBIS_NO_PUSHDATA_API
1109
    if (f->push_mode) return 0;
1110
    #endif
1111
-   #ifdef __SDL_SOUND_INTERNAL__
1112
+   #ifdef STB_VORBIS_SDL
1113
    return (unsigned int) (SDL_RWtell(f->rwops) - f->rwops_start);
1114
    #else
1115
    if (USE_MEMORY(f)) return (unsigned int) (f->stream - f->stream_start);
1116
@@ -5058,13 +5081,16 @@ int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number)
1117
    }
1118
    // the next frame should start with the sample
1119
    if (f->current_loc != sample_number) return error(f, VORBIS_seek_failed);
1120
+   f->current_playback_loc = sample_number;
1121
    return 1;
1122
 }
1123
 
1124
 int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number)
1125
 {
1126
-   if (!stb_vorbis_seek_frame(f, sample_number))
1127
+   if (!stb_vorbis_seek_frame(f, sample_number)) {
1128
+      f->current_playback_loc_valid = FALSE;
1129
       return 0;
1130
+   }
1131
 
1132
    if (sample_number != f->current_loc) {
1133
       int n;
1134
@@ -5075,6 +5101,9 @@ int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number)
1135
       f->channel_buffer_start += (sample_number - frame_start);
1136
    }
1137
 
1138
+   f->current_playback_loc_valid = TRUE;
1139
+   f->current_playback_loc = sample_number;
1140
+
1141
    return 1;
1142
 }
1143
 
1144
@@ -5241,7 +5270,7 @@ stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const st
1145
 }
1146
 #endif // STB_VORBIS_NO_STDIO
1147
 
1148
-#ifdef __SDL_SOUND_INTERNAL__
1149
+#ifdef STB_VORBIS_SDL
1150
 stb_vorbis * stb_vorbis_open_rwops_section(SDL_RWops *rwops, int close_on_free, int *error, const stb_vorbis_alloc *alloc, unsigned int length)
1151
 {
1152
    stb_vorbis *f, p;
1153
@@ -5499,6 +5528,7 @@ int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short
1154
       if (n == len) break;
1155
       if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break;
1156
    }
1157
+   f->current_playback_loc += n;
1158
    return n;
1159
 }
1160
 
1161
@@ -5516,6 +5546,7 @@ int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, in
1162
       if (n == len) break;
1163
       if (!stb_vorbis_get_frame_float(f, NULL, &outputs)) break;
1164
    }
1165
+   f->current_playback_loc += n;
1166
    return n;
1167
 }
1168
 
1169
@@ -5624,6 +5655,7 @@ int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float
1170
       if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
1171
          break;
1172
    }
1173
+   f->current_playback_loc += n;
1174
    return n;
1175
 }
1176
 
1177
@@ -5650,6 +5682,7 @@ int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, in
1178
       if (!stb_vorbis_get_frame_float(f, NULL, &outputs))
1179
          break;
1180
    }
1181
+   f->current_playback_loc += n;
1182
    return n;
1183
 }
1184
 #endif // STB_VORBIS_NO_PULLDATA_API
1185
1186
From fdcecafbfdcbdd2b77c5b591948c237df19c864e Mon Sep 17 00:00:00 2001
1187
From: Sepcnt <sepcnt@proton.me>
1188
Date: Fri, 19 Jan 2024 00:08:17 +0800
1189
Subject: [PATCH 17/17] Update CMakeLists.txt, add option for docs
1190
1191
Add SDLSOUND_BUILD_DOCS option to control whether build docs
1192
---
1193
 CMakeLists.txt | 48 +++++++++++++++++++++++++++---------------------
1194
 1 file changed, 27 insertions(+), 21 deletions(-)
1195
1196
diff --git a/CMakeLists.txt b/CMakeLists.txt
1197
index 1e08345..f755820 100644
1198
--- CMakeLists.txt
1199
+++ CMakeLists.txt
1200
@@ -353,27 +353,32 @@ install(FILES src/SDL_sound.h
1201
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/SDL2_sound.pc
1202
     DESTINATION "${PKGCONFIG_INSTALLDIR}")
1203
 
1204
-find_package(Doxygen)
1205
-if(DOXYGEN_FOUND)
1206
-    set(SDLSOUND_OUTPUT_DOXYFILE "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
1207
-    configure_file(
1208
-        "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile"
1209
-        "${SDLSOUND_OUTPUT_DOXYFILE}"
1210
-        COPYONLY
1211
-    )
1212
-    file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "\n\n# Below auto-generated by cmake...\n\n")
1213
-    file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "PROJECT_NUMBER = \"${SDLSOUND_VERSION}\"\n")
1214
-    file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "OUTPUT_DIRECTORY = \"${CMAKE_CURRENT_BINARY_DIR}/docs\"\n")
1215
-    file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "\n# End auto-generated section.\n\n")
1216
-
1217
-    add_custom_target(
1218
-        SDL2_sound-docs
1219
-        ${DOXYGEN_EXECUTABLE} "${SDLSOUND_OUTPUT_DOXYFILE}"
1220
-        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
1221
-        COMMENT "Building documentation..."
1222
-    )
1223
-else()
1224
-    message(STATUS "Doxygen not found. You won't be able to build documentation.")
1225
+option(SDLSOUND_BUILD_DOCS "Build documentation" TRUE)
1226
+mark_as_advanced(SDLSOUND_BUILD_DOCS)
1227
+
1228
+if(SDLSOUND_BUILD_DOCS)
1229
+    find_package(Doxygen)
1230
+    if(DOXYGEN_FOUND)
1231
+        set(SDLSOUND_OUTPUT_DOXYFILE "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
1232
+        configure_file(
1233
+            "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile"
1234
+            "${SDLSOUND_OUTPUT_DOXYFILE}"
1235
+            COPYONLY
1236
+        )
1237
+        file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "\n\n# Below auto-generated by cmake...\n\n")
1238
+        file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "PROJECT_NUMBER = \"${SDLSOUND_VERSION}\"\n")
1239
+        file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "OUTPUT_DIRECTORY = \"${CMAKE_CURRENT_BINARY_DIR}/docs\"\n")
1240
+        file(APPEND "${SDLSOUND_OUTPUT_DOXYFILE}" "\n# End auto-generated section.\n\n")
1241
+
1242
+        add_custom_target(
1243
+            SDL2_sound-docs
1244
+            ${DOXYGEN_EXECUTABLE} "${SDLSOUND_OUTPUT_DOXYFILE}"
1245
+            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
1246
+            COMMENT "Building documentation..."
1247
+        )
1248
+    else()
1249
+        message(STATUS "Doxygen not found. You won't be able to build documentation.")
1250
+    endif()
1251
 endif()
1252
 
1253
 configure_file(
1254
@@ -412,6 +417,7 @@ message_bool_option("COREAUDIO support" SDLSOUND_DECODER_COREAUDIO)
1255
 message_bool_option("Build static library" SDLSOUND_BUILD_STATIC)
1256
 message_bool_option("Build shared library" SDLSOUND_BUILD_SHARED)
1257
 message_bool_option("Build stdio test program" SDLSOUND_BUILD_TEST)
1258
+message_bool_option("Build documentation" SDLSOUND_BUILD_DOCS)
1259
 
1260
 # Make sure SDL2_sound::SDL2_sound always exists
1261
 if(TARGET SDL2_sound::SDL2_sound-static AND NOT TARGET SDL2_sound::SDL2_sound)

Return to bug 278491