/src/flac/include/share/alloc.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* alloc - Convenience routines for safely allocating memory |
2 | | * Copyright (C) 2007-2009 Josh Coalson |
3 | | * Copyright (C) 2011-2025 Xiph.Org Foundation |
4 | | * |
5 | | * Redistribution and use in source and binary forms, with or without |
6 | | * modification, are permitted provided that the following conditions |
7 | | * are met: |
8 | | * |
9 | | * - Redistributions of source code must retain the above copyright |
10 | | * notice, this list of conditions and the following disclaimer. |
11 | | * |
12 | | * - Redistributions in binary form must reproduce the above copyright |
13 | | * notice, this list of conditions and the following disclaimer in the |
14 | | * documentation and/or other materials provided with the distribution. |
15 | | * |
16 | | * - Neither the name of the Xiph.org Foundation nor the names of its |
17 | | * contributors may be used to endorse or promote products derived from |
18 | | * this software without specific prior written permission. |
19 | | * |
20 | | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
21 | | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
22 | | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
23 | | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR |
24 | | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
25 | | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
26 | | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
27 | | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
28 | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
29 | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
30 | | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
31 | | */ |
32 | | |
33 | | #ifndef FLAC__SHARE__ALLOC_H |
34 | | #define FLAC__SHARE__ALLOC_H |
35 | | |
36 | | #ifdef HAVE_CONFIG_H |
37 | | # include <config.h> |
38 | | #endif |
39 | | |
40 | | /* WATCHOUT: for c++ you may have to #define __STDC_LIMIT_MACROS 1 real early |
41 | | * before #including this file, otherwise SIZE_MAX might not be defined |
42 | | */ |
43 | | |
44 | | #include <limits.h> /* for SIZE_MAX */ |
45 | | #ifdef HAVE_STDINT_H |
46 | | #include <stdint.h> /* for SIZE_MAX in case limits.h didn't get it */ |
47 | | #endif |
48 | | #include <stdlib.h> /* for size_t, malloc(), etc */ |
49 | | #include "share/compat.h" |
50 | | |
51 | | #ifndef SIZE_MAX |
52 | | # ifndef SIZE_T_MAX |
53 | | # ifdef _MSC_VER |
54 | | # ifdef _WIN64 |
55 | | # define SIZE_T_MAX FLAC__U64L(0xffffffffffffffff) |
56 | | # else |
57 | | # define SIZE_T_MAX 0xffffffff |
58 | | # endif |
59 | | # else |
60 | | # error |
61 | | # endif |
62 | | # endif |
63 | | # define SIZE_MAX SIZE_T_MAX |
64 | | #endif |
65 | | |
66 | | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
67 | | |
68 | | extern int alloc_check_threshold, alloc_check_counter, alloc_check_keep_failing; |
69 | | |
70 | 217k | static inline int alloc_check(void) { |
71 | 217k | if(alloc_check_threshold == INT32_MAX) |
72 | 217k | return 0; |
73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) |
74 | 0 | return 1; |
75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) |
76 | 0 | return 1; |
77 | 0 | else { |
78 | 0 | return 0; |
79 | 0 | } |
80 | 217k | } metadata_object.c:alloc_check Line | Count | Source | 70 | 24.0k | static inline int alloc_check(void) { | 71 | 24.0k | if(alloc_check_threshold == INT32_MAX) | 72 | 24.0k | return 0; | 73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) | 74 | 0 | return 1; | 75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) | 76 | 0 | return 1; | 77 | 0 | else { | 78 | 0 | return 0; | 79 | 0 | } | 80 | 24.0k | } |
stream_decoder.c:alloc_check Line | Count | Source | 70 | 139k | static inline int alloc_check(void) { | 71 | 139k | if(alloc_check_threshold == INT32_MAX) | 72 | 139k | return 0; | 73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) | 74 | 0 | return 1; | 75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) | 76 | 0 | return 1; | 77 | 0 | else { | 78 | 0 | return 0; | 79 | 0 | } | 80 | 139k | } |
ogg_decoder_aspect.c:alloc_check Line | Count | Source | 70 | 6.16k | static inline int alloc_check(void) { | 71 | 6.16k | if(alloc_check_threshold == INT32_MAX) | 72 | 6.16k | return 0; | 73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) | 74 | 0 | return 1; | 75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) | 76 | 0 | return 1; | 77 | 0 | else { | 78 | 0 | return 0; | 79 | 0 | } | 80 | 6.16k | } |
Unexecuted instantiation: bitwriter.c:alloc_check Line | Count | Source | 70 | 8.28k | static inline int alloc_check(void) { | 71 | 8.28k | if(alloc_check_threshold == INT32_MAX) | 72 | 8.28k | return 0; | 73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) | 74 | 0 | return 1; | 75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) | 76 | 0 | return 1; | 77 | 0 | else { | 78 | 0 | return 0; | 79 | 0 | } | 80 | 8.28k | } |
Line | Count | Source | 70 | 2.46k | static inline int alloc_check(void) { | 71 | 2.46k | if(alloc_check_threshold == INT32_MAX) | 72 | 2.46k | return 0; | 73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) | 74 | 0 | return 1; | 75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) | 76 | 0 | return 1; | 77 | 0 | else { | 78 | 0 | return 0; | 79 | 0 | } | 80 | 2.46k | } |
Line | Count | Source | 70 | 37.3k | static inline int alloc_check(void) { | 71 | 37.3k | if(alloc_check_threshold == INT32_MAX) | 72 | 37.3k | return 0; | 73 | 0 | else if(alloc_check_counter++ == alloc_check_threshold) | 74 | 0 | return 1; | 75 | 0 | else if(alloc_check_keep_failing && (alloc_check_counter > alloc_check_threshold)) | 76 | 0 | return 1; | 77 | 0 | else { | 78 | 0 | return 0; | 79 | 0 | } | 80 | 37.3k | } |
Unexecuted instantiation: metadata.cpp:alloc_check() Unexecuted instantiation: metadata_iterators.c:alloc_check |
81 | | |
82 | | #endif |
83 | | |
84 | | /* avoid malloc()ing 0 bytes, see: |
85 | | * https://www.securecoding.cert.org/confluence/display/seccode/MEM04-A.+Do+not+make+assumptions+about+the+result+of+allocating+0+bytes?focusedCommentId=5407003 |
86 | | */ |
87 | | |
88 | | static inline void *safe_malloc_(size_t size) |
89 | 113k | { |
90 | 113k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
91 | | /* Fail if requested */ |
92 | 113k | if(alloc_check()) |
93 | 0 | return NULL; |
94 | 113k | #endif |
95 | | /* malloc(0) is undefined; FLAC src convention is to always allocate */ |
96 | 113k | if(!size) |
97 | 1.32k | size++; |
98 | 113k | return malloc(size); |
99 | 113k | } metadata_object.c:safe_malloc_ Line | Count | Source | 89 | 20.1k | { | 90 | 20.1k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 91 | | /* Fail if requested */ | 92 | 20.1k | if(alloc_check()) | 93 | 0 | return NULL; | 94 | 20.1k | #endif | 95 | | /* malloc(0) is undefined; FLAC src convention is to always allocate */ | 96 | 20.1k | if(!size) | 97 | 0 | size++; | 98 | 20.1k | return malloc(size); | 99 | 20.1k | } |
stream_decoder.c:safe_malloc_ Line | Count | Source | 89 | 55.7k | { | 90 | 55.7k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 91 | | /* Fail if requested */ | 92 | 55.7k | if(alloc_check()) | 93 | 0 | return NULL; | 94 | 55.7k | #endif | 95 | | /* malloc(0) is undefined; FLAC src convention is to always allocate */ | 96 | 55.7k | if(!size) | 97 | 1.32k | size++; | 98 | 55.7k | return malloc(size); | 99 | 55.7k | } |
Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_ Unexecuted instantiation: bitwriter.c:safe_malloc_ Unexecuted instantiation: format.c:safe_malloc_ Unexecuted instantiation: md5.c:safe_malloc_ Line | Count | Source | 89 | 37.3k | { | 90 | 37.3k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 91 | | /* Fail if requested */ | 92 | 37.3k | if(alloc_check()) | 93 | 0 | return NULL; | 94 | 37.3k | #endif | 95 | | /* malloc(0) is undefined; FLAC src convention is to always allocate */ | 96 | 37.3k | if(!size) | 97 | 0 | size++; | 98 | 37.3k | return malloc(size); | 99 | 37.3k | } |
Unexecuted instantiation: metadata.cpp:safe_malloc_(unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_ |
100 | | |
101 | | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
102 | | static inline void *malloc_(size_t size) |
103 | 37.3k | { |
104 | | /* Fail if requested */ |
105 | 37.3k | if(alloc_check()) |
106 | 0 | return NULL; |
107 | 37.3k | return malloc(size); |
108 | 37.3k | } Unexecuted instantiation: metadata_object.c:malloc_ Line | Count | Source | 103 | 37.3k | { | 104 | | /* Fail if requested */ | 105 | 37.3k | if(alloc_check()) | 106 | 0 | return NULL; | 107 | 37.3k | return malloc(size); | 108 | 37.3k | } |
Unexecuted instantiation: ogg_decoder_aspect.c:malloc_ Unexecuted instantiation: bitwriter.c:malloc_ Unexecuted instantiation: format.c:malloc_ Unexecuted instantiation: md5.c:malloc_ Unexecuted instantiation: memory.c:malloc_ Unexecuted instantiation: metadata.cpp:malloc_(unsigned long) Unexecuted instantiation: metadata_iterators.c:malloc_ |
109 | | #else |
110 | | #define malloc_ malloc |
111 | | #endif |
112 | | |
113 | | |
114 | | |
115 | | static inline void *safe_calloc_(size_t nmemb, size_t size) |
116 | 47.9k | { |
117 | 47.9k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
118 | | /* Fail if requested */ |
119 | 47.9k | if(alloc_check()) |
120 | 0 | return NULL; |
121 | 47.9k | #endif |
122 | 47.9k | if(!nmemb || !size) |
123 | 0 | return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ |
124 | 47.9k | return calloc(nmemb, size); |
125 | 47.9k | } metadata_object.c:safe_calloc_ Line | Count | Source | 116 | 3.89k | { | 117 | 3.89k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 118 | | /* Fail if requested */ | 119 | 3.89k | if(alloc_check()) | 120 | 0 | return NULL; | 121 | 3.89k | #endif | 122 | 3.89k | if(!nmemb || !size) | 123 | 0 | return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ | 124 | 3.89k | return calloc(nmemb, size); | 125 | 3.89k | } |
stream_decoder.c:safe_calloc_ Line | Count | Source | 116 | 44.1k | { | 117 | 44.1k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 118 | | /* Fail if requested */ | 119 | 44.1k | if(alloc_check()) | 120 | 0 | return NULL; | 121 | 44.1k | #endif | 122 | 44.1k | if(!nmemb || !size) | 123 | 0 | return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ | 124 | 44.1k | return calloc(nmemb, size); | 125 | 44.1k | } |
Unexecuted instantiation: ogg_decoder_aspect.c:safe_calloc_ Unexecuted instantiation: bitwriter.c:safe_calloc_ Unexecuted instantiation: format.c:safe_calloc_ Unexecuted instantiation: md5.c:safe_calloc_ Unexecuted instantiation: memory.c:safe_calloc_ Unexecuted instantiation: metadata.cpp:safe_calloc_(unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_calloc_ |
126 | | |
127 | | /*@@@@ there's probably a better way to prevent overflows when allocating untrusted sums but this works for now */ |
128 | | |
129 | | static inline void *safe_malloc_add_2op_(size_t size1, size_t size2) |
130 | 90.7k | { |
131 | 90.7k | size2 += size1; |
132 | 90.7k | if(size2 < size1) |
133 | 0 | return 0; |
134 | 90.7k | return safe_malloc_(size2); |
135 | 90.7k | } metadata_object.c:safe_malloc_add_2op_ Line | Count | Source | 130 | 7.70k | { | 131 | 7.70k | size2 += size1; | 132 | 7.70k | if(size2 < size1) | 133 | 0 | return 0; | 134 | 7.70k | return safe_malloc_(size2); | 135 | 7.70k | } |
stream_decoder.c:safe_malloc_add_2op_ Line | Count | Source | 130 | 45.7k | { | 131 | 45.7k | size2 += size1; | 132 | 45.7k | if(size2 < size1) | 133 | 0 | return 0; | 134 | 45.7k | return safe_malloc_(size2); | 135 | 45.7k | } |
Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_add_2op_ Unexecuted instantiation: bitwriter.c:safe_malloc_add_2op_ Unexecuted instantiation: format.c:safe_malloc_add_2op_ Unexecuted instantiation: md5.c:safe_malloc_add_2op_ memory.c:safe_malloc_add_2op_ Line | Count | Source | 130 | 37.3k | { | 131 | 37.3k | size2 += size1; | 132 | 37.3k | if(size2 < size1) | 133 | 0 | return 0; | 134 | 37.3k | return safe_malloc_(size2); | 135 | 37.3k | } |
Unexecuted instantiation: metadata.cpp:safe_malloc_add_2op_(unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_add_2op_ |
136 | | |
137 | | static inline void *safe_malloc_add_3op_(size_t size1, size_t size2, size_t size3) |
138 | 0 | { |
139 | 0 | size2 += size1; |
140 | 0 | if(size2 < size1) |
141 | 0 | return 0; |
142 | 0 | size3 += size2; |
143 | 0 | if(size3 < size2) |
144 | 0 | return 0; |
145 | 0 | return safe_malloc_(size3); |
146 | 0 | } Unexecuted instantiation: metadata_object.c:safe_malloc_add_3op_ Unexecuted instantiation: stream_decoder.c:safe_malloc_add_3op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_add_3op_ Unexecuted instantiation: bitwriter.c:safe_malloc_add_3op_ Unexecuted instantiation: format.c:safe_malloc_add_3op_ Unexecuted instantiation: md5.c:safe_malloc_add_3op_ Unexecuted instantiation: memory.c:safe_malloc_add_3op_ Unexecuted instantiation: metadata.cpp:safe_malloc_add_3op_(unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_add_3op_ |
147 | | |
148 | | static inline void *safe_malloc_add_4op_(size_t size1, size_t size2, size_t size3, size_t size4) |
149 | 0 | { |
150 | 0 | size2 += size1; |
151 | 0 | if(size2 < size1) |
152 | 0 | return 0; |
153 | 0 | size3 += size2; |
154 | 0 | if(size3 < size2) |
155 | 0 | return 0; |
156 | 0 | size4 += size3; |
157 | 0 | if(size4 < size3) |
158 | 0 | return 0; |
159 | 0 | return safe_malloc_(size4); |
160 | 0 | } Unexecuted instantiation: metadata_object.c:safe_malloc_add_4op_ Unexecuted instantiation: stream_decoder.c:safe_malloc_add_4op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_add_4op_ Unexecuted instantiation: bitwriter.c:safe_malloc_add_4op_ Unexecuted instantiation: format.c:safe_malloc_add_4op_ Unexecuted instantiation: md5.c:safe_malloc_add_4op_ Unexecuted instantiation: memory.c:safe_malloc_add_4op_ Unexecuted instantiation: metadata.cpp:safe_malloc_add_4op_(unsigned long, unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_add_4op_ |
161 | | |
162 | | void *safe_malloc_mul_2op_(size_t size1, size_t size2) ; |
163 | | |
164 | | static inline void *safe_malloc_mul_3op_(size_t size1, size_t size2, size_t size3) |
165 | 0 | { |
166 | 0 | if(!size1 || !size2 || !size3) |
167 | 0 | return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ |
168 | 0 | if(size1 > SIZE_MAX / size2) |
169 | 0 | return 0; |
170 | 0 | size1 *= size2; |
171 | 0 | if(size1 > SIZE_MAX / size3) |
172 | 0 | return 0; |
173 | 0 | return malloc_(size1*size3); |
174 | 0 | } Unexecuted instantiation: metadata_object.c:safe_malloc_mul_3op_ Unexecuted instantiation: stream_decoder.c:safe_malloc_mul_3op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_mul_3op_ Unexecuted instantiation: bitwriter.c:safe_malloc_mul_3op_ Unexecuted instantiation: format.c:safe_malloc_mul_3op_ Unexecuted instantiation: md5.c:safe_malloc_mul_3op_ Unexecuted instantiation: memory.c:safe_malloc_mul_3op_ Unexecuted instantiation: metadata.cpp:safe_malloc_mul_3op_(unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_mul_3op_ |
175 | | |
176 | | /* size1*size2 + size3 */ |
177 | | static inline void *safe_malloc_mul2add_(size_t size1, size_t size2, size_t size3) |
178 | 0 | { |
179 | 0 | if(!size1 || !size2) |
180 | 0 | return safe_malloc_(size3); |
181 | 0 | if(size1 > SIZE_MAX / size2) |
182 | 0 | return 0; |
183 | 0 | return safe_malloc_add_2op_(size1*size2, size3); |
184 | 0 | } Unexecuted instantiation: metadata_object.c:safe_malloc_mul2add_ Unexecuted instantiation: stream_decoder.c:safe_malloc_mul2add_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_mul2add_ Unexecuted instantiation: bitwriter.c:safe_malloc_mul2add_ Unexecuted instantiation: format.c:safe_malloc_mul2add_ Unexecuted instantiation: md5.c:safe_malloc_mul2add_ Unexecuted instantiation: memory.c:safe_malloc_mul2add_ Unexecuted instantiation: metadata.cpp:safe_malloc_mul2add_(unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_mul2add_ |
185 | | |
186 | | /* size1 * (size2 + size3) */ |
187 | | static inline void *safe_malloc_muladd2_(size_t size1, size_t size2, size_t size3) |
188 | 37.3k | { |
189 | 37.3k | if(!size1 || (!size2 && !size3)) |
190 | 0 | return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ |
191 | 37.3k | size2 += size3; |
192 | 37.3k | if(size2 < size3) |
193 | 0 | return 0; |
194 | 37.3k | if(size1 > SIZE_MAX / size2) |
195 | 0 | return 0; |
196 | 37.3k | return malloc_(size1*size2); |
197 | 37.3k | } Unexecuted instantiation: metadata_object.c:safe_malloc_muladd2_ stream_decoder.c:safe_malloc_muladd2_ Line | Count | Source | 188 | 37.3k | { | 189 | 37.3k | if(!size1 || (!size2 && !size3)) | 190 | 0 | return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ | 191 | 37.3k | size2 += size3; | 192 | 37.3k | if(size2 < size3) | 193 | 0 | return 0; | 194 | 37.3k | if(size1 > SIZE_MAX / size2) | 195 | 0 | return 0; | 196 | 37.3k | return malloc_(size1*size2); | 197 | 37.3k | } |
Unexecuted instantiation: ogg_decoder_aspect.c:safe_malloc_muladd2_ Unexecuted instantiation: bitwriter.c:safe_malloc_muladd2_ Unexecuted instantiation: format.c:safe_malloc_muladd2_ Unexecuted instantiation: md5.c:safe_malloc_muladd2_ Unexecuted instantiation: memory.c:safe_malloc_muladd2_ Unexecuted instantiation: metadata.cpp:safe_malloc_muladd2_(unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_malloc_muladd2_ |
198 | | |
199 | | static inline void *safe_realloc_(void *ptr, size_t size) |
200 | 14.1k | { |
201 | 14.1k | void *oldptr; |
202 | 14.1k | void *newptr; |
203 | 14.1k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
204 | | /* Fail if requested */ |
205 | 14.1k | if(alloc_check() && size > 0) { |
206 | 0 | free(ptr); |
207 | 0 | return NULL; |
208 | 0 | } |
209 | 14.1k | #endif |
210 | 14.1k | oldptr = ptr; |
211 | 14.1k | newptr = realloc(ptr, size); |
212 | 14.1k | if(size > 0 && newptr == 0) |
213 | 0 | free(oldptr); |
214 | 14.1k | return newptr; |
215 | 14.1k | } Unexecuted instantiation: metadata_object.c:safe_realloc_ stream_decoder.c:safe_realloc_ Line | Count | Source | 200 | 2.35k | { | 201 | 2.35k | void *oldptr; | 202 | 2.35k | void *newptr; | 203 | 2.35k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 204 | | /* Fail if requested */ | 205 | 2.35k | if(alloc_check() && size > 0) { | 206 | 0 | free(ptr); | 207 | 0 | return NULL; | 208 | 0 | } | 209 | 2.35k | #endif | 210 | 2.35k | oldptr = ptr; | 211 | 2.35k | newptr = realloc(ptr, size); | 212 | 2.35k | if(size > 0 && newptr == 0) | 213 | 0 | free(oldptr); | 214 | 2.35k | return newptr; | 215 | 2.35k | } |
ogg_decoder_aspect.c:safe_realloc_ Line | Count | Source | 200 | 1.07k | { | 201 | 1.07k | void *oldptr; | 202 | 1.07k | void *newptr; | 203 | 1.07k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 204 | | /* Fail if requested */ | 205 | 1.07k | if(alloc_check() && size > 0) { | 206 | 0 | free(ptr); | 207 | 0 | return NULL; | 208 | 0 | } | 209 | 1.07k | #endif | 210 | 1.07k | oldptr = ptr; | 211 | 1.07k | newptr = realloc(ptr, size); | 212 | 1.07k | if(size > 0 && newptr == 0) | 213 | 0 | free(oldptr); | 214 | 1.07k | return newptr; | 215 | 1.07k | } |
Unexecuted instantiation: bitwriter.c:safe_realloc_ Line | Count | Source | 200 | 8.28k | { | 201 | 8.28k | void *oldptr; | 202 | 8.28k | void *newptr; | 203 | 8.28k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 204 | | /* Fail if requested */ | 205 | 8.28k | if(alloc_check() && size > 0) { | 206 | 0 | free(ptr); | 207 | 0 | return NULL; | 208 | 0 | } | 209 | 8.28k | #endif | 210 | 8.28k | oldptr = ptr; | 211 | 8.28k | newptr = realloc(ptr, size); | 212 | 8.28k | if(size > 0 && newptr == 0) | 213 | 0 | free(oldptr); | 214 | 8.28k | return newptr; | 215 | 8.28k | } |
Line | Count | Source | 200 | 2.46k | { | 201 | 2.46k | void *oldptr; | 202 | 2.46k | void *newptr; | 203 | 2.46k | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION | 204 | | /* Fail if requested */ | 205 | 2.46k | if(alloc_check() && size > 0) { | 206 | 0 | free(ptr); | 207 | 0 | return NULL; | 208 | 0 | } | 209 | 2.46k | #endif | 210 | 2.46k | oldptr = ptr; | 211 | 2.46k | newptr = realloc(ptr, size); | 212 | 2.46k | if(size > 0 && newptr == 0) | 213 | 0 | free(oldptr); | 214 | 2.46k | return newptr; | 215 | 2.46k | } |
Unexecuted instantiation: memory.c:safe_realloc_ Unexecuted instantiation: metadata.cpp:safe_realloc_(void*, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_ |
216 | | |
217 | | #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
218 | | static inline void *realloc_(void *ptr, size_t size) |
219 | 5.09k | { |
220 | | /* Fail if requested */ |
221 | 5.09k | if(alloc_check()) |
222 | 0 | return NULL; |
223 | 5.09k | return realloc(ptr, size); |
224 | 5.09k | } Unexecuted instantiation: metadata_object.c:realloc_ Unexecuted instantiation: stream_decoder.c:realloc_ ogg_decoder_aspect.c:realloc_ Line | Count | Source | 219 | 5.09k | { | 220 | | /* Fail if requested */ | 221 | 5.09k | if(alloc_check()) | 222 | 0 | return NULL; | 223 | 5.09k | return realloc(ptr, size); | 224 | 5.09k | } |
Unexecuted instantiation: bitwriter.c:realloc_ Unexecuted instantiation: format.c:realloc_ Unexecuted instantiation: md5.c:realloc_ Unexecuted instantiation: memory.c:realloc_ Unexecuted instantiation: metadata.cpp:realloc_(void*, unsigned long) Unexecuted instantiation: metadata_iterators.c:realloc_ |
225 | | #else |
226 | | #define realloc_ realloc |
227 | | #endif |
228 | | |
229 | | |
230 | | static inline void *safe_realloc_nofree_add_2op_(void *ptr, size_t size1, size_t size2) |
231 | 0 | { |
232 | 0 | size2 += size1; |
233 | 0 | if(size2 < size1) |
234 | 0 | return 0; |
235 | 0 | return realloc_(ptr, size2); |
236 | 0 | } Unexecuted instantiation: metadata_object.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: stream_decoder.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: bitwriter.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: format.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: md5.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: memory.c:safe_realloc_nofree_add_2op_ Unexecuted instantiation: metadata.cpp:safe_realloc_nofree_add_2op_(void*, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_nofree_add_2op_ |
237 | | |
238 | | static inline void *safe_realloc_add_3op_(void *ptr, size_t size1, size_t size2, size_t size3) |
239 | 0 | { |
240 | 0 | size2 += size1; |
241 | 0 | if(size2 < size1) { |
242 | 0 | free(ptr); |
243 | 0 | return 0; |
244 | 0 | } |
245 | 0 | size3 += size2; |
246 | 0 | if(size3 < size2) { |
247 | 0 | free(ptr); |
248 | 0 | return 0; |
249 | 0 | } |
250 | 0 | return safe_realloc_(ptr, size3); |
251 | 0 | } Unexecuted instantiation: metadata_object.c:safe_realloc_add_3op_ Unexecuted instantiation: stream_decoder.c:safe_realloc_add_3op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_realloc_add_3op_ Unexecuted instantiation: bitwriter.c:safe_realloc_add_3op_ Unexecuted instantiation: format.c:safe_realloc_add_3op_ Unexecuted instantiation: md5.c:safe_realloc_add_3op_ Unexecuted instantiation: memory.c:safe_realloc_add_3op_ Unexecuted instantiation: metadata.cpp:safe_realloc_add_3op_(void*, unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_add_3op_ |
252 | | |
253 | | static inline void *safe_realloc_nofree_add_3op_(void *ptr, size_t size1, size_t size2, size_t size3) |
254 | 0 | { |
255 | 0 | size2 += size1; |
256 | 0 | if(size2 < size1) |
257 | 0 | return 0; |
258 | 0 | size3 += size2; |
259 | 0 | if(size3 < size2) |
260 | 0 | return 0; |
261 | 0 | return realloc_(ptr, size3); |
262 | 0 | } Unexecuted instantiation: metadata_object.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: stream_decoder.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: bitwriter.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: format.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: md5.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: memory.c:safe_realloc_nofree_add_3op_ Unexecuted instantiation: metadata.cpp:safe_realloc_nofree_add_3op_(void*, unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_nofree_add_3op_ |
263 | | |
264 | | static inline void *safe_realloc_nofree_add_4op_(void *ptr, size_t size1, size_t size2, size_t size3, size_t size4) |
265 | 0 | { |
266 | 0 | size2 += size1; |
267 | 0 | if(size2 < size1) |
268 | 0 | return 0; |
269 | 0 | size3 += size2; |
270 | 0 | if(size3 < size2) |
271 | 0 | return 0; |
272 | 0 | size4 += size3; |
273 | 0 | if(size4 < size3) |
274 | 0 | return 0; |
275 | 0 | return realloc_(ptr, size4); |
276 | 0 | } Unexecuted instantiation: metadata_object.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: stream_decoder.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: bitwriter.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: format.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: md5.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: memory.c:safe_realloc_nofree_add_4op_ Unexecuted instantiation: metadata.cpp:safe_realloc_nofree_add_4op_(void*, unsigned long, unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_nofree_add_4op_ |
277 | | |
278 | | static inline void *safe_realloc_mul_2op_(void *ptr, size_t size1, size_t size2) |
279 | 3.42k | { |
280 | 3.42k | if(!size1 || !size2) |
281 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ |
282 | 3.42k | if(size1 > SIZE_MAX / size2) { |
283 | 0 | free(ptr); |
284 | 0 | return 0; |
285 | 0 | } |
286 | 3.42k | return safe_realloc_(ptr, size1*size2); |
287 | 3.42k | } Unexecuted instantiation: metadata_object.c:safe_realloc_mul_2op_ stream_decoder.c:safe_realloc_mul_2op_ Line | Count | Source | 279 | 2.35k | { | 280 | 2.35k | if(!size1 || !size2) | 281 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ | 282 | 2.35k | if(size1 > SIZE_MAX / size2) { | 283 | 0 | free(ptr); | 284 | 0 | return 0; | 285 | 0 | } | 286 | 2.35k | return safe_realloc_(ptr, size1*size2); | 287 | 2.35k | } |
ogg_decoder_aspect.c:safe_realloc_mul_2op_ Line | Count | Source | 279 | 1.07k | { | 280 | 1.07k | if(!size1 || !size2) | 281 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ | 282 | 1.07k | if(size1 > SIZE_MAX / size2) { | 283 | 0 | free(ptr); | 284 | 0 | return 0; | 285 | 0 | } | 286 | 1.07k | return safe_realloc_(ptr, size1*size2); | 287 | 1.07k | } |
Unexecuted instantiation: bitwriter.c:safe_realloc_mul_2op_ Unexecuted instantiation: format.c:safe_realloc_mul_2op_ Unexecuted instantiation: md5.c:safe_realloc_mul_2op_ Unexecuted instantiation: memory.c:safe_realloc_mul_2op_ Unexecuted instantiation: metadata.cpp:safe_realloc_mul_2op_(void*, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_mul_2op_ |
288 | | |
289 | | static inline void *safe_realloc_nofree_mul_2op_(void *ptr, size_t size1, size_t size2) |
290 | 5.09k | { |
291 | 5.09k | if(!size1 || !size2) |
292 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ |
293 | 5.09k | if(size1 > SIZE_MAX / size2) |
294 | 0 | return 0; |
295 | 5.09k | return realloc_(ptr, size1*size2); |
296 | 5.09k | } Unexecuted instantiation: metadata_object.c:safe_realloc_nofree_mul_2op_ Unexecuted instantiation: stream_decoder.c:safe_realloc_nofree_mul_2op_ ogg_decoder_aspect.c:safe_realloc_nofree_mul_2op_ Line | Count | Source | 290 | 5.09k | { | 291 | 5.09k | if(!size1 || !size2) | 292 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ | 293 | 5.09k | if(size1 > SIZE_MAX / size2) | 294 | 0 | return 0; | 295 | 5.09k | return realloc_(ptr, size1*size2); | 296 | 5.09k | } |
Unexecuted instantiation: bitwriter.c:safe_realloc_nofree_mul_2op_ Unexecuted instantiation: format.c:safe_realloc_nofree_mul_2op_ Unexecuted instantiation: md5.c:safe_realloc_nofree_mul_2op_ Unexecuted instantiation: memory.c:safe_realloc_nofree_mul_2op_ Unexecuted instantiation: metadata.cpp:safe_realloc_nofree_mul_2op_(void*, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_nofree_mul_2op_ |
297 | | |
298 | | /* size1 * (size2 + size3) */ |
299 | | static inline void *safe_realloc_muladd2_(void *ptr, size_t size1, size_t size2, size_t size3) |
300 | 0 | { |
301 | 0 | if(!size1 || (!size2 && !size3)) |
302 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ |
303 | 0 | size2 += size3; |
304 | 0 | if(size2 < size3) { |
305 | 0 | free(ptr); |
306 | 0 | return 0; |
307 | 0 | } |
308 | 0 | return safe_realloc_mul_2op_(ptr, size1, size2); |
309 | 0 | } Unexecuted instantiation: metadata_object.c:safe_realloc_muladd2_ Unexecuted instantiation: stream_decoder.c:safe_realloc_muladd2_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_realloc_muladd2_ Unexecuted instantiation: bitwriter.c:safe_realloc_muladd2_ Unexecuted instantiation: format.c:safe_realloc_muladd2_ Unexecuted instantiation: md5.c:safe_realloc_muladd2_ Unexecuted instantiation: memory.c:safe_realloc_muladd2_ Unexecuted instantiation: metadata.cpp:safe_realloc_muladd2_(void*, unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_muladd2_ |
310 | | |
311 | | /* size1 * (size2 + size3) */ |
312 | | static inline void *safe_realloc_nofree_muladd2_(void *ptr, size_t size1, size_t size2, size_t size3) |
313 | 0 | { |
314 | 0 | if(!size1 || (!size2 && !size3)) |
315 | 0 | return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ |
316 | 0 | size2 += size3; |
317 | 0 | if(size2 < size3) |
318 | 0 | return 0; |
319 | 0 | return safe_realloc_nofree_mul_2op_(ptr, size1, size2); |
320 | 0 | } Unexecuted instantiation: metadata_object.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: stream_decoder.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: ogg_decoder_aspect.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: bitwriter.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: format.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: md5.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: memory.c:safe_realloc_nofree_muladd2_ Unexecuted instantiation: metadata.cpp:safe_realloc_nofree_muladd2_(void*, unsigned long, unsigned long, unsigned long) Unexecuted instantiation: metadata_iterators.c:safe_realloc_nofree_muladd2_ |
321 | | |
322 | | #endif |