Coverage Report

Created: 2025-09-27 07:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cairo/src/cairo-malloc-private.h
Line
Count
Source
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
13.5M
#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
1.20M
   ((size) != 0 ? malloc(size) : NULL)
64
65
/**
66
 * _cairo_calloc:
67
 * @size: size of each element
68
 *
69
 * Allocates @size memory using calloc(). Behaves much like
70
 * calloc(), except that only one parameter is required.
71
 * The memory should be freed using free().
72
 * calloc is skipped, if 0 bytes are requested, and %NULL will be returned.
73
 *
74
 * Return value: A pointer to the newly allocated memory, or %NULL in
75
 * case of calloc() failure or overflow.
76
 **/
77
78
#define _cairo_calloc(size) \
79
1.29M
    ((size) != 0 ? calloc(1,size) : NULL)
80
81
/**
82
 * _cairo_malloc_ab:
83
 * @a: number of elements to allocate
84
 * @size: size of each element
85
 *
86
 * Allocates @a*@size memory using _cairo_malloc(), taking care to not
87
 * overflow when doing the multiplication.  Behaves much like
88
 * calloc(), except that the returned memory is not set to zero.
89
 * The memory should be freed using free().
90
 *
91
 * @size should be a constant so that the compiler can optimize
92
 * out a constant division.
93
 *
94
 * Return value: A pointer to the newly allocated memory, or %NULL in
95
 * case of malloc() failure or overflow.
96
 **/
97
98
static cairo_always_inline void *
99
_cairo_malloc_ab(size_t a, size_t size)
100
994k
{
101
994k
    size_t c;
102
994k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
994k
    return _cairo_malloc(c);
106
994k
}
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
100
13.3k
{
101
13.3k
    size_t c;
102
13.3k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
13.3k
    return _cairo_malloc(c);
106
13.3k
}
Unexecuted instantiation: cairo-mutex.c:_cairo_malloc_ab
cairo-path.c:_cairo_malloc_ab
Line
Count
Source
100
20
{
101
20
    size_t c;
102
20
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
20
    return _cairo_malloc(c);
106
20
}
cairo-pattern.c:_cairo_malloc_ab
Line
Count
Source
100
2.04k
{
101
2.04k
    size_t c;
102
2.04k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
2.04k
    return _cairo_malloc(c);
106
2.04k
}
Unexecuted instantiation: cairo-raster-source-pattern.c:_cairo_malloc_ab
cairo-recording-surface.c:_cairo_malloc_ab
Line
Count
Source
100
926k
{
101
926k
    size_t c;
102
926k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
926k
    return _cairo_malloc(c);
106
926k
}
Unexecuted instantiation: cairo-rectangle.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-region.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-scaled-font.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-spline.c:_cairo_malloc_ab
cairo-stroke-style.c:_cairo_malloc_ab
Line
Count
Source
100
1.35k
{
101
1.35k
    size_t c;
102
1.35k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
1.35k
    return _cairo_malloc(c);
106
1.35k
}
Unexecuted instantiation: cairo-surface-snapshot.c:_cairo_malloc_ab
cairo-surface-wrapper.c:_cairo_malloc_ab
Line
Count
Source
100
234
{
101
234
    size_t c;
102
234
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
234
    return _cairo_malloc(c);
106
234
}
Unexecuted instantiation: cairo-surface.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-traps.c:_cairo_malloc_ab
cairo-unicode.c:_cairo_malloc_ab
Line
Count
Source
100
32.6k
{
101
32.6k
    size_t c;
102
32.6k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
32.6k
    return _cairo_malloc(c);
106
32.6k
}
Unexecuted instantiation: cairo-user-font.c:_cairo_malloc_ab
Unexecuted instantiation: cairo.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-ft-font.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-colr-glyph-render.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-svg-glyph-render.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
100
322
{
101
322
    size_t c;
102
322
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
322
    return _cairo_malloc(c);
106
322
}
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
100
1.66k
{
101
1.66k
    size_t c;
102
1.66k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
1.66k
    return _cairo_malloc(c);
106
1.66k
}
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
cairo-gstate.c:_cairo_malloc_ab
Line
Count
Source
100
1.33k
{
101
1.33k
    size_t c;
102
1.33k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
1.33k
    return _cairo_malloc(c);
106
1.33k
}
Unexecuted instantiation: cairo-hash.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-image-compositor.c:_cairo_malloc_ab
cairo-image-source.c:_cairo_malloc_ab
Line
Count
Source
100
6
{
101
6
    size_t c;
102
6
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
6
    return _cairo_malloc(c);
106
6
}
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
Unexecuted instantiation: cairo-mono-scan-converter.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-no-compositor.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-observer.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
Unexecuted instantiation: cairo-path-stroke-boxes.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-path-stroke-polygon.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-path-stroke.c:_cairo_malloc_ab
cairo-pen.c:_cairo_malloc_ab
Line
Count
Source
100
4
{
101
4
    size_t c;
102
4
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
4
    return _cairo_malloc(c);
106
4
}
cairo-polygon.c:_cairo_malloc_ab
Line
Count
Source
100
9.96k
{
101
9.96k
    size_t c;
102
9.96k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
9.96k
    return _cairo_malloc(c);
106
9.96k
}
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-offset.c:_cairo_malloc_ab
cairo-tor-scan-converter.c:_cairo_malloc_ab
Line
Count
Source
100
4
{
101
4
    size_t c;
102
4
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
4
    return _cairo_malloc(c);
106
4
}
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-png.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-output-stream.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
cairo-pdf-surface.c:_cairo_malloc_ab
Line
Count
Source
100
4.27k
{
101
4.27k
    size_t c;
102
4.27k
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
4.27k
    return _cairo_malloc(c);
106
4.27k
}
Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-image-info.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-paginated-surface.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-surface-clipper.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-version.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-cff-subset.c:_cairo_malloc_ab
cairo-scaled-font-subsets.c:_cairo_malloc_ab
Line
Count
Source
100
524
{
101
524
    size_t c;
102
524
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
524
    return _cairo_malloc(c);
106
524
}
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
cairo-pdf-shading.c:_cairo_malloc_ab
Line
Count
Source
100
11
{
101
11
    size_t c;
102
11
    if (_cairo_mul_size_t_overflow (a, size, &c))
103
0
  return NULL;
104
105
11
    return _cairo_malloc(c);
106
11
}
Unexecuted instantiation: cairo-tag-attributes.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-tag-stack.c:_cairo_malloc_ab
Unexecuted instantiation: cairo-deflate-stream.c:_cairo_malloc_ab
107
108
/**
109
 * _cairo_calloc_ab:
110
 * @a: number of elements to allocate
111
 * @size: size of each element
112
 *
113
 * Allocates @a*@size memory using _cairo_calloc(), taking care to not
114
 * overflow when doing the multiplication.
115
 *
116
 * @size should be a constant so that the compiler can optimize
117
 * out a constant division.
118
 *
119
 * Return value: A pointer to the newly allocated memory, or %NULL in
120
 * case of calloc() failure or overflow.
121
 **/
