From 68d5cb5dacbc80347119ac9cff365e5f04105ef1 Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Thu, 24 Mar 2011 02:50:03 +0100
Subject: hush: fix a case where return in sourced file has no effect

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
 shell/hush.c                            | 4 ++++
 shell/hush_test/hush-misc/return1.right | 1 +
 shell/hush_test/hush-misc/return1.tests | 4 ++++
 3 files changed, 9 insertions(+)
 create mode 100644 shell/hush_test/hush-misc/return1.right
 create mode 100755 shell/hush_test/hush-misc/return1.tests

(limited to 'shell')

diff --git a/shell/hush.c b/shell/hush.c
index 339f3349a..8154ac47b 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -5554,6 +5554,10 @@ static void parse_and_run_stream(struct in_str *inp, int end_trigger)
 		debug_printf_exec("parse_and_run_stream: run_and_free_list\n");
 		run_and_free_list(pipe_list);
 		empty = 0;
+#if ENABLE_HUSH_FUNCTIONS
+		if (G.flag_return_in_progress == 1)
+			break;
+#endif
 	}
 }
 
diff --git a/shell/hush_test/hush-misc/return1.right b/shell/hush_test/hush-misc/return1.right
new file mode 100644
index 000000000..7b24a35ff
--- /dev/null
+++ b/shell/hush_test/hush-misc/return1.right
@@ -0,0 +1 @@
+Ok:0
diff --git a/shell/hush_test/hush-misc/return1.tests b/shell/hush_test/hush-misc/return1.tests
new file mode 100755
index 000000000..eeb92ef3f
--- /dev/null
+++ b/shell/hush_test/hush-misc/return1.tests
@@ -0,0 +1,4 @@
+echo "true && return; echo Should not be printed" >return_sourced
+. ./return_sourced
+rm return_sourced
+echo Ok:$?
-- 
cgit v1.2.3