Merge authors:
  James Hunt (jamesodhunt)
Related merge proposals:
  https://code.launchpad.net/~jamesodhunt/upstart/bug-1222705/+merge/204222
  proposed by: James Hunt (jamesodhunt)
------------------------------------------------------------
revno: 1602 [merge]
committer: Dimitri John Ledkov <[email protected]>
branch nick: trunk
timestamp: Wed 2014-03-05 14:23:37 +0000
message:
  merge lp:~jamesodhunt/upstart/bug-1222705
modified:
  ChangeLog
  init/job_class.c
  init/tests/test_job_class.c


--
lp:upstart
https://code.launchpad.net/~upstart-devel/upstart/trunk

Your team Upstart Reviewers is subscribed to branch lp:upstart.
To unsubscribe from this branch go to 
https://code.launchpad.net/~upstart-devel/upstart/trunk/+edit-subscription
=== modified file 'ChangeLog'
--- ChangeLog	2014-03-05 13:30:11 +0000
+++ ChangeLog	2014-03-05 14:23:37 +0000
@@ -26,6 +26,10 @@
 	  - Don't rely on D-Bus any more: spawn a Session Init instead since
 	    this is simpler and allows the two major limitations to be dropped.
 	* scripts/man/init-checkconf.8: Updated date and limitations section.
