$OpenBSD: patch-src_main_Renviron_c,v 1.1 2005/10/08 09:47:37 mbalmer Exp $ --- src/main/Renviron.c.orig Mon Apr 18 13:34:05 2005 +++ src/main/Renviron.c Wed Aug 10 16:13:14 2005 @@ -67,10 +67,12 @@ static void Putenv(char *a, char *b) { char *buf, *value, *p, *q, quote='\0'; int inquote = 0; + size_t slen; - buf = (char *) malloc((strlen(a) + strlen(b) + 2) * sizeof(char)); + slen = strlen(a) + strlen(b) + 2; + buf = (char *) malloc(slen); if(!buf) R_Suicide("allocation failure in reading Renviron"); - strcpy(buf, a); strcat(buf, "="); + strlcpy(buf, a, slen); strlcat(buf, "=", slen); value = buf+strlen(buf); /* now process the value */ @@ -108,7 +110,7 @@ static int process_Renviron(char *filena int errs = 0; if (!filename || !(fp = fopen(filename, "r"))) return 0; - snprintf(msg, MSG_SIZE+50, + snprintf(msg, sizeof(msg), "\n File %s contains invalid line(s)", filename); while(fgets(sm, BUF_SIZE, fp)) { @@ -118,7 +120,8 @@ static int process_Renviron(char *filena if(!(p = Rf_strchr(s, '='))) { errs++; if(strlen(msg) < MSG_SIZE) { - strcat(msg, "\n "); strcat(msg, s); + strlcat(msg, "\n ", sizeof(msg)); + strlcat(msg, s, sizeof(msg)); } continue; } @@ -130,7 +133,7 @@ static int process_Renviron(char *filena } fclose(fp); if (errs) { - strcat(msg, "\n They were ignored\n"); + strlcat(msg, "\n They were ignored\n", sizeof(msg)); R_ShowMessage(msg); } return 1; @@ -146,8 +149,8 @@ void process_system_Renviron() R_ShowMessage("path to system Renviron is too long: skipping"); return; } - strcpy(buf, R_Home); - strcat(buf, "/etc/Renviron"); + strlcpy(buf, R_Home, sizeof(buf)); + strlcat(buf, "/etc/Renviron", sizeof(buf)); if(!process_Renviron(buf)) R_ShowMessage("cannot find system Renviron"); } @@ -165,7 +168,7 @@ void process_site_Renviron () R_ShowMessage("path to Renviron.site is too long: skipping"); return; } - snprintf(buf, PATH_MAX, "%s/etc/Renviron.site", R_Home); + snprintf(buf, sizeof(buf), "%s/etc/Renviron.site", R_Home); process_Renviron(buf); }