diff --git a/apps/app_readfile.c b/apps/app_readfile.c
index 4b3f57e9469b4d5d78b10bf86a1c8e9562370f57..708ad02f3f96833e45649914667657e5ada13978 100644
--- a/apps/app_readfile.c
+++ b/apps/app_readfile.c
@@ -92,15 +92,16 @@ static int readfile_exec(struct ast_channel *chan, void *data)
 		}
 	}
 
-	returnvar = ast_read_textfile(file);
-	if(len > 0){
-		if(len < strlen(returnvar))
-			returnvar[len]='\0';
-		else
-			ast_log(LOG_WARNING,"%s is longer than %d, and %d \n", file, len, (int)strlen(returnvar));
+	if ((returnvar = ast_read_textfile(file))) {
+		if (len > 0) {
+			if (len < strlen(returnvar))
+				returnvar[len]='\0';
+			else
+				ast_log(LOG_WARNING, "%s is longer than %d, and %d \n", file, len, (int)strlen(returnvar));
+		}
+		pbx_builtin_setvar_helper(chan, varname, returnvar);
+		free(returnvar);
 	}
-	pbx_builtin_setvar_helper(chan, varname, returnvar);
-	free(returnvar);
 	LOCAL_USER_REMOVE(u);
 	return res;
 }