/work/workdir/UnpackedTarball/cairo/src/cairo-malloc-private.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */ |
2 | | /* Cairo - a vector graphics library with display and print output |
3 | | * |
4 | | * Copyright © 2007 Mozilla Corporation |
5 | | * |
6 | | * This library is free software; you can redistribute it and/or |
7 | | * modify it either under the terms of the GNU Lesser General Public |
8 | | * License version 2.1 as published by the Free Software Foundation |
9 | | * (the "LGPL") or, at your option, under the terms of the Mozilla |
10 | | * Public License Version 1.1 (the "MPL"). If you do not alter this |
11 | | * notice, a recipient may use your version of this file under either |
12 | | * the MPL or the LGPL. |
13 | | * |
14 | | * You should have received a copy of the LGPL along with this library |
15 | | * in the file COPYING-LGPL-2.1; if not, write to the Free Software |
16 | | * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA |
17 | | * You should have received a copy of the MPL along with this library |
18 | | * in the file COPYING-MPL-1.1 |
19 | | * |
20 | | * The contents of this file are subject to the Mozilla Public License |
21 | | * Version 1.1 (the "License"); you may not use this file except in |
22 | | * compliance with the License. You may obtain a copy of the License at |
23 | | * http://www.mozilla.org/MPL/ |
24 | | * |
25 | | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY |
26 | | * OF ANY KIND, either express or implied. See the LGPL or the MPL for |
27 | | * the specific language governing rights and limitations. |
28 | | * |
29 | | * The Original Code is the cairo graphics library. |
30 | | * |
31 | | * The Initial Developer of the Original Code is Mozilla Foundation |
32 | | * |
33 | | * Contributor(s): |
34 | | * Vladimir Vukicevic <vladimir@pobox.com> |
35 | | */ |
36 | | |
37 | | #ifndef CAIRO_MALLOC_PRIVATE_H |
38 | | #define CAIRO_MALLOC_PRIVATE_H |
39 | | |
40 | | #include "cairo-wideint-private.h" |
41 | | #include <stdlib.h> |
42 | | |
43 | | #if HAVE_MEMFAULT |
44 | | #include <memfault.h> |
45 | | #define CAIRO_INJECT_FAULT() MEMFAULT_INJECT_FAULT() |
46 | | #else |
47 | 894k | #define CAIRO_INJECT_FAULT() 0 |
48 | | #endif |
49 | | |
50 | | /** |
51 | | * _cairo_malloc: |
52 | | * @size: size in bytes |
53 | | * |
54 | | * Allocate @size memory using malloc(). |
55 | | * The memory should be freed using free(). |
56 | | * malloc is skipped, if 0 bytes are requested, and %NULL will be returned. |
57 | | * |
58 | | * Return value: A pointer to the newly allocated memory, or %NULL in |
59 | | * case of malloc() failure or size is 0. |
60 | | **/ |
61 | | |
62 | | #define _cairo_malloc(size) \ |
63 | 2.90M | ((size) != 0 ? malloc(size) : NULL) |
64 | | |
65 | | /** |
66 | | * _cairo_malloc_ab: |
67 | | * @a: number of elements to allocate |
68 | | * @size: size of each element |
69 | | * |
70 | | * Allocates @a*@size memory using _cairo_malloc(), taking care to not |
71 | | * overflow when doing the multiplication. Behaves much like |
72 | | * calloc(), except that the returned memory is not set to zero. |
73 | | * The memory should be freed using free(). |
74 | | * |
75 | | * @size should be a constant so that the compiler can optimize |
76 | | * out a constant division. |
77 | | * |
78 | | * Return value: A pointer to the newly allocated memory, or %NULL in |
79 | | * case of malloc() failure or overflow. |
80 | | **/ |
81 | | |
82 | | static cairo_always_inline void * |
83 | | _cairo_malloc_ab(size_t a, size_t size) |
84 | 10.2k | { |
85 | 10.2k | size_t c; |
86 | 10.2k | if (_cairo_mul_size_t_overflow (a, size, &c)) |
87 | 0 | return NULL; |
88 | | |
89 | 10.2k | return _cairo_malloc(c); |
90 | 10.2k | } Unexecuted instantiation: cairo-font-face.c:_cairo_malloc_ab Unexecuted instantiation: cairo-font-options.c:_cairo_malloc_ab Unexecuted instantiation: cairo-image-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-matrix.c:_cairo_malloc_ab cairo-misc.c:_cairo_malloc_ab Line | Count | Source | 84 | 6.32k | { | 85 | 6.32k | size_t c; | 86 | 6.32k | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 6.32k | return _cairo_malloc(c); | 90 | 6.32k | } |
Unexecuted instantiation: cairo-mutex.c:_cairo_malloc_ab cairo-path.c:_cairo_malloc_ab Line | Count | Source | 84 | 677 | { | 85 | 677 | size_t c; | 86 | 677 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 677 | return _cairo_malloc(c); | 90 | 677 | } |
Unexecuted instantiation: cairo-pattern.c:_cairo_malloc_ab Unexecuted instantiation: cairo-raster-source-pattern.c:_cairo_malloc_ab Unexecuted instantiation: cairo-recording-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-rectangle.c:_cairo_malloc_ab Unexecuted instantiation: cairo-scaled-font.c:_cairo_malloc_ab Unexecuted instantiation: cairo-spline.c:_cairo_malloc_ab Unexecuted instantiation: cairo-stroke-style.c:_cairo_malloc_ab Unexecuted instantiation: cairo-surface-snapshot.c:_cairo_malloc_ab Unexecuted instantiation: cairo-surface-wrapper.c:_cairo_malloc_ab Unexecuted instantiation: cairo-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-traps.c:_cairo_malloc_ab Unexecuted instantiation: cairo-unicode.c:_cairo_malloc_ab Unexecuted instantiation: cairo-version.c:_cairo_malloc_ab Unexecuted instantiation: cairo.c:_cairo_malloc_ab Unexecuted instantiation: cairo-ft-font.c:_cairo_malloc_ab Unexecuted instantiation: cairo-pdf-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_malloc_ab Unexecuted instantiation: cairo-tag-stack.c:_cairo_malloc_ab Unexecuted instantiation: cairo-analysis-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-array.c:_cairo_malloc_ab cairo-boxes.c:_cairo_malloc_ab Line | Count | Source | 84 | 1.26k | { | 85 | 1.26k | size_t c; | 86 | 1.26k | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 1.26k | return _cairo_malloc(c); | 90 | 1.26k | } |
Unexecuted instantiation: cairo-cache.c:_cairo_malloc_ab Unexecuted instantiation: cairo-clip-boxes.c:_cairo_malloc_ab cairo-clip.c:_cairo_malloc_ab Line | Count | Source | 84 | 2 | { | 85 | 2 | size_t c; | 86 | 2 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 2 | return _cairo_malloc(c); | 90 | 2 | } |
Unexecuted instantiation: cairo-color.c:_cairo_malloc_ab Unexecuted instantiation: cairo-composite-rectangles.c:_cairo_malloc_ab Unexecuted instantiation: cairo-compositor.c:_cairo_malloc_ab Unexecuted instantiation: cairo-damage.c:_cairo_malloc_ab Unexecuted instantiation: cairo-debug.c:_cairo_malloc_ab Unexecuted instantiation: cairo-default-context.c:_cairo_malloc_ab Unexecuted instantiation: cairo-device.c:_cairo_malloc_ab Unexecuted instantiation: cairo-error.c:_cairo_malloc_ab Unexecuted instantiation: cairo-font-face-twin.c:_cairo_malloc_ab Unexecuted instantiation: cairo-freed-pool.c:_cairo_malloc_ab Unexecuted instantiation: cairo-gstate.c:_cairo_malloc_ab Unexecuted instantiation: cairo-hash.c:_cairo_malloc_ab cairo-image-compositor.c:_cairo_malloc_ab Line | Count | Source | 84 | 426 | { | 85 | 426 | size_t c; | 86 | 426 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 426 | return _cairo_malloc(c); | 90 | 426 | } |
Unexecuted instantiation: cairo-image-info.c:_cairo_malloc_ab Unexecuted instantiation: cairo-image-source.c:_cairo_malloc_ab Unexecuted instantiation: cairo-line.c:_cairo_malloc_ab Unexecuted instantiation: cairo-mask-compositor.c:_cairo_malloc_ab Unexecuted instantiation: cairo-mesh-pattern-rasterizer.c:_cairo_malloc_ab cairo-mono-scan-converter.c:_cairo_malloc_ab Line | Count | Source | 84 | 600 | { | 85 | 600 | size_t c; | 86 | 600 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 600 | return _cairo_malloc(c); | 90 | 600 | } |
Unexecuted instantiation: cairo-no-compositor.c:_cairo_malloc_ab Unexecuted instantiation: cairo-observer.c:_cairo_malloc_ab Unexecuted instantiation: cairo-output-stream.c:_cairo_malloc_ab Unexecuted instantiation: cairo-paginated-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-path-bounds.c:_cairo_malloc_ab Unexecuted instantiation: cairo-path-fill.c:_cairo_malloc_ab Unexecuted instantiation: cairo-path-fixed.c:_cairo_malloc_ab Unexecuted instantiation: cairo-path-in-fill.c:_cairo_malloc_ab cairo-path-stroke-boxes.c:_cairo_malloc_ab Line | Count | Source | 84 | 297 | { | 85 | 297 | size_t c; | 86 | 297 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 297 | return _cairo_malloc(c); | 90 | 297 | } |
Unexecuted instantiation: cairo-path-stroke-polygon.c:_cairo_malloc_ab Unexecuted instantiation: cairo-path-stroke.c:_cairo_malloc_ab Unexecuted instantiation: cairo-pen.c:_cairo_malloc_ab cairo-polygon.c:_cairo_malloc_ab Line | Count | Source | 84 | 615 | { | 85 | 615 | size_t c; | 86 | 615 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 87 | 0 | return NULL; | 88 | | | 89 | 615 | return _cairo_malloc(c); | 90 | 615 | } |
Unexecuted instantiation: cairo-region.c:_cairo_malloc_ab Unexecuted instantiation: cairo-shape-mask-compositor.c:_cairo_malloc_ab Unexecuted instantiation: cairo-slope.c:_cairo_malloc_ab Unexecuted instantiation: cairo-spans-compositor.c:_cairo_malloc_ab Unexecuted instantiation: cairo-spans.c:_cairo_malloc_ab Unexecuted instantiation: cairo-stroke-dash.c:_cairo_malloc_ab Unexecuted instantiation: cairo-surface-clipper.c:_cairo_malloc_ab Unexecuted instantiation: cairo-surface-offset.c:_cairo_malloc_ab Unexecuted instantiation: cairo-tor-scan-converter.c:_cairo_malloc_ab Unexecuted instantiation: cairo-tor22-scan-converter.c:_cairo_malloc_ab Unexecuted instantiation: cairo-toy-font-face.c:_cairo_malloc_ab Unexecuted instantiation: cairo-traps-compositor.c:_cairo_malloc_ab Unexecuted instantiation: cairo-user-font.c:_cairo_malloc_ab Unexecuted instantiation: cairo-cff-subset.c:_cairo_malloc_ab Unexecuted instantiation: cairo-scaled-font-subsets.c:_cairo_malloc_ab Unexecuted instantiation: cairo-truetype-subset.c:_cairo_malloc_ab Unexecuted instantiation: cairo-type1-fallback.c:_cairo_malloc_ab Unexecuted instantiation: cairo-type1-glyph-names.c:_cairo_malloc_ab Unexecuted instantiation: cairo-type1-subset.c:_cairo_malloc_ab Unexecuted instantiation: cairo-type3-glyph-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-pdf-operators.c:_cairo_malloc_ab Unexecuted instantiation: cairo-pdf-shading.c:_cairo_malloc_ab Unexecuted instantiation: cairo-tag-attributes.c:_cairo_malloc_ab Unexecuted instantiation: cairo-deflate-stream.c:_cairo_malloc_ab Unexecuted instantiation: cairo-arc.c:_cairo_malloc_ab Unexecuted instantiation: cairo-bentley-ottmann-rectangular.c:_cairo_malloc_ab Unexecuted instantiation: cairo-bentley-ottmann-rectilinear.c:_cairo_malloc_ab Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_malloc_ab Unexecuted instantiation: cairo-boxes-intersect.c:_cairo_malloc_ab Unexecuted instantiation: cairo-clip-polygon.c:_cairo_malloc_ab Unexecuted instantiation: cairo-clip-region.c:_cairo_malloc_ab Unexecuted instantiation: cairo-clip-surface.c:_cairo_malloc_ab Unexecuted instantiation: cairo-contour.c:_cairo_malloc_ab Unexecuted instantiation: cairo-font-face-twin-data.c:_cairo_malloc_ab Unexecuted instantiation: cairo-freelist.c:_cairo_malloc_ab Unexecuted instantiation: cairo-hull.c:_cairo_malloc_ab Unexecuted instantiation: cairo-path-stroke-traps.c:_cairo_malloc_ab Unexecuted instantiation: cairo-polygon-intersect.c:_cairo_malloc_ab Unexecuted instantiation: cairo-polygon-reduce.c:_cairo_malloc_ab Unexecuted instantiation: cairo-rectangular-scan-converter.c:_cairo_malloc_ab Unexecuted instantiation: cairo-wideint.c:_cairo_malloc_ab Unexecuted instantiation: cairo-surface-subsurface.c:_cairo_malloc_ab |
91 | | |
92 | | /** |
93 | | * _cairo_realloc_ab: |
94 | | * @ptr: original pointer to block of memory to be resized |
95 | | * @a: number of elements to allocate |
96 | | * @size: size of each element |
97 | | * |
98 | | * Reallocates @ptr a block of @a*@size memory using realloc(), taking |
99 | | * care to not overflow when doing the multiplication. The memory |
100 | | * should be freed using free(). |
101 | | * |
102 | | * @size should be a constant so that the compiler can optimize |
103 | | * out a constant division. |
104 | | * |
105 | | * Return value: A pointer to the newly allocated memory, or %NULL in |
106 | | * case of realloc() failure or overflow (whereupon the original block |
107 | | * of memory * is left untouched). |
108 | | **/ |
109 | | |
110 | | static cairo_always_inline void * |
111 | | _cairo_realloc_ab(void *ptr, size_t a, size_t size) |
112 | 576 | { |
113 | 576 | size_t c; |
114 | 576 | if (_cairo_mul_size_t_overflow (a, size, &c)) |
115 | 0 | return NULL; |
116 | | |
117 | 576 | return realloc(ptr, c); |
118 | 576 | } Unexecuted instantiation: cairo-font-face.c:_cairo_realloc_ab Unexecuted instantiation: cairo-font-options.c:_cairo_realloc_ab Unexecuted instantiation: cairo-image-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-matrix.c:_cairo_realloc_ab Unexecuted instantiation: cairo-misc.c:_cairo_realloc_ab Unexecuted instantiation: cairo-mutex.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path.c:_cairo_realloc_ab Unexecuted instantiation: cairo-pattern.c:_cairo_realloc_ab Unexecuted instantiation: cairo-raster-source-pattern.c:_cairo_realloc_ab Unexecuted instantiation: cairo-recording-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-rectangle.c:_cairo_realloc_ab Unexecuted instantiation: cairo-scaled-font.c:_cairo_realloc_ab Unexecuted instantiation: cairo-spline.c:_cairo_realloc_ab Unexecuted instantiation: cairo-stroke-style.c:_cairo_realloc_ab Unexecuted instantiation: cairo-surface-snapshot.c:_cairo_realloc_ab Unexecuted instantiation: cairo-surface-wrapper.c:_cairo_realloc_ab Unexecuted instantiation: cairo-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-traps.c:_cairo_realloc_ab Unexecuted instantiation: cairo-unicode.c:_cairo_realloc_ab Unexecuted instantiation: cairo-version.c:_cairo_realloc_ab Unexecuted instantiation: cairo.c:_cairo_realloc_ab Unexecuted instantiation: cairo-ft-font.c:_cairo_realloc_ab Unexecuted instantiation: cairo-pdf-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_realloc_ab Unexecuted instantiation: cairo-tag-stack.c:_cairo_realloc_ab Unexecuted instantiation: cairo-analysis-surface.c:_cairo_realloc_ab cairo-array.c:_cairo_realloc_ab Line | Count | Source | 112 | 56 | { | 113 | 56 | size_t c; | 114 | 56 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 115 | 0 | return NULL; | 116 | | | 117 | 56 | return realloc(ptr, c); | 118 | 56 | } |
Unexecuted instantiation: cairo-boxes.c:_cairo_realloc_ab Unexecuted instantiation: cairo-cache.c:_cairo_realloc_ab Unexecuted instantiation: cairo-clip-boxes.c:_cairo_realloc_ab Unexecuted instantiation: cairo-clip.c:_cairo_realloc_ab Unexecuted instantiation: cairo-color.c:_cairo_realloc_ab Unexecuted instantiation: cairo-composite-rectangles.c:_cairo_realloc_ab Unexecuted instantiation: cairo-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-damage.c:_cairo_realloc_ab Unexecuted instantiation: cairo-debug.c:_cairo_realloc_ab Unexecuted instantiation: cairo-default-context.c:_cairo_realloc_ab Unexecuted instantiation: cairo-device.c:_cairo_realloc_ab Unexecuted instantiation: cairo-error.c:_cairo_realloc_ab Unexecuted instantiation: cairo-font-face-twin.c:_cairo_realloc_ab Unexecuted instantiation: cairo-freed-pool.c:_cairo_realloc_ab Unexecuted instantiation: cairo-gstate.c:_cairo_realloc_ab Unexecuted instantiation: cairo-hash.c:_cairo_realloc_ab Unexecuted instantiation: cairo-image-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-image-info.c:_cairo_realloc_ab Unexecuted instantiation: cairo-image-source.c:_cairo_realloc_ab Unexecuted instantiation: cairo-line.c:_cairo_realloc_ab Unexecuted instantiation: cairo-mask-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-mesh-pattern-rasterizer.c:_cairo_realloc_ab Unexecuted instantiation: cairo-mono-scan-converter.c:_cairo_realloc_ab Unexecuted instantiation: cairo-no-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-observer.c:_cairo_realloc_ab Unexecuted instantiation: cairo-output-stream.c:_cairo_realloc_ab Unexecuted instantiation: cairo-paginated-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path-bounds.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path-fill.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path-fixed.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path-in-fill.c:_cairo_realloc_ab cairo-path-stroke-boxes.c:_cairo_realloc_ab Line | Count | Source | 112 | 104 | { | 113 | 104 | size_t c; | 114 | 104 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 115 | 0 | return NULL; | 116 | | | 117 | 104 | return realloc(ptr, c); | 118 | 104 | } |
Unexecuted instantiation: cairo-path-stroke-polygon.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path-stroke.c:_cairo_realloc_ab Unexecuted instantiation: cairo-pen.c:_cairo_realloc_ab cairo-polygon.c:_cairo_realloc_ab Line | Count | Source | 112 | 416 | { | 113 | 416 | size_t c; | 114 | 416 | if (_cairo_mul_size_t_overflow (a, size, &c)) | 115 | 0 | return NULL; | 116 | | | 117 | 416 | return realloc(ptr, c); | 118 | 416 | } |
Unexecuted instantiation: cairo-region.c:_cairo_realloc_ab Unexecuted instantiation: cairo-shape-mask-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-slope.c:_cairo_realloc_ab Unexecuted instantiation: cairo-spans-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-spans.c:_cairo_realloc_ab Unexecuted instantiation: cairo-stroke-dash.c:_cairo_realloc_ab Unexecuted instantiation: cairo-surface-clipper.c:_cairo_realloc_ab Unexecuted instantiation: cairo-surface-offset.c:_cairo_realloc_ab Unexecuted instantiation: cairo-tor-scan-converter.c:_cairo_realloc_ab Unexecuted instantiation: cairo-tor22-scan-converter.c:_cairo_realloc_ab Unexecuted instantiation: cairo-toy-font-face.c:_cairo_realloc_ab Unexecuted instantiation: cairo-traps-compositor.c:_cairo_realloc_ab Unexecuted instantiation: cairo-user-font.c:_cairo_realloc_ab Unexecuted instantiation: cairo-cff-subset.c:_cairo_realloc_ab Unexecuted instantiation: cairo-scaled-font-subsets.c:_cairo_realloc_ab Unexecuted instantiation: cairo-truetype-subset.c:_cairo_realloc_ab Unexecuted instantiation: cairo-type1-fallback.c:_cairo_realloc_ab Unexecuted instantiation: cairo-type1-glyph-names.c:_cairo_realloc_ab Unexecuted instantiation: cairo-type1-subset.c:_cairo_realloc_ab Unexecuted instantiation: cairo-type3-glyph-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-pdf-operators.c:_cairo_realloc_ab Unexecuted instantiation: cairo-pdf-shading.c:_cairo_realloc_ab Unexecuted instantiation: cairo-tag-attributes.c:_cairo_realloc_ab Unexecuted instantiation: cairo-deflate-stream.c:_cairo_realloc_ab Unexecuted instantiation: cairo-arc.c:_cairo_realloc_ab Unexecuted instantiation: cairo-bentley-ottmann-rectangular.c:_cairo_realloc_ab Unexecuted instantiation: cairo-bentley-ottmann-rectilinear.c:_cairo_realloc_ab Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_realloc_ab Unexecuted instantiation: cairo-boxes-intersect.c:_cairo_realloc_ab Unexecuted instantiation: cairo-clip-polygon.c:_cairo_realloc_ab Unexecuted instantiation: cairo-clip-region.c:_cairo_realloc_ab Unexecuted instantiation: cairo-clip-surface.c:_cairo_realloc_ab Unexecuted instantiation: cairo-contour.c:_cairo_realloc_ab Unexecuted instantiation: cairo-font-face-twin-data.c:_cairo_realloc_ab Unexecuted instantiation: cairo-freelist.c:_cairo_realloc_ab Unexecuted instantiation: cairo-hull.c:_cairo_realloc_ab Unexecuted instantiation: cairo-path-stroke-traps.c:_cairo_realloc_ab Unexecuted instantiation: cairo-polygon-intersect.c:_cairo_realloc_ab Unexecuted instantiation: cairo-polygon-reduce.c:_cairo_realloc_ab Unexecuted instantiation: cairo-rectangular-scan-converter.c:_cairo_realloc_ab Unexecuted instantiation: cairo-wideint.c:_cairo_realloc_ab Unexecuted instantiation: cairo-surface-subsurface.c:_cairo_realloc_ab |
119 | | |
120 | | /** |
121 | | * _cairo_malloc_abc: |
122 | | * @a: first factor of number of elements to allocate |
123 | | * @b: second factor of number of elements to allocate |
124 | | * @size: size of each element |
125 | | * |
126 | | * Allocates @a*@b*@size memory using _cairo_malloc(), taking care to not |
127 | | * overflow when doing the multiplication. Behaves like |
128 | | * _cairo_malloc_ab(). The memory should be freed using free(). |
129 | | * |
130 | | * @size should be a constant so that the compiler can optimize |
131 | | * out a constant division. |
132 | | * |
133 | | * Return value: A pointer to the newly allocated memory, or %NULL in |
134 | | * case of malloc() failure or overflow. |
135 | | **/ |
136 | | |
137 | | static cairo_always_inline void * |
138 | | _cairo_malloc_abc(size_t a, size_t b, size_t size) |
139 | 0 | { |
140 | 0 | size_t c, d; |
141 | 0 | if (_cairo_mul_size_t_overflow (a, b, &c)) |
142 | 0 | return NULL; |
143 | | |
144 | 0 | if (_cairo_mul_size_t_overflow (c, size, &d)) |
145 | 0 | return NULL; |
146 | | |
147 | 0 | return _cairo_malloc(d); |
148 | 0 | } Unexecuted instantiation: cairo-font-face.c:_cairo_malloc_abc Unexecuted instantiation: cairo-font-options.c:_cairo_malloc_abc Unexecuted instantiation: cairo-image-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-matrix.c:_cairo_malloc_abc Unexecuted instantiation: cairo-misc.c:_cairo_malloc_abc Unexecuted instantiation: cairo-mutex.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path.c:_cairo_malloc_abc Unexecuted instantiation: cairo-pattern.c:_cairo_malloc_abc Unexecuted instantiation: cairo-raster-source-pattern.c:_cairo_malloc_abc Unexecuted instantiation: cairo-recording-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-rectangle.c:_cairo_malloc_abc Unexecuted instantiation: cairo-scaled-font.c:_cairo_malloc_abc Unexecuted instantiation: cairo-spline.c:_cairo_malloc_abc Unexecuted instantiation: cairo-stroke-style.c:_cairo_malloc_abc Unexecuted instantiation: cairo-surface-snapshot.c:_cairo_malloc_abc Unexecuted instantiation: cairo-surface-wrapper.c:_cairo_malloc_abc Unexecuted instantiation: cairo-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-traps.c:_cairo_malloc_abc Unexecuted instantiation: cairo-unicode.c:_cairo_malloc_abc Unexecuted instantiation: cairo-version.c:_cairo_malloc_abc Unexecuted instantiation: cairo.c:_cairo_malloc_abc Unexecuted instantiation: cairo-ft-font.c:_cairo_malloc_abc Unexecuted instantiation: cairo-pdf-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_malloc_abc Unexecuted instantiation: cairo-tag-stack.c:_cairo_malloc_abc Unexecuted instantiation: cairo-analysis-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-array.c:_cairo_malloc_abc Unexecuted instantiation: cairo-boxes.c:_cairo_malloc_abc Unexecuted instantiation: cairo-cache.c:_cairo_malloc_abc Unexecuted instantiation: cairo-clip-boxes.c:_cairo_malloc_abc Unexecuted instantiation: cairo-clip.c:_cairo_malloc_abc Unexecuted instantiation: cairo-color.c:_cairo_malloc_abc Unexecuted instantiation: cairo-composite-rectangles.c:_cairo_malloc_abc Unexecuted instantiation: cairo-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-damage.c:_cairo_malloc_abc Unexecuted instantiation: cairo-debug.c:_cairo_malloc_abc Unexecuted instantiation: cairo-default-context.c:_cairo_malloc_abc Unexecuted instantiation: cairo-device.c:_cairo_malloc_abc Unexecuted instantiation: cairo-error.c:_cairo_malloc_abc Unexecuted instantiation: cairo-font-face-twin.c:_cairo_malloc_abc Unexecuted instantiation: cairo-freed-pool.c:_cairo_malloc_abc Unexecuted instantiation: cairo-gstate.c:_cairo_malloc_abc Unexecuted instantiation: cairo-hash.c:_cairo_malloc_abc Unexecuted instantiation: cairo-image-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-image-info.c:_cairo_malloc_abc Unexecuted instantiation: cairo-image-source.c:_cairo_malloc_abc Unexecuted instantiation: cairo-line.c:_cairo_malloc_abc Unexecuted instantiation: cairo-mask-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-mesh-pattern-rasterizer.c:_cairo_malloc_abc Unexecuted instantiation: cairo-mono-scan-converter.c:_cairo_malloc_abc Unexecuted instantiation: cairo-no-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-observer.c:_cairo_malloc_abc Unexecuted instantiation: cairo-output-stream.c:_cairo_malloc_abc Unexecuted instantiation: cairo-paginated-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-bounds.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-fill.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-fixed.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-in-fill.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-stroke-boxes.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-stroke-polygon.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-stroke.c:_cairo_malloc_abc Unexecuted instantiation: cairo-pen.c:_cairo_malloc_abc Unexecuted instantiation: cairo-polygon.c:_cairo_malloc_abc Unexecuted instantiation: cairo-region.c:_cairo_malloc_abc Unexecuted instantiation: cairo-shape-mask-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-slope.c:_cairo_malloc_abc Unexecuted instantiation: cairo-spans-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-spans.c:_cairo_malloc_abc Unexecuted instantiation: cairo-stroke-dash.c:_cairo_malloc_abc Unexecuted instantiation: cairo-surface-clipper.c:_cairo_malloc_abc Unexecuted instantiation: cairo-surface-offset.c:_cairo_malloc_abc Unexecuted instantiation: cairo-tor-scan-converter.c:_cairo_malloc_abc Unexecuted instantiation: cairo-tor22-scan-converter.c:_cairo_malloc_abc Unexecuted instantiation: cairo-toy-font-face.c:_cairo_malloc_abc Unexecuted instantiation: cairo-traps-compositor.c:_cairo_malloc_abc Unexecuted instantiation: cairo-user-font.c:_cairo_malloc_abc Unexecuted instantiation: cairo-cff-subset.c:_cairo_malloc_abc Unexecuted instantiation: cairo-scaled-font-subsets.c:_cairo_malloc_abc Unexecuted instantiation: cairo-truetype-subset.c:_cairo_malloc_abc Unexecuted instantiation: cairo-type1-fallback.c:_cairo_malloc_abc Unexecuted instantiation: cairo-type1-glyph-names.c:_cairo_malloc_abc Unexecuted instantiation: cairo-type1-subset.c:_cairo_malloc_abc Unexecuted instantiation: cairo-type3-glyph-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-pdf-operators.c:_cairo_malloc_abc Unexecuted instantiation: cairo-pdf-shading.c:_cairo_malloc_abc Unexecuted instantiation: cairo-tag-attributes.c:_cairo_malloc_abc Unexecuted instantiation: cairo-deflate-stream.c:_cairo_malloc_abc Unexecuted instantiation: cairo-arc.c:_cairo_malloc_abc Unexecuted instantiation: cairo-bentley-ottmann-rectangular.c:_cairo_malloc_abc Unexecuted instantiation: cairo-bentley-ottmann-rectilinear.c:_cairo_malloc_abc Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_malloc_abc Unexecuted instantiation: cairo-boxes-intersect.c:_cairo_malloc_abc Unexecuted instantiation: cairo-clip-polygon.c:_cairo_malloc_abc Unexecuted instantiation: cairo-clip-region.c:_cairo_malloc_abc Unexecuted instantiation: cairo-clip-surface.c:_cairo_malloc_abc Unexecuted instantiation: cairo-contour.c:_cairo_malloc_abc Unexecuted instantiation: cairo-font-face-twin-data.c:_cairo_malloc_abc Unexecuted instantiation: cairo-freelist.c:_cairo_malloc_abc Unexecuted instantiation: cairo-hull.c:_cairo_malloc_abc Unexecuted instantiation: cairo-path-stroke-traps.c:_cairo_malloc_abc Unexecuted instantiation: cairo-polygon-intersect.c:_cairo_malloc_abc Unexecuted instantiation: cairo-polygon-reduce.c:_cairo_malloc_abc Unexecuted instantiation: cairo-rectangular-scan-converter.c:_cairo_malloc_abc Unexecuted instantiation: cairo-wideint.c:_cairo_malloc_abc Unexecuted instantiation: cairo-surface-subsurface.c:_cairo_malloc_abc |
149 | | |
150 | | /** |
151 | | * _cairo_malloc_ab_plus_c: |
152 | | * @a: number of elements to allocate |
153 | | * @size: size of each element |
154 | | * @c: additional size to allocate |
155 | | * |
156 | | * Allocates @a*@size+@c memory using _cairo_malloc(), taking care to not |
157 | | * overflow when doing the arithmetic. Behaves similar to |
158 | | * _cairo_malloc_ab(). The memory should be freed using free(). |
159 | | * |
160 | | * Return value: A pointer to the newly allocated memory, or %NULL in |
161 | | * case of malloc() failure or overflow. |
162 | | **/ |
163 | | |
164 | | static cairo_always_inline void * |
165 | | _cairo_malloc_ab_plus_c(size_t a, size_t size, size_t c) |
166 | 425k | { |
167 | 425k | size_t d, e; |
168 | 425k | if (_cairo_mul_size_t_overflow (a, size, &d)) |
169 | 0 | return NULL; |
170 | | |
171 | 425k | if (_cairo_add_size_t_overflow (d, c, &e)) |
172 | 0 | return NULL; |
173 | | |
174 | 425k | return _cairo_malloc(e); |
175 | 425k | } Unexecuted instantiation: cairo-font-face.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-font-options.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-image-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-matrix.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-misc.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-mutex.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-pattern.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-raster-source-pattern.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-recording-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-rectangle.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-scaled-font.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-spline.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-stroke-style.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-surface-snapshot.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-surface-wrapper.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-traps.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-unicode.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-version.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-ft-font.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-pdf-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-tag-stack.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-analysis-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-array.c:_cairo_malloc_ab_plus_c cairo-boxes.c:_cairo_malloc_ab_plus_c Line | Count | Source | 166 | 53 | { | 167 | 53 | size_t d, e; | 168 | 53 | if (_cairo_mul_size_t_overflow (a, size, &d)) | 169 | 0 | return NULL; | 170 | | | 171 | 53 | if (_cairo_add_size_t_overflow (d, c, &e)) | 172 | 0 | return NULL; | 173 | | | 174 | 53 | return _cairo_malloc(e); | 175 | 53 | } |
Unexecuted instantiation: cairo-cache.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-clip-boxes.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-clip.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-color.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-composite-rectangles.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-damage.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-debug.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-default-context.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-device.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-error.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-font-face-twin.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-freed-pool.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-gstate.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-hash.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-image-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-image-info.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-image-source.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-line.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-mask-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-mesh-pattern-rasterizer.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-mono-scan-converter.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-no-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-observer.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-output-stream.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-paginated-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path-bounds.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path-fill.c:_cairo_malloc_ab_plus_c cairo-path-fixed.c:_cairo_malloc_ab_plus_c Line | Count | Source | 166 | 415k | { | 167 | 415k | size_t d, e; | 168 | 415k | if (_cairo_mul_size_t_overflow (a, size, &d)) | 169 | 0 | return NULL; | 170 | | | 171 | 415k | if (_cairo_add_size_t_overflow (d, c, &e)) | 172 | 0 | return NULL; | 173 | | | 174 | 415k | return _cairo_malloc(e); | 175 | 415k | } |
Unexecuted instantiation: cairo-path-in-fill.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path-stroke-boxes.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path-stroke-polygon.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path-stroke.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-pen.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-polygon.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-region.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-shape-mask-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-slope.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-spans-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-spans.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-stroke-dash.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-surface-clipper.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-surface-offset.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-tor-scan-converter.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-tor22-scan-converter.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-toy-font-face.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-traps-compositor.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-user-font.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-cff-subset.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-scaled-font-subsets.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-truetype-subset.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-type1-fallback.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-type1-glyph-names.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-type1-subset.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-type3-glyph-surface.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-pdf-operators.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-pdf-shading.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-tag-attributes.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-deflate-stream.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-arc.c:_cairo_malloc_ab_plus_c cairo-bentley-ottmann-rectangular.c:_cairo_malloc_ab_plus_c Line | Count | Source | 166 | 19 | { | 167 | 19 | size_t d, e; | 168 | 19 | if (_cairo_mul_size_t_overflow (a, size, &d)) | 169 | 0 | return NULL; | 170 | | | 171 | 19 | if (_cairo_add_size_t_overflow (d, c, &e)) | 172 | 0 | return NULL; | 173 | | | 174 | 19 | return _cairo_malloc(e); | 175 | 19 | } |
cairo-bentley-ottmann-rectilinear.c:_cairo_malloc_ab_plus_c Line | Count | Source | 166 | 3 | { | 167 | 3 | size_t d, e; | 168 | 3 | if (_cairo_mul_size_t_overflow (a, size, &d)) | 169 | 0 | return NULL; | 170 | | | 171 | 3 | if (_cairo_add_size_t_overflow (d, c, &e)) | 172 | 0 | return NULL; | 173 | | | 174 | 3 | return _cairo_malloc(e); | 175 | 3 | } |
Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-boxes-intersect.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-clip-polygon.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-clip-region.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-clip-surface.c:_cairo_malloc_ab_plus_c cairo-contour.c:_cairo_malloc_ab_plus_c Line | Count | Source | 166 | 10.1k | { | 167 | 10.1k | size_t d, e; | 168 | 10.1k | if (_cairo_mul_size_t_overflow (a, size, &d)) | 169 | 0 | return NULL; | 170 | | | 171 | 10.1k | if (_cairo_add_size_t_overflow (d, c, &e)) | 172 | 0 | return NULL; | 173 | | | 174 | 10.1k | return _cairo_malloc(e); | 175 | 10.1k | } |
Unexecuted instantiation: cairo-font-face-twin-data.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-freelist.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-hull.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-path-stroke-traps.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-polygon-intersect.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-polygon-reduce.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-rectangular-scan-converter.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-wideint.c:_cairo_malloc_ab_plus_c Unexecuted instantiation: cairo-surface-subsurface.c:_cairo_malloc_ab_plus_c |
176 | | |
177 | | #endif /* CAIRO_MALLOC_PRIVATE_H */ |