122
123
static cairo_always_inline void *
124
_cairo_calloc_ab(size_t a, size_t size)
125
19.0k
{
126
19.0k
    size_t c;
127
19.0k
    if (_cairo_mul_size_t_overflow (a, size, &c))
128
0
  return NULL;
129
130
19.0k
    return _cairo_calloc(c);
131
19.0k
}
Unexecuted instantiation: cairo-font-face.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-font-options.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-image-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-matrix.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-misc.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-mutex.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-pattern.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-raster-source-pattern.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-recording-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-rectangle.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-region.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-scaled-font.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-spline.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-stroke-style.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-surface-snapshot.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-surface-wrapper.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-traps.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-unicode.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-user-font.c:_cairo_calloc_ab
Unexecuted instantiation: cairo.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-ft-font.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-colr-glyph-render.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-svg-glyph-render.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-analysis-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-array.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-boxes.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-cache.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-clip-boxes.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-clip.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-color.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-composite-rectangles.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-damage.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-debug.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-default-context.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-device.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-error.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-font-face-twin.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-freed-pool.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-gstate.c:_cairo_calloc_ab
cairo-hash.c:_cairo_calloc_ab
Line
Count
Source
125
14.4k
{
126
14.4k
    size_t c;
127
14.4k
    if (_cairo_mul_size_t_overflow (a, size, &c))
128
0
  return NULL;
129
130
14.4k
    return _cairo_calloc(c);
131
14.4k
}
Unexecuted instantiation: cairo-image-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-image-source.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-line.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-mask-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-mesh-pattern-rasterizer.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-mono-scan-converter.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-no-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-observer.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-bounds.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-fill.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-fixed.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-in-fill.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-stroke-boxes.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-stroke-polygon.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-stroke.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-pen.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-polygon.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-shape-mask-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-slope.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-spans-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-spans.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-stroke-dash.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-surface-offset.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-tor-scan-converter.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-tor22-scan-converter.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-toy-font-face.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-traps-compositor.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-png.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-arc.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-bentley-ottmann-rectangular.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-bentley-ottmann-rectilinear.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-boxes-intersect.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-clip-polygon.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-clip-region.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-clip-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-contour.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-font-face-twin-data.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-freelist.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-hull.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-output-stream.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-path-stroke-traps.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-polygon-intersect.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-polygon-reduce.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-rectangular-scan-converter.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-wideint.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-pdf-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-image-info.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-paginated-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-surface-clipper.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-version.c:_cairo_calloc_ab
cairo-cff-subset.c:_cairo_calloc_ab
Line
Count
Source
125
168
{
126
168
    size_t c;
127
168
    if (_cairo_mul_size_t_overflow (a, size, &c))
128
0
  return NULL;
129
130
168
    return _cairo_calloc(c);
131
168
}
Unexecuted instantiation: cairo-scaled-font-subsets.c:_cairo_calloc_ab
cairo-truetype-subset.c:_cairo_calloc_ab
Line
Count
Source
125
2.81k
{
126
2.81k
    size_t c;
127
2.81k
    if (_cairo_mul_size_t_overflow (a, size, &c))
128
0
  return NULL;
129
130
2.81k
    return _cairo_calloc(c);
131
2.81k
}
cairo-type1-fallback.c:_cairo_calloc_ab
Line
Count
Source
125
46
{
126
46
    size_t c;
127
46
    if (_cairo_mul_size_t_overflow (a, size, &c))
128
0
  return NULL;
129
130
46
    return _cairo_calloc(c);
131
46
}
Unexecuted instantiation: cairo-type1-glyph-names.c:_cairo_calloc_ab
cairo-type1-subset.c:_cairo_calloc_ab
Line
Count
Source
125
1.64k
{
126
1.64k
    size_t c;
127
1.64k
    if (_cairo_mul_size_t_overflow (a, size, &c))
128
0
  return NULL;
129
130
1.64k
    return _cairo_calloc(c);
131
1.64k
}
Unexecuted instantiation: cairo-type3-glyph-surface.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-pdf-operators.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-pdf-shading.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-tag-attributes.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-tag-stack.c:_cairo_calloc_ab
Unexecuted instantiation: cairo-deflate-stream.c:_cairo_calloc_ab
132
133
/**
134
 * _cairo_realloc_ab:
135
 * @ptr: original pointer to block of memory to be resized
136
 * @a: number of elements to allocate
137
 * @size: size of each element
138
 *
139
 * Reallocates @ptr a block of @a*@size memory using realloc(), taking
140
 * care to not overflow when doing the multiplication.  The memory
141
 * should be freed using free().
142
 *
143
 * @size should be a constant so that the compiler can optimize
144
 * out a constant division.
145
 *
146
 * Return value: A pointer to the newly allocated memory, or %NULL in
147
 * case of realloc() failure or overflow (whereupon the original block
148
 * of memory * is left untouched).
149
 **/
150
151
static cairo_always_inline void *
152
_cairo_realloc_ab(void *ptr, size_t a, size_t size)
153
81.9k
{
154
81.9k
    size_t c;
155
81.9k
    if (_cairo_mul_size_t_overflow (a, size, &c))
156
0
  return NULL;
157
158
81.9k
    return realloc(ptr, c);
159
81.9k
}
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
cairo-pattern.c:_cairo_realloc_ab
Line
Count
Source
153
3.07k
{
154
3.07k
    size_t c;
155
3.07k
    if (_cairo_mul_size_t_overflow (a, size, &c))
156
0
  return NULL;
157
158
3.07k
    return realloc(ptr, c);
159
3.07k
}
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-region.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-user-font.c:_cairo_realloc_ab
Unexecuted instantiation: cairo.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-ft-font.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-colr-glyph-render.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-svg-glyph-render.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-analysis-surface.c:_cairo_realloc_ab
cairo-array.c:_cairo_realloc_ab
Line
Count
Source
153
77.3k
{
154
77.3k
    size_t c;
155
77.3k
    if (_cairo_mul_size_t_overflow (a, size, &c))
156
0
  return NULL;
157
158
77.3k
    return realloc(ptr, c);
159
77.3k
}
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-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-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
Unexecuted instantiation: cairo-path-stroke-boxes.c:_cairo_realloc_ab
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
153
1.51k
{
154
1.51k
    size_t c;
155
1.51k
    if (_cairo_mul_size_t_overflow (a, size, &c))
156
0
  return NULL;
157
158
1.51k
    return realloc(ptr, c);
159
1.51k
}
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-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-png.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-output-stream.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-pdf-surface.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-image-info.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-paginated-surface.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-surface-clipper.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-version.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-tag-stack.c:_cairo_realloc_ab
Unexecuted instantiation: cairo-deflate-stream.c:_cairo_realloc_ab
160
161
/**
162
 * _cairo_malloc_abc:
163
 * @a: first factor of number of elements to allocate
164
 * @b: second factor of number of elements to allocate
165
 * @size: size of each element
166
 *
167
 * Allocates @a*@b*@size memory using _cairo_malloc(), taking care to not
168
 * overflow when doing the multiplication.  Behaves like
169
 * _cairo_malloc_ab().  The memory should be freed using free().
170
 *
171
 * @size should be a constant so that the compiler can optimize
172
 * out a constant division.
173
 *
174
 * Return value: A pointer to the newly allocated memory, or %NULL in
175
 * case of malloc() failure or overflow.
176
 **/
177
178
static cairo_always_inline void *
179
_cairo_malloc_abc(size_t a, size_t b, size_t size)
180
319
{
181
319
    size_t c, d;
182
319
    if (_cairo_mul_size_t_overflow (a, b, &c))
183
0
  return NULL;
184
185
319
    if (_cairo_mul_size_t_overflow (c, size, &d))
186
0
  return NULL;
187
188
319
    return _cairo_malloc(d);
189
319
}
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-region.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-user-font.c:_cairo_malloc_abc
Unexecuted instantiation: cairo.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-ft-font.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-colr-glyph-render.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-svg-glyph-render.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-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-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-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-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-png.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-output-stream.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
cairo-pdf-surface.c:_cairo_malloc_abc
Line
Count
Source
180
319
{
181
319
    size_t c, d;
182
319
    if (_cairo_mul_size_t_overflow (a, b, &c))
183
0
  return NULL;
184
185
319
    if (_cairo_mul_size_t_overflow (c, size, &d))
186
0
  return NULL;
187
188
319
    return _cairo_malloc(d);
189
319
}
Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-image-info.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-paginated-surface.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-surface-clipper.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-version.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-tag-stack.c:_cairo_malloc_abc
Unexecuted instantiation: cairo-deflate-stream.c:_cairo_malloc_abc
190
191
/**
192
 * _cairo_malloc_ab_plus_c:
193
 * @a: number of elements to allocate
194
 * @size: size of each element
195
 * @c: additional size to allocate
196
 *
197
 * Allocates @a*@size+@c memory using _cairo_malloc(), taking care to not
198
 * overflow when doing the arithmetic.  Behaves similar to
199
 * _cairo_malloc_ab().  The memory should be freed using free().
200
 *
201
 * Return value: A pointer to the newly allocated memory, or %NULL in
202
 * case of malloc() failure or overflow.
203
 **/
204
205
static cairo_always_inline void *
206
_cairo_malloc_ab_plus_c(size_t a, size_t size, size_t c)
207
32.4k
{
208
32.4k
    size_t d, e;
209
32.4k
    if (_cairo_mul_size_t_overflow (a, size, &d))
210
0
  return NULL;
211
212
32.4k
    if (_cairo_add_size_t_overflow (d, c, &e))
213
0
  return NULL;
214
215
32.4k
    return _cairo_malloc(e);
216
32.4k
}
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-region.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-user-font.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-colr-glyph-render.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-svg-glyph-render.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
Unexecuted instantiation: cairo-boxes.c:_cairo_malloc_ab_plus_c
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-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-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
207
14.3k
{
208
14.3k
    size_t d, e;
209
14.3k
    if (_cairo_mul_size_t_overflow (a, size, &d))
210
0
  return NULL;
211
212
14.3k
    if (_cairo_add_size_t_overflow (d, c, &e))
213
0
  return NULL;
214
215
14.3k
    return _cairo_malloc(e);
216
14.3k
}
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-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-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-png.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-arc.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-bentley-ottmann-rectangular.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-bentley-ottmann-rectilinear.c:_cairo_malloc_ab_plus_c
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
207
131
{
208
131
    size_t d, e;
209
131
    if (_cairo_mul_size_t_overflow (a, size, &d))
210
0
  return NULL;
211
212
131
    if (_cairo_add_size_t_overflow (d, c, &e))
213
0
  return NULL;
214
215
131
    return _cairo_malloc(e);
216
131
}
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-output-stream.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-pdf-surface.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-pdf-interchange.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-image-info.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-paginated-surface.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-surface-clipper.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-version.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
cairo-truetype-subset.c:_cairo_malloc_ab_plus_c
Line
Count
Source
207
18.0k
{
208
18.0k
    size_t d, e;
209
18.0k
    if (_cairo_mul_size_t_overflow (a, size, &d))
210
0
  return NULL;
211
212
18.0k
    if (_cairo_add_size_t_overflow (d, c, &e))
213
0
  return NULL;
214
215
18.0k
    return _cairo_malloc(e);
216
18.0k
}
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-tag-stack.c:_cairo_malloc_ab_plus_c
Unexecuted instantiation: cairo-deflate-stream.c:_cairo_malloc_ab_plus_c
217
218
#endif /* CAIRO_MALLOC_PRIVATE_H */