From owner-freebsd-hackers@FreeBSD.ORG Thu Aug 12 23:16:42 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C7B9B16A4CE for ; Thu, 12 Aug 2004 23:16:42 +0000 (GMT) Received: from kane.otenet.gr (kane.otenet.gr [195.170.0.27]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1B0BF43D1F for ; Thu, 12 Aug 2004 23:16:42 +0000 (GMT) (envelope-from keramida@ceid.upatras.gr) Received: from gothmog.gr (patr530-b147.otenet.gr [212.205.244.155]) i7CNGJhv012718; Fri, 13 Aug 2004 02:16:30 +0300 Received: from gothmog.gr (gothmog [127.0.0.1]) by gothmog.gr (8.13.1/8.13.1) with ESMTP id i7CNFNUw007321; Fri, 13 Aug 2004 02:15:23 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Received: (from giorgos@localhost) by gothmog.gr (8.13.1/8.13.1/Submit) id i7CNFJ4O007320; Fri, 13 Aug 2004 02:15:19 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Date: Fri, 13 Aug 2004 02:15:19 +0300 From: Giorgos Keramidas To: "Thordur Ivar B." Message-ID: <20040812231519.GB7173@gothmog.gr> References: <20040811193254.6f0be2c2.thib@mi.is> <20040811200323.GA37059@xor.obsecurity.org> <20040811203832.728c915b.thib@mi.is> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040811203832.728c915b.thib@mi.is> X-Mailman-Approved-At: Fri, 13 Aug 2004 11:54:49 +0000 cc: freebsd-hackers@FreeBSD.org Subject: Re: Where is strnlen() ? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Aug 2004 23:16:42 -0000 On 2004-08-11 20:38, "Thordur Ivar B." wrote: > On Wed, 11 Aug 2004 13:03:23 -0700 Kris Kennaway wrote: > > On Wed, Aug 11, 2004 at 07:32:54PM +0000, Thordur Ivar B. wrote: > > > While porting software from a friend wich was developed under Linux, I > > > stumbled upon an error: src/socket.c:236: warning: implicit declaration of > > > function`strnlen' > > > > > > Now my programming experience is nothing to brag about but I wonder why > > > strnlen is not a part of FreeBSD's libc. [...] > > > > That's not a standard function outside the Linux world, and it's not > > very necessary for security..no matter how you calculate the string > > size, you still have to have your brain engaged when you copy it into > > the destination buffer. > > A notable point. Still I would think that strnlen is a pretty neat > functions to avoid dumb mistakes (actually malformed code.) But since > it is non-standard, I guess I will have to "turn my brain on" ;> Malformed code that depends on a particular string buffer limit should probably use that buffer limit when copying the string too. I mean, if you already know what the maximum allowed length of the string is why would you want a library call to tell you about it? ;-) As someone else posted already, this would probably be useful in code that includes structures with predefined size limits, i.e.: struct buf { size_t b_len; char b_data[BUFLEN];; }; But in this case you already know the maximum length of the b_data field and there's no need for strnlen() to tell you about it. The pessimization that results from always copying BUFLEN bytes from b_data members instead of the "useful" part of the string buffer is the price that the careless programmer has to pay for forgetting to check for proper string termination, I guess. Instead of introducing new non-standard functions let's fix the broken programs :)