Coverage Report

Created: 2025-07-18 06:40

/src/h2o/deps/hiredis/alloc.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>
3
 *
4
 * All rights reserved.
5
 *
6
 * Redistribution and use in source and binary forms, with or without
7
 * modification, are permitted provided that the following conditions are met:
8
 *
9
 *   * Redistributions of source code must retain the above copyright notice,
10
 *     this list of conditions and the following disclaimer.
11
 *   * Redistributions in binary form must reproduce the above copyright
12
 *     notice, this list of conditions and the following disclaimer in the
13
 *     documentation and/or other materials provided with the distribution.
14
 *   * Neither the name of Redis nor the names of its contributors may be used
15
 *     to endorse or promote products derived from this software without
16
 *     specific prior written permission.
17
 *
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
 * POSSIBILITY OF SUCH DAMAGE.
29
 */
30
31
#include "fmacros.h"
32
#include "alloc.h"
33
#include <string.h>
34
#include <stdlib.h>
35
36
hiredisAllocFuncs hiredisAllocFns = {
37
    .mallocFn = malloc,
38
    .callocFn = calloc,
39
    .reallocFn = realloc,
40
    .strdupFn = strdup,
41
    .freeFn = free,
42
};
43
44
/* Override hiredis' allocators with ones supplied by the user */
45
0
hiredisAllocFuncs hiredisSetAllocators(hiredisAllocFuncs *override) {
46
0
    hiredisAllocFuncs orig = hiredisAllocFns;
47
48
0
    hiredisAllocFns = *override;
49
50
0
    return orig;
51
0
}
52
53
/* Reset allocators to use libc defaults */
54
0
void hiredisResetAllocators(void) {
55
0
    hiredisAllocFns = (hiredisAllocFuncs) {
56
0
        .mallocFn = malloc,
57
0
        .callocFn = calloc,
58
0
        .reallocFn = realloc,
59
0
        .strdupFn = strdup,
60
0
        .freeFn = free,
61
0
    };
62
0
}
63
64
#ifdef _WIN32
65
66
void *hi_malloc(size_t size) {
67
    return hiredisAllocFns.mallocFn(size);
68
}
69
70
void *hi_calloc(size_t nmemb, size_t size) {
71
    /* Overflow check as the user can specify any arbitrary allocator */
72
    if (SIZE_MAX / size < nmemb)
73
        return NULL;
74
75
    return hiredisAllocFns.callocFn(nmemb, size);
76
}
77
78
void *hi_realloc(void *ptr, size_t size) {
79
    return hiredisAllocFns.reallocFn(ptr, size);
80
}
81
82
char *hi_strdup(const char *str) {
83
    return hiredisAllocFns.strdupFn(str);
84
}
85
86
void hi_free(void *ptr) {
87
    hiredisAllocFns.freeFn(ptr);
88
}
89
90
#endif