Date: Wed, 26 Jan 2000 17:40:02 -0800 (PST) From: "Rodney W. Grimes" <rgrimes@gndrsh.dnsmgr.net> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/10342: putenv(3) unnecessarily calls strdup/free Message-ID: <200001270140.RAA82747@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/10342; it has been noted by GNATS. From: "Rodney W. Grimes" <rgrimes@gndrsh.dnsmgr.net> To: peter.jeremy@alcatel.com.au (Peter Jeremy) Cc: FreeBSD-gnats-submit@FreeBSD.ORG Subject: Re: bin/10342: putenv(3) unnecessarily calls strdup/free Date: Wed, 26 Jan 2000 17:34:05 -0800 (PST) > On 2000-Jan-27 09:19:24 +1100, "Rodney W. Grimes" <rgrimes@gndrsh.dnsmgr.net> wrote: > >a) This is tried and true tested code that has not been modified > > since 4.4BSD Lite. > Accepted. (Though I don't believe that this _automatically_ makes the > code perfect). I'll counter with the fact that the code as written is extreamly safe and independent of specific, and possibly non-standard, implementations of setenv. > >b) The man page says ``the given arguments name and value may be appended > > and prepended, respectively, with an equal sign ``=''.'' It does not > > say that you can have additional stuff after the =, your patch leaves > > stuff after the =. > > A slight difference in interpretation: I read the manual page as > meaning that the name argument to setenv() could be _terminated_ with > either NUL ('\0') or '=' - ie what came after the '=' is irrelevant. > > The current implementation of setenv() (and __findenv()) does treat a > trailing '=' as a terminator. (And I'm not sure how/why someone would > write code that accepted and ignored '=', but did not treat it as a > terminator). Looking at implementation is probably not a good idea, as that may change. Also depending on behavior not in Posix may cause problems down the road. What does Posix say about the semantics of any of this, I see the man page has no posix reference and only getenv is references to ISO C. I also have great concerns that this type of auto termination assumption is leading to things like: # env ... XXX=adsfasdf= ... Now you tell me.... how did I do that, and is the env name XXX or XXX=asdfasdf and just how is getenv/setenv/putenv going to deal with this, let alone a program. [Okay, I'll give you a hint, it was set with csh(1) and here is what sh(1) does with a few echo's # echo ${XXX} adsfasdf= # echo ${XXX=adsfasdf} adsfasdf= # Can you see why this whole idea of trying to do the = simplification has lead to a rotting crock of shit?? > >The PR eludes to a memory leak, can you be more specific on exactly how > >this memory leak occurs as I do not see a memory leak in putenv as the > >code is now. > > An associated PR (bin/10341) discusses a memory leak in setenv() > (which was previously mentioned in bin/5604). I have no evidence for > a memory leak within putenv() itself (though my demonstration code for > bin/10341 uses putenv()). My bin/10342 was solely an efficiency > improvement (removing calls to strdup/free). I think Archie just commited the man page changes to document the leak. Efficiency that can lead to bugs due to reading the implementation of another part of the code is a bug waiting to happen. > > If you are not comfortable with this change, I'll accept your right to > refuse to apply it. I was just going through my outstanding PR's and > prodding people over the ones I saw as trivial. Infact now that you have made me really go look at this, I would like to ask that you close this PR as ``a bad idea''. Micro optimization that can lead to one blowing your toe off is not a good thing. -- Rod Grimes - KD7CAX @ CN85sl - (RWG25) rgrimes@gndrsh.dnsmgr.net To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001270140.RAA82747>