+	* init/job_class.c: job_class_stop(): Copy env rather than
+	  referencing a local variable (LP: #1222705).
+	* init/tests/test_job_class.c: test_start(), test_stop(),
+	  test_restart(): Check job->env, job->start_env and job->stop-env.
 
 2014-02-04   Cameron Norman  <[email protected]>
 

=== modified file 'init/job_class.c'
--- init/job_class.c	2014-01-17 12:03:24 +0000
+++ init/job_class.c	2014-01-31 12:42:18 +0000
@@ -1241,8 +1241,9 @@
 	if (job->stop_env)
 		nih_unref (job->stop_env, job);
 
-	job->stop_env = (char **)env;
-	nih_ref (job->stop_env, job);
+	job->stop_env = nih_str_array_copy (job, NULL, env);
+	if (! job->stop_env)
+		nih_return_system_error (-1);
 
 	job_finished (job, FALSE);
 	if (blocked)

=== modified file 'init/tests/test_job_class.c'
--- init/tests/test_job_class.c	2013-07-21 23:54:16 +0000
+++ init/tests/test_job_class.c	2014-01-31 12:42:18 +0000
@@ -1569,6 +1569,16 @@
 	TEST_EQ (job->goal, JOB_START);
 	TEST_EQ (job->state, JOB_STARTING);
 
+	TEST_EQ_P (job->start_env, NULL);
+	TEST_EQ_P (job->stop_env, NULL);
+
+	TEST_NE_P (job->env, NULL);
+	TEST_EQ_STRN (job->env[0], "PATH=");
+	TEST_EQ_STRN (job->env[1], "TERM=");
+	TEST_EQ_P (job->env[2], NULL);
+
+	TEST_NE_P (job->env, env);
+
 	TEST_LIST_NOT_EMPTY (&job->blocking);
 
 	blocked = (Blocked *)job->blocking.next;
@@ -1664,6 +1674,15 @@
 
 	TEST_LIST_EMPTY (&job->blocking);
 
+	TEST_EQ_P (job->start_env, NULL);
+	TEST_EQ_P (job->stop_env, NULL);
+
+	TEST_NE_P (job->env, NULL);
+	TEST_EQ_STRN (job->env[0], "PATH=");
+	TEST_EQ_STRN (job->env[1], "TERM=");
+	TEST_EQ_P (job->env[2], NULL);
+
+	TEST_NE_P (job->env, env);
 
 	dbus_connection_flush (conn);
 
@@ -1746,6 +1765,16 @@
 	TEST_EQ (job->goal, JOB_START);
 	TEST_EQ (job->state, JOB_STOPPING);
 
+	TEST_EQ_P (job->env, NULL);
+	TEST_EQ_P (job->stop_env, NULL);
+
+	TEST_NE_P (job->start_env, NULL);
+	TEST_EQ_STRN (job->start_env[0], "PATH=");
+	TEST_EQ_STRN (job->start_env[1], "TERM=");
+	TEST_EQ_P (job->start_env[2], NULL);
+
+	TEST_NE_P (job->start_env, env);
+
 	TEST_LIST_NOT_EMPTY (&job->blocking);
 
 	blocked = (Blocked *)job->blocking.next;
@@ -1906,12 +1935,18 @@
 	TEST_EQ (job->goal, JOB_START);
 	TEST_EQ (job->state, JOB_STARTING);
 
+	TEST_NE_P (job->start_env, env);
+	TEST_NE_P (job->stop_env, env);
+
+	TEST_NE_P (job->env, NULL);
 	TEST_EQ_STRN (job->env[0], "PATH=");
 	TEST_EQ_STRN (job->env[1], "TERM=");
 	TEST_EQ_STR (job->env[2], "FOO=wibble");
 	TEST_EQ_STR (job->env[3], "BAR=wobble");
 	TEST_EQ_P (job->env[4], NULL);
 
+	TEST_NE_P (job->env, env);
+
 	TEST_LIST_NOT_EMPTY (&job->blocking);
 
 	blocked = (Blocked *)job->blocking.next;
@@ -2087,6 +2122,14 @@
 
 	TEST_NOT_FREE (job);
 
+	TEST_EQ_P (job->env, NULL);
+	TEST_EQ_P (job->start_env, NULL);
+
+	TEST_NE_P (job->stop_env, NULL);
+	TEST_EQ_P (job->stop_env[0], NULL);
+
+	TEST_NE_P (job->stop_env, env);
+
 	TEST_EQ (job->goal, JOB_STOP);
 	TEST_EQ (job->state, JOB_STOPPING);
 
@@ -2177,6 +2220,13 @@
 
 	TEST_LIST_EMPTY (&job->blocking);
 
+	TEST_EQ_P (job->env, NULL);
+	TEST_EQ_P (job->start_env, NULL);
+
+	TEST_NE_P (job->stop_env, NULL);
+	TEST_EQ_P (job->stop_env[0], NULL);
+
+	TEST_NE_P (job->stop_env, env);
 
 	dbus_connection_flush (conn);
 
@@ -2354,10 +2404,16 @@
 	TEST_EQ (job->goal, JOB_STOP);
 	TEST_EQ (job->state, JOB_STOPPING);
 
+	TEST_EQ_P (job->env, NULL);
+	TEST_EQ_P (job->start_env, NULL);
+
+	TEST_NE_P (job->stop_env, NULL);
 	TEST_EQ_STR (job->stop_env[0], "FOO=wibble");
 	TEST_EQ_STR (job->stop_env[1], "BAR=wobble");
 	TEST_EQ_P (job->stop_env[2], NULL);
 
+	TEST_NE_P (job->stop_env, env);
+
 	TEST_LIST_NOT_EMPTY (&job->blocking);
 
 	blocked = (Blocked *)job->blocking.next;
@@ -2527,6 +2583,16 @@
 	TEST_EQ (job->goal, JOB_START);
 	TEST_EQ (job->state, JOB_STOPPING);
 
+	TEST_EQ_P (job->env, NULL);
+	TEST_EQ_P (job->stop_env, NULL);
+
+	TEST_NE_P (job->start_env, NULL);
+	TEST_EQ_STRN (job->start_env[0], "PATH=");
+	TEST_EQ_STRN (job->start_env[1], "TERM=");
+	TEST_EQ_P (job->start_env[2], NULL);
+
+	TEST_NE_P (job->start_env, env);
+
 	TEST_LIST_NOT_EMPTY (&job->blocking);
 
 	blocked = (Blocked *)job->blocking.next;
@@ -2626,6 +2692,16 @@
 	TEST_EQ (job->goal, JOB_START);
 	TEST_EQ (job->state, JOB_STOPPING);
 
+	TEST_EQ_P (job->env, NULL);
+	TEST_EQ_P (job->stop_env, NULL);
+
+	TEST_NE_P (job->start_env, NULL);
+	TEST_EQ_STRN (job->start_env[0], "PATH=");
+	TEST_EQ_STRN (job->start_env[1], "TERM=");
+	TEST_EQ_P (job->start_env[2], NULL);
+
+	TEST_NE_P (job->start_env, env);
+
 	TEST_LIST_EMPTY (&job->blocking);
 
 

-- 
upstart-devel mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/upstart-devel

Reply via email to