[6232] in bugtraq

home help back first fref pref prev next nref lref last post

Re: strcpy versus strncpy

daemon@ATHENA.MIT.EDU (Nick Maclaren)
Wed Mar 4 19:02:02 1998

Date: 	Tue, 3 Mar 1998 21:26:39 +0000
Reply-To: Nick Maclaren <nmm1@CUS.CAM.AC.UK>
From: Nick Maclaren <nmm1@CUS.CAM.AC.UK>
To: BUGTRAQ@NETSPACE.ORG
In-Reply-To:  Your message of "Mon, 02 Mar 1998 21:55:42 PST." 
              <m0y9kg2-000Bn7C@scintilla.darkwater.com>

sinster@DARKWATER.COM writes:
> In your specific example of a file name, most (all?) operating systems
> already impose a limit to the length of a file name.  This limit is
> therefore a natural maximum buffer size for all programs under that
> operating system when dealing with file names: there is no justification
> for being capable of handling longer file names, since it'll have to be
> handed to the operating system eventually _anyway_, and limiting your file
> names to a shorter length is an unnecessary restriction.  Under Linux,
> for example just #include <limits.h> and use PATH_MAX or NAME_MAX (as
> appropriate).

I am sorry, but this this is complete and utter nonsense.  MVS is one of
the few systems that does impose such a limit and, even then, the limit
is not as obvious as might appear.  Unix has NO limit, and never has had.

PATH_MAX (and friends) under Unix is a lower bound on the length of a
name that the system is required to support under all circumstances.
Some facilities check for a limit and reject longer names, though the
limit is not always PATH_MAX, and others simply fall over.  But there
are facilities that work with any length of name that they are supplied
with.

When you need to write a general utility, you need to decide whether to
use PATH_MAX as a hard limit, choose another hard limit, or implement a
flexible approach.  There is also the problem that PATH_MAX may be very
large (e.g. 2^31-1), so you cannot afford to allocate PATH_MAX buffers.
I haven't seen this so far, but I know of no reason that it conflicts
with POSIX.

> But this argument carries to other types of buffers as well: in nearly
> all cases there is some natural and clear limit to the size of the
> data with which you need to deal.  Properly written code will use
> that natural limit.  It's not reasonable to set all your buffers to
> 1024 bytes simply because "It's a nice power of 2."

This is even less true.  What is the natural length of a person's full
name or postal address, for example?


Nick Maclaren,
University of Cambridge Computer Laboratory,
New Museums Site, Pembroke Street, Cambridge CB2 3QG, England.
Email:  nmm1@cam.ac.uk
Tel.:  +44 1223 334761    Fax:  +44 1223 334679

home help back first fref pref prev next nref lref last post