diff
minitox.c | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/minitox.c b/minitox.c
index 6fc05ca..569c9d8 100644
--- a/minitox.c
+++ b/minitox.c
@@ -202,6 +202,19 @@ bool str2uint(char *str, uint32_t *num) {
return true;
}
+bool hex2bin_fixed(const char *hex, uint8_t *bin, size_t bin_size) {
+ if (!hex || !bin) return false;
+ if (strlen(hex) != bin_size * 2) return false;
+
+ for (size_t i = 0; i < bin_size; ++i) {
+ unsigned int v;
+ if (sscanf(hex + (i * 2), "%2x", &v) != 1) return false;
+ bin[i] = (uint8_t)v;
+ }
+
+ return true;
+}
+
char* genmsg(struct ChatHist **pp, const char *fmt, ...) {
va_list va;
va_start(va, fmt);
@@ -913,10 +926,14 @@ void command_add(int narg, char **args) {
char *msg = "";
if (narg > 1) msg = args[1];
- uint8_t *bin_id = hex2bin(hex_id);
+ uint8_t bin_id[TOX_ADDRESS_SIZE];
+ if (!hex2bin_fixed(hex_id, bin_id, sizeof(bin_id))) {
+ ERROR("! invalid tox id, expected %zu hex chars", sizeof(bin_id) * 2);
+ return;
+ }
+
TOX_ERR_FRIEND_ADD err;
uint32_t friend_num = tox_friend_add(tox, bin_id, (uint8_t*)msg, strlen(msg), &err);
- free(bin_id);
if (err != TOX_ERR_FRIEND_ADD_OK) {
ERROR("! add friend failed, errcode:%d",err);