diff --git a/src/calc.c b/src/calc.c
index 9601d106f3b2c4e6ca653170dd48ece9dcf49161..8ae299e21ca63992209e8f6dd8d9b5703629d7c0 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -342,10 +342,16 @@ void calc_process() {
   }
   root = t;
   curdev = fs.st_dev;
-  free(path);
 
   /* start calculating */
   if(!calc_dir(root, name) && !failed) {
+    free(path);
+    if(root->sub == NULL) {
+      freedir(root);
+      failed = 1;
+      strcpy(errmsg, "Directory empty.");
+      goto calc_fail;
+    }
     browse_init(root->sub);
 
     /* update references and free original item */
@@ -373,6 +379,7 @@ void calc_process() {
   }
 
   /* something went wrong... */
+  free(path);
   freedir(root);
 calc_fail:
   while(failed && !input_handle(0))