On Mon, 12 Sep 2016 21:20:54 +0200
Tim Rühsen <tim.rueh...@gmx.de> wrote:

> On Montag, 12. September 2016 20:18:30 CEST Eli Zaretskii wrote:
> > > From: Tim Ruehsen <tim.rueh...@gmx.de>
> > > Date: Mon, 12 Sep 2016 13:00:32 +0200
> > > 
> > > > +  char *basename = name;
> > > > +
> > > > +  while ((name = strstr (basename, "/")))
> > > > +    basename = name + 1;
> > > 
> > > Could you use strrchr() ? something like
> > > 
> > > char *basename = strrchr (name, '/');
> > > 
> > > if (basename)
> > > 
> > >   basename += 1;
> > > 
> > > else
> > > 
> > >   basename = name;
> > 
> > I think we want to use ISSEP, no?  Otherwise Windows file names with
> > backslashes will misfire.
> 
> Good point. What about device names ?
> 
> So maybe base_name() from Gnulib module 'dirname' is the right choice !?
> See https://www.gnu.org/software/gnulib/manual/html_node/basename.html

What if Gnulib's base_name() returns "./<basename>"?

libmetalink's metalink_check_safe_path() rejects relative paths: 
https://tools.ietf.org/html/rfc5854#section-4.1.2.1

Also, basename is used to point to an existing memory location, base_name() 
instead allocates new space. This is not a biggy, but we should keep it in mind 
to amend properly.

lib/basename.c (base_name)
--------------------------
  /* On systems with drive letters, "a/b:c" must return "./b:c" rather
     than "b:c" to avoid confusion with a drive letter.  On systems
     with pure POSIX semantics, this is not an issue.  */
--------------------------

Suggestions?

> 
> Regards, Tim

Regards,
Matthew

-- 
Matthew White <mehw.is...@inventati.org>

Attachment: pgpC6jURyKvHd.pgp
Description: PGP signature

Reply via email to