unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Mark H Weaver <mhw@netris.org>
To: Noah Lavine <noah.b.lavine@gmail.com>
Cc: "Andy Wingo" <wingo@pobox.com>, "Ludovic Courtès" <ludo@gnu.org>,
	guile-devel@gnu.org
Subject: Paths as sequences of path components
Date: Mon, 23 May 2011 16:14:19 -0400	[thread overview]
Message-ID: <8762p1kwdg.fsf_-_@netris.org> (raw)
In-Reply-To: <BANLkTimXw9bVcgqRdk5mS1-byasW2rgpYg@mail.gmail.com> (Noah Lavine's message of "Tue, 17 May 2011 12:59:16 -0400")

Hello all,

I really like the basic gist behind Noah's proposal, to allow programs
to optionally represent paths (roughly) as sequences of path components.
I haven't worked out all the details, and I'm glad to leave that job to
someone else, but I do have a few comments to add:

First of all, I think that the paths-as-components layer should be
_above_ the POSIX-bytestrings-as-SCM-strings layer.  In other words, the
pathnames-as-components code should represent both complete pathnames
and path components as SCM strings.

In addition, I hope that the paths-as-components layer will allow code
to conveniently manipulate paths while avoiding some of the common
security problems that can arise.  For example, a web application should
be able to easily and safely use a user-supplied string to construct a
pathname, without having to search the user-supplied string for things
like "../../../../etc/passwd".

When constructing paths from components, I think we should prevent a
single component from being interpreted by the OS as multiple
components.  In other words, we should make sure that components do not
contain path separators or other characters which are illegal in
filenames (e.g. NUL).  Either an exception should be thrown or they
should be escaped somehow.  If escaped, I think the transformation
should be bijective.

Also, I think there should be a very simple way to exclude "special"
path components such as "." from "..", in a platform-neutral way.

On the other hand, sometimes you really do need to include "." or ".."
in a path, and so it ought to be possible to include them if needed.

Apart from this, I wish to raise some questions for which I don't have
answers:

Should we provide a way to represent paths with multiple consecutive
path separators?

How should things like drive letters in DOS filenames be handled?

How should the distinction between absolute and relative paths be
handled?

Should our existing POSIX interfaces which accept pathnames be extended
to optionally accept these higher-level path objects?

     Best,
      Mark



  parent reply	other threads:[~2011-05-23 20:14 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-15 15:34 mingw runtime patches Jan Nieuwenhuizen
2011-02-15 15:34 ` [PATCH 1/5] [mingw]: Add implementation of canonicalize_file_name Jan Nieuwenhuizen
2011-04-29 16:33   ` Andy Wingo
2011-05-20 13:56     ` Jan Nieuwenhuizen
2011-05-20 14:54       ` Andy Wingo
2011-02-15 15:35 ` [PATCH 2/5] [mingw]: Have compiled-file-name produce valid names Jan Nieuwenhuizen
2011-04-29 17:16   ` Andy Wingo
2011-04-29 17:30     ` Noah Lavine
2011-05-01 11:30       ` Andy Wingo
2011-05-01 19:23         ` Noah Lavine
2011-05-01 21:12           ` Andy Wingo
2011-05-01 21:48         ` Mark H Weaver
2011-05-02  7:45           ` Andy Wingo
2011-05-02 20:58         ` Ludovic Courtès
2011-05-02 21:58           ` Andy Wingo
2011-05-02 22:18             ` Ludovic Courtès
2011-05-03  7:44               ` Andy Wingo
2011-05-03  8:38                 ` Ludovic Courtès
2011-05-04  3:59                 ` Mark H Weaver
2011-05-04  4:13                   ` Noah Lavine
2011-05-04  9:24                     ` Ludovic Courtès
2011-05-17 16:59                       ` Noah Lavine
2011-05-17 19:26                         ` Mark H Weaver
2011-05-17 20:03                         ` Mark H Weaver
2011-05-23 19:42                         ` Filenames and other POSIX byte strings as SCM strings without loss Mark H Weaver
2011-07-01 10:51                           ` Andy Wingo
2011-05-23 20:14                         ` Mark H Weaver [this message]
2011-05-24 10:51                           ` Paths as sequences of path components Hans Aberg
2011-11-23 22:15                           ` Andy Wingo
2011-11-25  2:51                             ` Mark H Weaver
2011-06-16 22:29                 ` [PATCH 2/5] [mingw]: Have compiled-file-name produce valid names Andy Wingo
2011-05-02 23:16             ` Eli Barzilay
2011-05-20 13:47     ` Jan Nieuwenhuizen
2011-05-20 14:01       ` Andy Wingo
2011-06-30 14:11       ` Andy Wingo
2011-02-15 15:35 ` [PATCH 3/5] [mingw]: Do not export opendir, readdir etc., as dirents differ Jan Nieuwenhuizen
2011-05-01 11:37   ` Andy Wingo
2011-05-20 13:57     ` Jan Nieuwenhuizen
2011-06-16 22:22       ` Andy Wingo
2011-02-15 15:35 ` [PATCH 4/5] [mingw]: Delete existing target file before attempting rename Jan Nieuwenhuizen
2011-05-01 11:40   ` Andy Wingo
2011-05-20 14:05     ` Jan Nieuwenhuizen
2011-06-16 21:45     ` Andy Wingo
2011-02-15 15:35 ` [PATCH 5/5] [mingw]: Use $LOCALAPPDATA as a possible root for cachedir Jan Nieuwenhuizen
2011-05-01 11:42   ` Andy Wingo
2011-05-20 14:03     ` Jan Nieuwenhuizen
2011-06-16 22:02       ` Andy Wingo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8762p1kwdg.fsf_-_@netris.org \
    --to=mhw@netris.org \
    --cc=guile-devel@gnu.org \
    --cc=ludo@gnu.org \
    --cc=noah.b.lavine@gmail.com \
    --cc=wingo@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).