mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
cleanup: Avoid memset
on structs.
Most of these were safe (some were not), but even the safe ones can become unsafe (non-portable) later on when adding pointer or float members.
This commit is contained in:
parent
00e55b34d6
commit
c3a938e38c
|
@ -1 +1 @@
|
||||||
6a7b0559334d281aacd5ebc18ed5523da1ac49d9dd09d81a33166a598d4a97b5 /usr/local/bin/tox-bootstrapd
|
d17e339f89331fa295f92bbe3c3a1dad6331d523ae9c898cab3d9b5cbc0e8ea9 /usr/local/bin/tox-bootstrapd
|
||||||
|
|
|
@ -16,7 +16,6 @@ sh_test(
|
||||||
"-Wno-boolean-return",
|
"-Wno-boolean-return",
|
||||||
"-Wno-callback-names",
|
"-Wno-callback-names",
|
||||||
"-Wno-enum-names",
|
"-Wno-enum-names",
|
||||||
"-Wno-memcpy-structs",
|
|
||||||
"-Wno-type-check",
|
"-Wno-type-check",
|
||||||
"+RTS",
|
"+RTS",
|
||||||
"-N3",
|
"-N3",
|
||||||
|
|
|
@ -68,6 +68,9 @@ struct DHT_Friend {
|
||||||
unsigned int num_to_bootstrap;
|
unsigned int num_to_bootstrap;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const DHT_Friend empty_dht_friend = {{0}};
|
||||||
|
const Node_format empty_node_format = {{0}};
|
||||||
|
|
||||||
typedef struct Cryptopacket_Handler {
|
typedef struct Cryptopacket_Handler {
|
||||||
cryptopacket_handler_cb *function;
|
cryptopacket_handler_cb *function;
|
||||||
void *object;
|
void *object;
|
||||||
|
@ -582,7 +585,6 @@ int unpack_ip_port(IP_Port *ip_port, const uint8_t *data, uint16_t length, bool
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const IP_Port empty_ip_port = {{{0}}};
|
|
||||||
*ip_port = empty_ip_port;
|
*ip_port = empty_ip_port;
|
||||||
|
|
||||||
if (is_ipv4) {
|
if (is_ipv4) {
|
||||||
|
@ -1652,7 +1654,7 @@ int dht_addfriend(DHT *dht, const uint8_t *public_key, dht_ip_cb *ip_callback,
|
||||||
|
|
||||||
dht->friends_list = temp;
|
dht->friends_list = temp;
|
||||||
DHT_Friend *const dht_friend = &dht->friends_list[dht->num_friends];
|
DHT_Friend *const dht_friend = &dht->friends_list[dht->num_friends];
|
||||||
memset(dht_friend, 0, sizeof(DHT_Friend));
|
*dht_friend = empty_dht_friend;
|
||||||
memcpy(dht_friend->public_key, public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
memcpy(dht_friend->public_key, public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
||||||
|
|
||||||
dht_friend->nat.nat_ping_id = random_u64();
|
dht_friend->nat.nat_ping_id = random_u64();
|
||||||
|
|
|
@ -162,6 +162,8 @@ typedef struct Node_format {
|
||||||
IP_Port ip_port;
|
IP_Port ip_port;
|
||||||
} Node_format;
|
} Node_format;
|
||||||
|
|
||||||
|
extern const Node_format empty_node_format;
|
||||||
|
|
||||||
typedef struct DHT_Friend DHT_Friend;
|
typedef struct DHT_Friend DHT_Friend;
|
||||||
|
|
||||||
non_null() const uint8_t *dht_friend_public_key(const DHT_Friend *dht_friend);
|
non_null() const uint8_t *dht_friend_public_key(const DHT_Friend *dht_friend);
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
static_assert(MAX_CONCURRENT_FILE_PIPES <= UINT8_MAX + 1,
|
static_assert(MAX_CONCURRENT_FILE_PIPES <= UINT8_MAX + 1,
|
||||||
"uint8_t cannot represent all file transfer numbers");
|
"uint8_t cannot represent all file transfer numbers");
|
||||||
|
|
||||||
|
static const Friend empty_friend = {{0}};
|
||||||
|
|
||||||
/** @brief Set the size of the friend list to numfriends.
|
/** @brief Set the size of the friend list to numfriends.
|
||||||
*
|
*
|
||||||
* @retval -1 if realloc fails.
|
* @retval -1 if realloc fails.
|
||||||
|
@ -163,7 +165,7 @@ static int32_t init_new_friend(Messenger *m, const uint8_t *real_pk, uint8_t sta
|
||||||
return FAERR_NOMEM;
|
return FAERR_NOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&m->friendlist[m->numfriends], 0, sizeof(Friend));
|
m->friendlist[m->numfriends] = empty_friend;
|
||||||
|
|
||||||
const int friendcon_id = new_friend_connection(m->fr_c, real_pk);
|
const int friendcon_id = new_friend_connection(m->fr_c, real_pk);
|
||||||
|
|
||||||
|
@ -418,7 +420,7 @@ int m_delfriend(Messenger *m, int32_t friendnumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_friend_connection(m->fr_c, m->friendlist[friendnumber].friendcon_id);
|
kill_friend_connection(m->fr_c, m->friendlist[friendnumber].friendcon_id);
|
||||||
memset(&m->friendlist[friendnumber], 0, sizeof(Friend));
|
m->friendlist[friendnumber] = empty_friend;
|
||||||
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,10 @@ struct TCP_Connections {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const TCP_Connection_to empty_tcp_connection_to = {0};
|
||||||
|
static const TCP_con empty_tcp_con = {0};
|
||||||
|
|
||||||
|
|
||||||
const uint8_t *tcp_connections_public_key(const TCP_Connections *tcp_c)
|
const uint8_t *tcp_connections_public_key(const TCP_Connections *tcp_c)
|
||||||
{
|
{
|
||||||
return tcp_c->self_public_key;
|
return tcp_c->self_public_key;
|
||||||
|
@ -158,7 +162,7 @@ static int create_connection(TCP_Connections *tcp_c)
|
||||||
if (realloc_TCP_Connection_to(&tcp_c->connections, tcp_c->connections_length + 1) == 0) {
|
if (realloc_TCP_Connection_to(&tcp_c->connections, tcp_c->connections_length + 1) == 0) {
|
||||||
id = tcp_c->connections_length;
|
id = tcp_c->connections_length;
|
||||||
++tcp_c->connections_length;
|
++tcp_c->connections_length;
|
||||||
memset(&tcp_c->connections[id], 0, sizeof(TCP_Connection_to));
|
tcp_c->connections[id] = empty_tcp_connection_to;
|
||||||
}
|
}
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
|
@ -183,7 +187,7 @@ static int create_tcp_connection(TCP_Connections *tcp_c)
|
||||||
if (realloc_TCP_con(&tcp_c->tcp_connections, tcp_c->tcp_connections_length + 1) == 0) {
|
if (realloc_TCP_con(&tcp_c->tcp_connections, tcp_c->tcp_connections_length + 1) == 0) {
|
||||||
id = tcp_c->tcp_connections_length;
|
id = tcp_c->tcp_connections_length;
|
||||||
++tcp_c->tcp_connections_length;
|
++tcp_c->tcp_connections_length;
|
||||||
memset(&tcp_c->tcp_connections[id], 0, sizeof(TCP_con));
|
tcp_c->tcp_connections[id] = empty_tcp_con;
|
||||||
}
|
}
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
|
@ -202,7 +206,7 @@ static int wipe_connection(TCP_Connections *tcp_c, int connections_number)
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
memset(&tcp_c->connections[connections_number], 0, sizeof(TCP_Connection_to));
|
tcp_c->connections[connections_number] = empty_tcp_connection_to;
|
||||||
|
|
||||||
for (i = tcp_c->connections_length; i != 0; --i) {
|
for (i = tcp_c->connections_length; i != 0; --i) {
|
||||||
if (tcp_c->connections[i - 1].status != TCP_CONN_NONE) {
|
if (tcp_c->connections[i - 1].status != TCP_CONN_NONE) {
|
||||||
|
@ -230,7 +234,7 @@ static int wipe_tcp_connection(TCP_Connections *tcp_c, int tcp_connections_numbe
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&tcp_c->tcp_connections[tcp_connections_number], 0, sizeof(TCP_con));
|
tcp_c->tcp_connections[tcp_connections_number] = empty_tcp_con;
|
||||||
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,8 @@ struct Friend_Conn {
|
||||||
bool hosting_tcp_relay;
|
bool hosting_tcp_relay;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const Friend_Conn empty_friend_conn = {0};
|
||||||
|
|
||||||
|
|
||||||
struct Friend_Connections {
|
struct Friend_Connections {
|
||||||
const Mono_Time *mono_time;
|
const Mono_Time *mono_time;
|
||||||
|
@ -151,7 +153,7 @@ static int create_friend_conn(Friend_Connections *fr_c)
|
||||||
|
|
||||||
const int id = fr_c->num_cons;
|
const int id = fr_c->num_cons;
|
||||||
++fr_c->num_cons;
|
++fr_c->num_cons;
|
||||||
memset(&fr_c->conns[id], 0, sizeof(Friend_Conn));
|
fr_c->conns[id] = empty_friend_conn;
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -168,7 +170,7 @@ static int wipe_friend_conn(Friend_Connections *fr_c, int friendcon_id)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&fr_c->conns[friendcon_id], 0, sizeof(Friend_Conn));
|
fr_c->conns[friendcon_id] = empty_friend_conn;
|
||||||
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
@ -245,7 +247,7 @@ static int friend_add_tcp_relay(Friend_Connections *fr_c, int friendcon_id, cons
|
||||||
for (unsigned i = 0; i < FRIEND_MAX_STORED_TCP_RELAYS; ++i) {
|
for (unsigned i = 0; i < FRIEND_MAX_STORED_TCP_RELAYS; ++i) {
|
||||||
if (!net_family_is_unspec(friend_con->tcp_relays[i].ip_port.ip.family)
|
if (!net_family_is_unspec(friend_con->tcp_relays[i].ip_port.ip.family)
|
||||||
&& pk_equal(friend_con->tcp_relays[i].public_key, public_key)) {
|
&& pk_equal(friend_con->tcp_relays[i].public_key, public_key)) {
|
||||||
memset(&friend_con->tcp_relays[i], 0, sizeof(Node_format));
|
friend_con->tcp_relays[i] = empty_node_format;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,6 +156,9 @@ struct Group_Chats {
|
||||||
lossy_packet_cb *lossy_packethandlers[256];
|
lossy_packet_cb *lossy_packethandlers[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const Group_c empty_group_c = {0};
|
||||||
|
static const Group_Peer empty_group_peer = {{0}};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Packet type IDs as per the protocol specification.
|
* Packet type IDs as per the protocol specification.
|
||||||
*/
|
*/
|
||||||
|
@ -260,8 +263,7 @@ static bool realloc_conferences(Group_Chats *g_c, uint16_t num)
|
||||||
non_null()
|
non_null()
|
||||||
static void setup_conference(Group_c *g)
|
static void setup_conference(Group_c *g)
|
||||||
{
|
{
|
||||||
memset(g, 0, sizeof(Group_c));
|
*g = empty_group_c;
|
||||||
|
|
||||||
g->maxfrozen = MAX_FROZEN_DEFAULT;
|
g->maxfrozen = MAX_FROZEN_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,7 +835,7 @@ static int addpeer(Group_Chats *g_c, uint32_t groupnumber, const uint8_t *real_p
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&temp[g->numpeers], 0, sizeof(Group_Peer));
|
temp[g->numpeers] = empty_group_peer;
|
||||||
g->group = temp;
|
g->group = temp;
|
||||||
|
|
||||||
const uint32_t new_index = g->numpeers;
|
const uint32_t new_index = g->numpeers;
|
||||||
|
@ -3617,7 +3619,7 @@ static uint32_t load_group(Group_c *g, const Group_Chats *g_c, const uint8_t *da
|
||||||
g->frozen = tmp_frozen;
|
g->frozen = tmp_frozen;
|
||||||
|
|
||||||
Group_Peer *peer = &g->frozen[j];
|
Group_Peer *peer = &g->frozen[j];
|
||||||
memset(peer, 0, sizeof(Group_Peer));
|
*peer = empty_group_peer;
|
||||||
|
|
||||||
pk_copy(peer->real_pk, data);
|
pk_copy(peer->real_pk, data);
|
||||||
data += CRYPTO_PUBLIC_KEY_SIZE;
|
data += CRYPTO_PUBLIC_KEY_SIZE;
|
||||||
|
|
|
@ -340,6 +340,9 @@ static void fill_addr6(const IP6 *ip, struct in6_addr *addr)
|
||||||
#define INADDR_LOOPBACK 0x7f000001
|
#define INADDR_LOOPBACK 0x7f000001
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static const IP empty_ip = {{0}};
|
||||||
|
const IP_Port empty_ip_port = {{{0}}};
|
||||||
|
|
||||||
const IP4 ip4_broadcast = { INADDR_BROADCAST };
|
const IP4 ip4_broadcast = { INADDR_BROADCAST };
|
||||||
const IP6 ip6_broadcast = {
|
const IP6 ip6_broadcast = {
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }
|
||||||
|
@ -1172,7 +1175,7 @@ void ip_reset(IP *ip)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(ip, 0, sizeof(IP));
|
*ip = empty_ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** nulls out ip_port */
|
/** nulls out ip_port */
|
||||||
|
@ -1182,7 +1185,7 @@ void ipport_reset(IP_Port *ipport)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(ipport, 0, sizeof(IP_Port));
|
*ipport = empty_ip_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** nulls out ip, sets family according to flag */
|
/** nulls out ip, sets family according to flag */
|
||||||
|
@ -1192,7 +1195,7 @@ void ip_init(IP *ip, bool ipv6enabled)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(ip, 0, sizeof(IP));
|
*ip = empty_ip;
|
||||||
ip->family = ipv6enabled ? net_family_ipv6 : net_family_ipv4;
|
ip->family = ipv6enabled ? net_family_ipv6 : net_family_ipv4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,8 @@ typedef struct IP_Port {
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
} IP_Port;
|
} IP_Port;
|
||||||
|
|
||||||
|
extern const IP_Port empty_ip_port;
|
||||||
|
|
||||||
typedef struct Socket {
|
typedef struct Socket {
|
||||||
int sock;
|
int sock;
|
||||||
} Socket;
|
} Socket;
|
||||||
|
|
|
@ -90,6 +90,8 @@ typedef struct Onion_Friend {
|
||||||
uint32_t dht_pk_callback_number;
|
uint32_t dht_pk_callback_number;
|
||||||
} Onion_Friend;
|
} Onion_Friend;
|
||||||
|
|
||||||
|
static const Onion_Friend empty_onion_friend = {false};
|
||||||
|
|
||||||
typedef struct Onion_Data_Handler {
|
typedef struct Onion_Data_Handler {
|
||||||
oniondata_handler_cb *function;
|
oniondata_handler_cb *function;
|
||||||
void *object;
|
void *object;
|
||||||
|
@ -287,9 +289,7 @@ static uint16_t random_nodes_path_onion(const Onion_Client *onion_c, Node_format
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_nodes >= 2) {
|
if (num_nodes >= 2) {
|
||||||
nodes[0] = (Node_format) {
|
nodes[0] = empty_node_format;
|
||||||
0
|
|
||||||
};
|
|
||||||
nodes[0].ip_port.ip.family = net_family_tcp_family;
|
nodes[0].ip_port.ip.family = net_family_tcp_family;
|
||||||
nodes[0].ip_port.ip.ip.v4.uint32 = random_tcp;
|
nodes[0].ip_port.ip.ip.v4.uint32 = random_tcp;
|
||||||
|
|
||||||
|
@ -304,9 +304,7 @@ static uint16_t random_nodes_path_onion(const Onion_Client *onion_c, Node_format
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nodes[0] = (Node_format) {
|
nodes[0] = empty_node_format;
|
||||||
0
|
|
||||||
};
|
|
||||||
nodes[0].ip_port.ip.family = net_family_tcp_family;
|
nodes[0].ip_port.ip.family = net_family_tcp_family;
|
||||||
nodes[0].ip_port.ip.ip.v4.uint32 = random_tcp;
|
nodes[0].ip_port.ip.ip.v4.uint32 = random_tcp;
|
||||||
|
|
||||||
|
@ -1341,7 +1339,7 @@ int onion_addfriend(Onion_Client *onion_c, const uint8_t *public_key)
|
||||||
}
|
}
|
||||||
|
|
||||||
index = onion_c->num_friends;
|
index = onion_c->num_friends;
|
||||||
memset(&onion_c->friends_list[onion_c->num_friends], 0, sizeof(Onion_Friend));
|
onion_c->friends_list[onion_c->num_friends] = empty_onion_friend;
|
||||||
++onion_c->num_friends;
|
++onion_c->num_friends;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user