diff --git a/NEWS b/NEWS
index df6f7fa3c69c1ec11bbc9875f3fe5efc2287ac6b..c1893f818284799b7ba20fc5b7e9841c378a031d 100644
--- a/NEWS
+++ b/NEWS
@@ -307,6 +307,7 @@ documents those changes that are of interest to users and administrators.
  -- ALPS - If an allocation requests -n set the BASIL -N option to the
     amount of tasks / number of node.
  -- ALPS - Don't set the env var APRUN_DEFAULT_MEMORY, it is not needed anymore.
+ -- Fix potential buffer overflow.
 
 * Changes in Slurm 14.03.9
 ==========================
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index a08bfa36df22fd9d245a6d5e8c31fca068787d50..91594d7d055d6e7b76b6c0b3e9dcfa267e6678c4 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -6012,21 +6012,20 @@ static int _write_data_to_file(char *file_name, char *data)
  */
 char **get_job_env(struct job_record *job_ptr, uint32_t * env_size)
 {
-	char job_dir[30], *file_name, **environment = NULL;
+	char *file_name, **environment = NULL;
 	int hash = job_ptr->job_id % 10;
 	int cc;
 
 	file_name = slurm_get_state_save_location();
-	sprintf(job_dir, "/hash.%d/job.%u/environment", hash, job_ptr->job_id);
-	xstrcat(file_name, job_dir);
+	xstrfmtcat(file_name, "/hash.%d/job.%u/environment",
+		   hash, job_ptr->job_id);
 
 	if (_read_data_array_from_file(file_name, &environment, env_size,
 				       job_ptr)) {
 		/* Read state from version 14.03 or earlier */
 		xfree(file_name);
 		file_name = slurm_get_state_save_location();
-		sprintf(job_dir, "/job.%u/environment", job_ptr->job_id);
-		xstrcat(file_name, job_dir);
+		xstrfmtcat(file_name, "/job.%u/environment", job_ptr->job_id);
 		cc = _read_data_array_from_file(file_name,
 						&environment,
 						env_size,