Coverage Report

Created: 2025-07-07 10:01

/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 */