Skip to content

Commit 354aafd

Browse files
committed
Check return value of calloc
Fixes #1443 Also remove unused macros Assisted-by: Kimi-k2.6
1 parent 6a7a59f commit 354aafd

3 files changed

Lines changed: 17 additions & 23 deletions

File tree

src/odb_backend.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@ OdbBackend_init(OdbBackend *self, PyObject *args, PyObject *kwds)
255255

256256
// Create the C backend
257257
pgit_odb_backend *custom_backend = calloc(1, sizeof(pgit_odb_backend));
258+
if (custom_backend == NULL) {
259+
PyErr_NoMemory();
260+
return -1;
261+
}
258262
custom_backend->backend.version = GIT_ODB_BACKEND_VERSION;
259263

260264
// Fill the member methods

src/refdb_backend.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "wildmatch.h"
3737
#include <git2/refdb.h>
3838
#include <git2/sys/refdb_backend.h>
39+
#include <git2/sys/errors.h>
3940

4041
extern PyTypeObject ReferenceType;
4142
extern PyTypeObject RepositoryType;
@@ -137,8 +138,12 @@ pygit2_refdb_backend_iterator(git_reference_iterator **iter,
137138
PyObject *iterator = PyObject_GetIter((PyObject *)be->RefdbBackend);
138139
assert(iterator);
139140

140-
struct pygit2_refdb_iterator *pyiter =
141-
calloc(1, sizeof(struct pygit2_refdb_iterator));
141+
struct pygit2_refdb_iterator *pyiter = calloc(1, sizeof(struct pygit2_refdb_iterator));
142+
if (pyiter == NULL) {
143+
Py_DECREF(iterator);
144+
git_error_set(GIT_ERROR_NOMEMORY, "out of memory");
145+
return GIT_ERROR;
146+
}
142147
*iter = (git_reference_iterator *)pyiter;
143148
pyiter->iterator = iterator;
144149
pyiter->base.next = pygit2_refdb_iterator_next;
@@ -389,18 +394,20 @@ int
389394
RefdbBackend_init(RefdbBackend *self, PyObject *args, PyObject *kwds)
390395
{
391396
if (args && PyTuple_Size(args) > 0) {
392-
PyErr_SetString(PyExc_TypeError,
393-
"RefdbBackend takes no arguments");
397+
PyErr_SetString(PyExc_TypeError, "RefdbBackend takes no arguments");
394398
return -1;
395399
}
396400

397401
if (kwds && PyDict_Size(kwds) > 0) {
398-
PyErr_SetString(PyExc_TypeError,
399-
"RefdbBackend takes no keyword arguments");
402+
PyErr_SetString(PyExc_TypeError, "RefdbBackend takes no keyword arguments");
400403
return -1;
401404
}
402405

403406
struct pygit2_refdb_backend *be = calloc(1, sizeof(struct pygit2_refdb_backend));
407+
if (be == NULL) {
408+
PyErr_NoMemory();
409+
return -1;
410+
}
404411
git_refdb_init_backend(&be->backend, GIT_REFDB_BACKEND_VERSION);
405412
be->RefdbBackend = (PyObject *)self;
406413

src/utils.h

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,6 @@ PyObject *pygit2_enum(PyObject *enum_type, int value);
128128
{#attr, attr_type, offsetof(type, attr), READONLY, PyDoc_STR(docstr)}
129129

130130

131-
/* Helpers for memory allocation */
132-
#define CALLOC(ptr, num, size, label) \
133-
ptr = calloc((num), size);\
134-
if (ptr == NULL) {\
135-
err = GIT_ERROR;\
136-
giterr_set_oom();\
137-
goto label;\
138-
}
139-
140-
#define MALLOC(ptr, size, label) \
141-
ptr = malloc(size);\
142-
if (ptr == NULL) {\
143-
err = GIT_ERROR;\
144-
giterr_set_oom();\
145-
goto label;\
146-
}
147-
148131
/* Helpers to make type init shorter. */
149132
#define INIT_TYPE(type, base, new) \
150133
type.tp_base = base; \

0 commit comments

Comments
 (0)