From khana@gaffer.adm.intelsat.int  Mon May 15 07:20:38 2000
Return-Path: <khana@gaffer.adm.intelsat.int>
Received: from iserv.intelsat.int (iserv.intelsat.int [164.86.102.11])
	by hub.freebsd.org (Postfix) with ESMTP id 9E5A537B61B
	for <FreeBSD-gnats-submit@FreeBSD.ORG>; Mon, 15 May 2000 07:20:35 -0700 (PDT)
	(envelope-from khana@gaffer.adm.intelsat.int)
Received: from pc2.adm.intelsat.int ([164.86.36.13]) by iserv.intelsat.int
          (Post.Office MTA v3.1.2 release (PO203-101c)
          ID# 0-49113U1000L2S100) with ESMTP id AAA16526;
          Mon, 15 May 2000 10:20:25 -0400
Received: (from smap@localhost) by pc2.adm.intelsat.int (8.8.6 (PHNE_14041)/8.6.10) id KAA20964; Mon, 15 May 2000 10:20:32 -0400 (EDT)
Received: from gaffer.adm.intelsat.int(164.86.39.103) by pc2 via smap (V2.1)
	id xma020871; Mon, 15 May 00 14:19:52 GMT
Received: (from khana@localhost) by gaffer.adm.intelsat.int (8.8.6 (PHNE_17135)/8.7.1) id PAA19754; Mon, 15 May 2000 15:19:52 +0100 (BST)
Message-Id: <200005151419.PAA19754@gaffer.adm.intelsat.int>
Date: Mon, 15 May 2000 15:19:52 +0100 (BST)
From: Abdul Khan <khana@kcm.adm.intelsat.int>
Sender: khana@gaffer.adm.intelsat.int
To: jeremyp@gsmx07.alcatel.com.au, khana@kcm.adm.intelsat.int
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: Memory leak in putenv

>Number:         18567
>Category:       kern
>Synopsis:       Re: Memory leak in putenv
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    gnats-admin
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon May 15 07:30:01 PDT 2000
>Closed-Date:    Sun May 28 07:46:00 PDT 2000
>Last-Modified:  Wed Oct 26 06:24:52 GMT 2005
>Originator:     
>Release:        
>Organization:
>Environment:
>Description:
 actually i had to move that class to C.. all it really is is the setENV function:
 
 
 static bool setEnvironmentVariableOneTime = false;
 
 void
 setEnvironmentVariable(char* name, char* value)
 {
   int i = 0, j = 0;
   while (environ[i])
   {
     while (name[j] && environ[i][j] && name[j] == environ[i][j]) j++;
 
     if (environ[i][j] == '=' && !name[j])
     {
       if (setEnvironmentVariableOneTime)
       {
         environ[i] = (char*) realloc (environ[i], sizeof(char)*
                                      (strlen (value) + strlen (name) + 1 + 1));
         sprintf(environ[i], "%s=%s", name, value);
       }
       else  //the first time we have to create our own environ mem
       {
         int k = i;
         while (environ[k]) k++;
         char** new_environ = (char**) malloc(sizeof(char*)*(k+1));
         for(int n=0;n<k;n++)
         {
           new_environ[n] = (char*)
           malloc(sizeof(char)*(strlen(environ[n])+1));
           strcpy(new_environ[n], environ[n]);
         }
         new_environ[n]=NULL;
         new_environ[i] = (char*) realloc (new_environ[i], sizeof(char)*
                                      (strlen (value) + strlen (name) + 1 + 1));
         sprintf(new_environ[i], "%s=%s", name, value);
         clearenv();
         environ=new_environ;
       }
       break;
     }
     i++;
   }
   if (!environ[i])
   {
     char* new_env = (char*) malloc(sizeof(char)*
                         (strlen (value) + strlen (name) + 1 + 1));
     sprintf(new_env, "%s=%s", name, value);
     putenv(new_env);
   }
   else
   {
     setEnvironmentVariableOneTime = true;
   }
 }
 
 
 
 
 // the code basically copies the environment onto the heap if needed and
 // manipulates it there from then on out.
 
 abdul
 
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: steve 
State-Changed-When: Sun May 28 07:46:00 PDT 2000 
State-Changed-Why:  
Followup to bin/18515. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=18567 
>Unformatted:
