Line data Source code
1 : #include "Python.h"
2 : #include "asdl.h"
3 :
4 : asdl_seq *
5 14767 : asdl_seq_new(int size, PyArena *arena)
6 : {
7 14767 : asdl_seq *seq = NULL;
8 14767 : size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
9 :
10 : /* check size is sane */
11 14767 : if (size < 0 || size == INT_MIN ||
12 11934 : (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) {
13 0 : PyErr_NoMemory();
14 0 : return NULL;
15 : }
16 :
17 : /* check if size can be added safely */
18 14767 : if (n > PY_SIZE_MAX - sizeof(asdl_seq)) {
19 0 : PyErr_NoMemory();
20 0 : return NULL;
21 : }
22 :
23 14767 : n += sizeof(asdl_seq);
24 :
25 14767 : seq = (asdl_seq *)PyArena_Malloc(arena, n);
26 14767 : if (!seq) {
27 0 : PyErr_NoMemory();
28 0 : return NULL;
29 : }
30 14767 : memset(seq, 0, n);
31 14767 : seq->size = size;
32 14767 : return seq;
33 : }
34 :
35 : asdl_int_seq *
36 911 : asdl_int_seq_new(int size, PyArena *arena)
37 : {
38 911 : asdl_int_seq *seq = NULL;
39 911 : size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
40 :
41 : /* check size is sane */
42 911 : if (size < 0 || size == INT_MIN ||
43 911 : (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) {
44 0 : PyErr_NoMemory();
45 0 : return NULL;
46 : }
47 :
48 : /* check if size can be added safely */
49 911 : if (n > PY_SIZE_MAX - sizeof(asdl_seq)) {
50 0 : PyErr_NoMemory();
51 0 : return NULL;
52 : }
53 :
54 911 : n += sizeof(asdl_seq);
55 :
56 911 : seq = (asdl_int_seq *)PyArena_Malloc(arena, n);
57 911 : if (!seq) {
58 0 : PyErr_NoMemory();
59 0 : return NULL;
60 : }
61 911 : memset(seq, 0, n);
62 911 : seq->size = size;
63 911 : return seq;
64 : }
|