X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fmeshlink.c;h=61b8b5616a77a35447ef95dd5e417abb6bf5e681;hp=d4a833ab873122237bf7db246f8cc85fc9462e7f;hb=dc0e52cb3e42620c3139e713b373d130aa30b698;hpb=43ffcfc3c3fcd8088a77e9a2ac9cc4013c466158 diff --git a/src/meshlink.c b/src/meshlink.c index d4a833ab..61b8b561 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -641,9 +641,10 @@ static bool finalize_join(meshlink_handle_t *mesh) { static bool invitation_send(void *handle, uint8_t type, const void *data, size_t len) { (void)type; meshlink_handle_t *mesh = handle; + const char *ptr = data; while(len) { - int result = send(mesh->sock, data, len, 0); + int result = send(mesh->sock, ptr, len, 0); if(result == -1 && errno == EINTR) { continue; @@ -651,7 +652,7 @@ static bool invitation_send(void *handle, uint8_t type, const void *data, size_t return false; } - data += result; + ptr += result; len -= result; } @@ -790,7 +791,12 @@ static bool ecdsa_keygen(meshlink_handle_t *mesh) { logger(mesh, MESHLINK_DEBUG, "Done.\n"); } - snprintf(privname, sizeof(privname), "%s" SLASH "ecdsa_key.priv", mesh->confbase); + if (snprintf(privname, sizeof(privname), "%s" SLASH "ecdsa_key.priv", mesh->confbase) >= PATH_MAX) { + logger(mesh, MESHLINK_DEBUG, "Filename too long: %s" SLASH "ecdsa_key.priv\n", mesh->confbase); + meshlink_errno = MESHLINK_ESTORAGE; + return false; + } + f = fopen(privname, "wb"); if(!f) { @@ -1580,7 +1586,10 @@ static bool refresh_invitation_key(meshlink_handle_t *mesh) { char invname[PATH_MAX]; struct stat st; - snprintf(invname, sizeof(invname), "%s" SLASH "%s", filename, ent->d_name); + if (snprintf(invname, sizeof(invname), "%s" SLASH "%s", filename, ent->d_name) >= PATH_MAX) { + logger(mesh, MESHLINK_DEBUG, "Filename too long: %s" SLASH "%s", filename, ent->d_name); + continue; + } if(!stat(invname, &st)) { if(mesh->invitation_key && deadline < st.st_mtime) {