Check return values of malloc, realloc, strdup and strndup
This commit is contained in:
parent
3f9d921782
commit
2e0a7fda26
@ -57,6 +57,7 @@ static int (*autocomplete_fun)(const char *, int, int, char **);
|
|||||||
static void set_autocomplete_string (const char *s) {
|
static void set_autocomplete_string (const char *s) {
|
||||||
if (autocomplete_string) { free (autocomplete_string); }
|
if (autocomplete_string) { free (autocomplete_string); }
|
||||||
autocomplete_string = strdup (s);
|
autocomplete_string = strdup (s);
|
||||||
|
assert (autocomplete_string);
|
||||||
autocomplete_mode = 1;
|
autocomplete_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,12 +117,16 @@ static double get_double (void) {
|
|||||||
static struct paramed_type *paramed_type_dup (struct paramed_type *P) {
|
static struct paramed_type *paramed_type_dup (struct paramed_type *P) {
|
||||||
if (ODDP (P)) { return P; }
|
if (ODDP (P)) { return P; }
|
||||||
struct paramed_type *R = malloc (sizeof (*R));
|
struct paramed_type *R = malloc (sizeof (*R));
|
||||||
|
assert (R);
|
||||||
R->type = malloc (sizeof (*R->type));
|
R->type = malloc (sizeof (*R->type));
|
||||||
|
assert (R->type);
|
||||||
memcpy (R->type, P->type, sizeof (*P->type));
|
memcpy (R->type, P->type, sizeof (*P->type));
|
||||||
R->type->id = strdup (P->type->id);
|
R->type->id = strdup (P->type->id);
|
||||||
|
assert (R->type->id);
|
||||||
|
|
||||||
if (P->type->params_num) {
|
if (P->type->params_num) {
|
||||||
R->params = malloc (sizeof (void *) * P->type->params_num);
|
R->params = malloc (sizeof (void *) * P->type->params_num);
|
||||||
|
assert (R->params);
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < P->type->params_num; i++) {
|
for (i = 0; i < P->type->params_num; i++) {
|
||||||
R->params[i] = paramed_type_dup (P->params[i]);
|
R->params[i] = paramed_type_dup (P->params[i]);
|
||||||
@ -287,6 +292,7 @@ int tglf_extf_autocomplete (const char *text, int text_len, int index, char **R,
|
|||||||
index = 0;
|
index = 0;
|
||||||
if (!strncmp (text, autocomplete_string, len)) {
|
if (!strncmp (text, autocomplete_string, len)) {
|
||||||
*R = strdup (autocomplete_string);
|
*R = strdup (autocomplete_string);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -99,6 +99,7 @@ long long get_long (void) {
|
|||||||
|
|
||||||
static void *malloc0 (int size) {
|
static void *malloc0 (int size) {
|
||||||
void *r = malloc (size);
|
void *r = malloc (size);
|
||||||
|
assert (r);
|
||||||
memset (r, 0, size);
|
memset (r, 0, size);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -126,7 +127,9 @@ char *get_string (void) {
|
|||||||
buf_ptr += tlen / 4;
|
buf_ptr += tlen / 4;
|
||||||
assert (buf_ptr <= buf_end);
|
assert (buf_ptr <= buf_end);
|
||||||
|
|
||||||
return strndup (res, len);
|
char *r = strndup (res, len);
|
||||||
|
assert (r);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -144,6 +147,7 @@ int read_args_list (struct arg **args, int args_num, int *var_num);
|
|||||||
void *int_to_var_nat_const_init (long long x) {
|
void *int_to_var_nat_const_init (long long x) {
|
||||||
if (use_var_nat_full_form (x)) {
|
if (use_var_nat_full_form (x)) {
|
||||||
struct tl_tree_nat_const *T = malloc (sizeof (*T));
|
struct tl_tree_nat_const *T = malloc (sizeof (*T));
|
||||||
|
assert (T);
|
||||||
T->self.flags = 0;
|
T->self.flags = 0;
|
||||||
T->self.methods = &tl_pnat_const_full_methods;
|
T->self.methods = &tl_pnat_const_full_methods;
|
||||||
T->value = x;
|
T->value = x;
|
||||||
@ -1460,6 +1464,7 @@ struct tl_combinator *read_combinators (int v) {
|
|||||||
c->name = get_int ();
|
c->name = get_int ();
|
||||||
c->id = get_string ();
|
c->id = get_string ();
|
||||||
c->print_id = strdup (gen_print_id (c->id));
|
c->print_id = strdup (gen_print_id (c->id));
|
||||||
|
assert (c->print_id);
|
||||||
//char *s = c->id;
|
//char *s = c->id;
|
||||||
//while (*s) { if (*s == '.') { *s = '_'; } ; s ++;}
|
//while (*s) { if (*s == '.') { *s = '_'; } ; s ++;}
|
||||||
int x = get_int ();
|
int x = get_int ();
|
||||||
@ -1485,6 +1490,7 @@ struct tl_type *read_types (void) {
|
|||||||
t->name = get_int ();
|
t->name = get_int ();
|
||||||
t->id = get_string ();
|
t->id = get_string ();
|
||||||
t->print_id = strdup (gen_print_id (t->id));
|
t->print_id = strdup (gen_print_id (t->id));
|
||||||
|
assert (t->print_id);
|
||||||
|
|
||||||
t->constructors_num = get_int ();
|
t->constructors_num = get_int ();
|
||||||
assert (t->constructors_num >= 0 && t->constructors_num <= 1000);
|
assert (t->constructors_num >= 0 && t->constructors_num <= 1000);
|
||||||
|
32
interface.c
32
interface.c
@ -461,6 +461,7 @@ int complete_string_list (char **list, int index, const char *text, int len, cha
|
|||||||
}
|
}
|
||||||
if (list[index]) {
|
if (list[index]) {
|
||||||
*R = strdup (list[index]);
|
*R = strdup (list[index]);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
*R = 0;
|
*R = 0;
|
||||||
@ -475,6 +476,7 @@ int complete_command_list (int index, const char *text, int len, char **R) {
|
|||||||
}
|
}
|
||||||
if (commands[index].name) {
|
if (commands[index].name) {
|
||||||
*R = strdup (commands[index].name);
|
*R = strdup (commands[index].name);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
*R = 0;
|
*R = 0;
|
||||||
@ -1163,7 +1165,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_send_photo (tgl_message_media_photo, id, strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_send_photo (tgl_message_media_photo, id, d, 0, 0);
|
||||||
} else if (IS_WORD ("chat_set_photo")) {
|
} else if (IS_WORD ("chat_set_photo")) {
|
||||||
GET_PEER_CHAT;
|
GET_PEER_CHAT;
|
||||||
int t;
|
int t;
|
||||||
@ -1172,7 +1176,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_set_chat_photo (id, strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_set_chat_photo (id, d, 0, 0);
|
||||||
} else if (IS_WORD ("set_profile_photo")) {
|
} else if (IS_WORD ("set_profile_photo")) {
|
||||||
int t;
|
int t;
|
||||||
char *s = end_string_token (&t);
|
char *s = end_string_token (&t);
|
||||||
@ -1180,7 +1186,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_set_profile_photo (strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_set_profile_photo (d, 0, 0);
|
||||||
} else if (IS_WORD("send_video")) {
|
} else if (IS_WORD("send_video")) {
|
||||||
GET_PEER;
|
GET_PEER;
|
||||||
int t;
|
int t;
|
||||||
@ -1189,7 +1197,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_send_photo (tgl_message_media_video, id, strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_send_photo (tgl_message_media_video, id, d, 0, 0);
|
||||||
} else if (IS_WORD ("send_text")) {
|
} else if (IS_WORD ("send_text")) {
|
||||||
GET_PEER;
|
GET_PEER;
|
||||||
int t;
|
int t;
|
||||||
@ -1198,7 +1208,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_send_text (id, strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_send_text (id, d, 0, 0);
|
||||||
} else if (IS_WORD ("fwd")) {
|
} else if (IS_WORD ("fwd")) {
|
||||||
GET_PEER;
|
GET_PEER;
|
||||||
int num = next_token_int ();
|
int num = next_token_int ();
|
||||||
@ -1533,7 +1545,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_send_photo (tgl_message_media_audio, id, strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_send_photo (tgl_message_media_audio, id, d, 0, 0);
|
||||||
} else if (IS_WORD("send_document")) {
|
} else if (IS_WORD("send_document")) {
|
||||||
GET_PEER;
|
GET_PEER;
|
||||||
int t;
|
int t;
|
||||||
@ -1542,7 +1556,9 @@ void interpreter (char *line UU) {
|
|||||||
printf ("Empty file name\n");
|
printf ("Empty file name\n");
|
||||||
RET;
|
RET;
|
||||||
}
|
}
|
||||||
tgl_do_send_photo (tgl_message_media_document, id, strndup (s, t), 0, 0);
|
char *d = strndup (s, t);
|
||||||
|
assert (d);
|
||||||
|
tgl_do_send_photo (tgl_message_media_document, id, d, 0, 0);
|
||||||
} else if (IS_WORD ("load_audio")) {
|
} else if (IS_WORD ("load_audio")) {
|
||||||
long long num = next_token_int ();
|
long long num = next_token_int ();
|
||||||
if (num == NOT_FOUND) {
|
if (num == NOT_FOUND) {
|
||||||
@ -1739,6 +1755,7 @@ void print_start (void) {
|
|||||||
saved_point = rl_point;
|
saved_point = rl_point;
|
||||||
#ifdef READLINE_GNU
|
#ifdef READLINE_GNU
|
||||||
saved_line = malloc (rl_end + 1);
|
saved_line = malloc (rl_end + 1);
|
||||||
|
assert (saved_line);
|
||||||
saved_line[rl_end] = 0;
|
saved_line[rl_end] = 0;
|
||||||
memcpy (saved_line, rl_line_buffer, rl_end);
|
memcpy (saved_line, rl_line_buffer, rl_end);
|
||||||
|
|
||||||
@ -1747,6 +1764,7 @@ void print_start (void) {
|
|||||||
#else
|
#else
|
||||||
assert (rl_end >= 0);
|
assert (rl_end >= 0);
|
||||||
saved_line = malloc (rl_end + 1);
|
saved_line = malloc (rl_end + 1);
|
||||||
|
assert (saved_line);
|
||||||
memcpy (saved_line, rl_line_buffer, rl_end + 1);
|
memcpy (saved_line, rl_line_buffer, rl_end + 1);
|
||||||
rl_line_buffer[0] = 0;
|
rl_line_buffer[0] = 0;
|
||||||
set_prompt ("");
|
set_prompt ("");
|
||||||
|
2
loop.c
2
loop.c
@ -96,6 +96,7 @@ static void stdin_read_callback_all (int arg, short what, struct event *self) {
|
|||||||
while (1) {
|
while (1) {
|
||||||
if (line_buffer_pos == line_buffer_size) {
|
if (line_buffer_pos == line_buffer_size) {
|
||||||
line_buffer = realloc (line_buffer, line_buffer_size * 2 + 100);
|
line_buffer = realloc (line_buffer, line_buffer_size * 2 + 100);
|
||||||
|
assert (line_buffer);
|
||||||
line_buffer_size = line_buffer_size * 2 + 100;
|
line_buffer_size = line_buffer_size * 2 + 100;
|
||||||
assert (line_buffer);
|
assert (line_buffer);
|
||||||
}
|
}
|
||||||
@ -267,6 +268,7 @@ void sign_in_callback (void *extra, int success, int registered, const char *mha
|
|||||||
}
|
}
|
||||||
should_register = !registered;
|
should_register = !registered;
|
||||||
hash = strdup (mhash);
|
hash = strdup (mhash);
|
||||||
|
assert (hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
2
lua-tg.c
2
lua-tg.c
@ -1181,6 +1181,7 @@ static int parse_lua_function (lua_State *L, struct lua_function *F) {
|
|||||||
int a2 = luaL_ref (L, LUA_REGISTRYINDEX);
|
int a2 = luaL_ref (L, LUA_REGISTRYINDEX);
|
||||||
|
|
||||||
struct lua_query_extra *e = malloc (sizeof (*e));
|
struct lua_query_extra *e = malloc (sizeof (*e));
|
||||||
|
assert (e);
|
||||||
e->func = a2;
|
e->func = a2;
|
||||||
e->param = a1;
|
e->param = a1;
|
||||||
|
|
||||||
@ -1357,6 +1358,7 @@ static int postpone_from_lua (lua_State *L) {
|
|||||||
|
|
||||||
|
|
||||||
int *t = malloc (16);
|
int *t = malloc (16);
|
||||||
|
assert (t);
|
||||||
struct event *ev = evtimer_new (tgl_state.ev_base, lua_postpone_alarm, t);
|
struct event *ev = evtimer_new (tgl_state.ev_base, lua_postpone_alarm, t);
|
||||||
t[0] = a1;
|
t[0] = a1;
|
||||||
t[1] = a2;
|
t[1] = a2;
|
||||||
|
@ -1754,6 +1754,7 @@ int tgl_complete_user_list (int index, const char *text, int len, char **R) {
|
|||||||
}
|
}
|
||||||
if (index < peer_num) {
|
if (index < peer_num) {
|
||||||
*R = strdup (Peers[index]->print_name);
|
*R = strdup (Peers[index]->print_name);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1767,6 +1768,7 @@ int tgl_complete_chat_list (int index, const char *text, int len, char **R) {
|
|||||||
}
|
}
|
||||||
if (index < peer_num) {
|
if (index < peer_num) {
|
||||||
*R = strdup (Peers[index]->print_name);
|
*R = strdup (Peers[index]->print_name);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1780,6 +1782,7 @@ int tgl_complete_encr_chat_list (int index, const char *text, int len, char **R)
|
|||||||
}
|
}
|
||||||
if (index < peer_num) {
|
if (index < peer_num) {
|
||||||
*R = strdup (Peers[index]->print_name);
|
*R = strdup (Peers[index]->print_name);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1793,6 +1796,7 @@ int tgl_complete_peer_list (int index, const char *text, int len, char **R) {
|
|||||||
}
|
}
|
||||||
if (index < peer_num) {
|
if (index < peer_num) {
|
||||||
*R = strdup (Peers[index]->print_name);
|
*R = strdup (Peers[index]->print_name);
|
||||||
|
assert (*R);
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user