]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Make sure meshlink_strerror() always returns a valid pointer to a string.
[meshlink] / src / meshlink.c
index 3651988fa5c9c66c337c2df5482a1a1df7350ae4..f4e213c5d7fa3887dc3799dbda0c13e439c98344 100644 (file)
@@ -629,8 +629,10 @@ static const char *errstr[] = {
        [MESHLINK_ENOENT] = "No such node",
 };
 
-const char *meshlink_strerror(meshlink_errno_t errno) {
-       return errstr[errno];
+const char *meshlink_strerror(meshlink_errno_t err) {
+       if(err < 0 || err >= sizeof errstr / sizeof *errstr)
+               return "Invalid error code";
+       return errstr[err];
 }
 
 static bool ecdsa_keygen(meshlink_handle_t *mesh) {
@@ -841,7 +843,7 @@ void meshlink_stop(meshlink_handle_t *mesh) {
 }
 
 void meshlink_close(meshlink_handle_t *mesh) {
-       if(!mesh)
+       if(!mesh || !mesh->confbase)
                return;
 
        // Close and free all resources used.
@@ -863,9 +865,9 @@ void meshlink_close(meshlink_handle_t *mesh) {
        free(mesh->name);
        free(mesh->confbase);
 
-       free(mesh);
-
        memset(mesh, 0, sizeof *mesh);
+
+       free(mesh);
 }
 
 void meshlink_set_receive_cb(meshlink_handle_t *mesh, meshlink_receive_cb_t cb) {