From 72a250c24d7b291fde68b0039eb75a031afedb0d Mon Sep 17 00:00:00 2001
From: "Kurt A. O'Hearn" <ohearnku@msu.edu>
Date: Fri, 18 Jan 2019 10:32:28 -0500
Subject: [PATCH] PuReMD-old: protect against buffer overflows for traj_title.
 NOTE: strcpy IS NOT SAFE, DO NOT USE EVER. USE strncpy INSTEAD.

---
 PuReMD/src/control.c    | 11 ++++-------
 PuReMD/src/reax_types.h |  2 +-
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/PuReMD/src/control.c b/PuReMD/src/control.c
index afc4bd49..d6fcfc80 100644
--- a/PuReMD/src/control.c
+++ b/PuReMD/src/control.c
@@ -41,7 +41,7 @@ char Read_Control_File( char *control_file, control_params* control,
     fp = sfopen( control_file, "r", "Read_Control_File::fp" );
 
     /* assign default values */
-    strcpy( control->sim_name, "default.sim" );
+    strncpy( control->sim_name, "default.sim", REAX_MAX_STR );
     control->ensemble = NVE;
     control->nsteps = 100;
     control->dt = 0.25;
@@ -105,7 +105,7 @@ char Read_Control_File( char *control_file, control_params* control,
     out_control->write_steps = 0;
     out_control->traj_compress = 0;
     out_control->traj_method = REG_TRAJ;
-    strcpy( out_control->traj_title, "default_title" );
+    strncpy( out_control->traj_title, "default_title", REAX_MAX_STR );
     out_control->atom_info = 0;
     out_control->bond_info = 1;
     out_control->angle_info = 1;
@@ -134,7 +134,7 @@ char Read_Control_File( char *control_file, control_params* control,
         {
             if ( strcmp(tmp[0], "simulation_name") == 0 )
             {
-                strcpy( control->sim_name, tmp[1] );
+                strncpy( control->sim_name, tmp[1], REAX_MAX_STR );
             }
             else if ( strcmp(tmp[0], "ensemble_type") == 0 )
             {
@@ -183,9 +183,6 @@ char Read_Control_File( char *control_file, control_params* control,
             //  ival = atoi(tmp[1]);
             //  control->restart = ival;
             //}
-            //else if( strcmp(tmp[0], "restart_from") == 0 ) {
-            //  strcpy( control->restart_from, tmp[1] );
-            //}
             else if ( strcmp(tmp[0], "random_vel") == 0 )
             {
                 ival = atoi(tmp[1]);
@@ -466,7 +463,7 @@ char Read_Control_File( char *control_file, control_params* control,
             }
             else if ( strcmp(tmp[0], "traj_title") == 0 )
             {
-                strcpy( out_control->traj_title, tmp[1] );
+                strncpy( out_control->traj_title, tmp[1], REAX_MAX_STR );
             }
             else if ( strcmp(tmp[0], "atom_info") == 0 )
             {
diff --git a/PuReMD/src/reax_types.h b/PuReMD/src/reax_types.h
index d93ec5c2..a59dfda1 100644
--- a/PuReMD/src/reax_types.h
+++ b/PuReMD/src/reax_types.h
@@ -1180,7 +1180,7 @@ typedef struct
     int   write_steps;
     int   traj_compress;
     int   traj_method;
-    char  traj_title[81];
+    char  traj_title[REAX_MAX_STR];
     int   atom_info;
     int   bond_info;
     int   angle_info;
-- 
GitLab