diff options
author | irungentoo <irungentoo@gmail.com> | 2013-08-17 11:16:08 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-08-17 11:16:08 -0400 |
commit | 7d092c3467fbbcf3639ed2c698659c56b2509c31 (patch) | |
tree | c50b9a92b2b434ecd1e0907eb3e3a4a410fa5e34 /core/Messenger.c | |
parent | 35376d85aaf04a80ecca6b313c323ee82e08f3df (diff) |
Added dynamic memory allocation to crypto connections.
Also fixed some possible bugs in Messenger.c
Diffstat (limited to 'core/Messenger.c')
-rw-r--r-- | core/Messenger.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index 04e4626a..2c9e134b 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -42,7 +42,6 @@ int realloc_friendlist(Messenger *m, uint32_t num) | |||
42 | if (newfriendlist == NULL) | 42 | if (newfriendlist == NULL) |
43 | return -1; | 43 | return -1; |
44 | 44 | ||
45 | memset(&newfriendlist[num - 1], 0, sizeof(Friend)); | ||
46 | m->friendlist = newfriendlist; | 45 | m->friendlist = newfriendlist; |
47 | return 0; | 46 | return 0; |
48 | } | 47 | } |
@@ -165,6 +164,8 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length) | |||
165 | if (realloc_friendlist(m, m->numfriends + 1) != 0) | 164 | if (realloc_friendlist(m, m->numfriends + 1) != 0) |
166 | return FAERR_NOMEM; | 165 | return FAERR_NOMEM; |
167 | 166 | ||
167 | memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend)); | ||
168 | |||
168 | uint32_t i; | 169 | uint32_t i; |
169 | 170 | ||
170 | for (i = 0; i <= m->numfriends; ++i) { | 171 | for (i = 0; i <= m->numfriends; ++i) { |
@@ -184,7 +185,9 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length) | |||
184 | m->friendlist[i].receives_read_receipts = 1; /* default: YES */ | 185 | m->friendlist[i].receives_read_receipts = 1; /* default: YES */ |
185 | memcpy(&(m->friendlist[i].friendrequest_nospam), address + crypto_box_PUBLICKEYBYTES, sizeof(uint32_t)); | 186 | memcpy(&(m->friendlist[i].friendrequest_nospam), address + crypto_box_PUBLICKEYBYTES, sizeof(uint32_t)); |
186 | 187 | ||
187 | ++ m->numfriends; | 188 | if (m->numfriends == i) |
189 | ++ m->numfriends; | ||
190 | |||
188 | return i; | 191 | return i; |
189 | } | 192 | } |
190 | } | 193 | } |
@@ -201,6 +204,8 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id) | |||
201 | if (realloc_friendlist(m, m->numfriends + 1) != 0) | 204 | if (realloc_friendlist(m, m->numfriends + 1) != 0) |
202 | return FAERR_NOMEM; | 205 | return FAERR_NOMEM; |
203 | 206 | ||
207 | memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend)); | ||
208 | |||
204 | uint32_t i; | 209 | uint32_t i; |
205 | 210 | ||
206 | for (i = 0; i <= m->numfriends; ++i) { | 211 | for (i = 0; i <= m->numfriends; ++i) { |
@@ -215,7 +220,10 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id) | |||
215 | m->friendlist[i].userstatus = USERSTATUS_NONE; | 220 | m->friendlist[i].userstatus = USERSTATUS_NONE; |
216 | m->friendlist[i].message_id = 0; | 221 | m->friendlist[i].message_id = 0; |
217 | m->friendlist[i].receives_read_receipts = 1; /* default: YES */ | 222 | m->friendlist[i].receives_read_receipts = 1; /* default: YES */ |
218 | ++ m->numfriends; | 223 | |
224 | if (m->numfriends == i) | ||
225 | ++ m->numfriends; | ||
226 | |||
219 | return i; | 227 | return i; |
220 | } | 228 | } |
221 | } | 229 | } |
@@ -244,7 +252,7 @@ int m_delfriend(Messenger *m, int friendnumber) | |||
244 | 252 | ||
245 | m->numfriends = i; | 253 | m->numfriends = i; |
246 | 254 | ||
247 | if (realloc_friendlist(m, m->numfriends + 1) != 0) | 255 | if (realloc_friendlist(m, m->numfriends) != 0) |
248 | return FAERR_NOMEM; | 256 | return FAERR_NOMEM; |
249 | 257 | ||
250 | return 0; | 258 | return 0; |
@@ -851,14 +859,14 @@ void doMessenger(Messenger *m) | |||
851 | uint32_t Messenger_size(Messenger *m) | 859 | uint32_t Messenger_size(Messenger *m) |
852 | { | 860 | { |
853 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES | 861 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES |
854 | + sizeof(uint32_t) // nospam | 862 | + sizeof(uint32_t) // nospam |
855 | + sizeof(uint32_t) // DHT size | 863 | + sizeof(uint32_t) // DHT size |
856 | + DHT_size() // DHT itself | 864 | + DHT_size() // DHT itself |
857 | + sizeof(uint32_t) // Friendlist size | 865 | + sizeof(uint32_t) // Friendlist size |
858 | + sizeof(Friend) * m->numfriends // Friendlist itself | 866 | + sizeof(Friend) * m->numfriends // Friendlist itself |
859 | + sizeof(uint16_t) // Own nickname length | 867 | + sizeof(uint16_t) // Own nickname length |
860 | + m->name_length // Own nickname | 868 | + m->name_length // Own nickname |
861 | ; | 869 | ; |
862 | } | 870 | } |
863 | 871 | ||
864 | /* save the messenger in data of size Messenger_size() */ | 872 | /* save the messenger in data of size Messenger_size() */ |