From: Eli Zaretskii <eliz@gnu.org>
To: Paul Eggert <eggert@cs.ucla.edu>
Cc: 8401@debbugs.gnu.org
Subject: bug#8401: removing duplication and improving the readlink code
Date: Fri, 01 Apr 2011 22:38:59 +0300 [thread overview]
Message-ID: <83hbahyd64.fsf@gnu.org> (raw)
In-Reply-To: <4D9620CC.4000806@cs.ucla.edu>
> Date: Fri, 01 Apr 2011 12:00:28 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: 8401@debbugs.gnu.org
>
> On 04/01/2011 01:33 AM, Eli Zaretskii wrote:
> > Isn't much easier and much more elegant to use ssize_t instead of an
> > int for the buffer sizes in both cases?
>
> That doesn't suffice; the code should not only use ssize_t for
> readlink's returned value, but it should also use size_t for the
> buffer size
Well, let's use that as well, then.
> and it should check that neither type overflows.
Are we really going to consider seriously the case of a link name
overflowing a 64-bit ssize_t data type? On what platform can this
happen? I could perhaps be sympathetic to defensive programming in
this area if it were a simple enough test. But why do we need to
introduce the allocator and careadlinkat modules, and all the nested
function calls needed for them, just to protect a simple code fragment
from overflowing?
> We could modify both copies of Emacs's readlink-using
> code to fix these problems, but when there's duplication like
> this, it's typically better to have just one copy of the code,
> and make any necessary fixes in that copy.
We could refactor the duplicated code into a short function, and use
that.
> On 04/01/2011 01:33 AM, Eli Zaretskii wrote:
> > If this patch is accepted, the new emacs_readlink function will be a
> > trivial "fail" stub on Windows.
>
> That would introduce an unnecessary "#ifdef DOS_NT" into the mainline
> code. We should strive to keep the mainline code free of
> porting #ifdefs when it is easy, as it is in this case.
> The proposed code should run just fine on Windows, using
> the already-existing stubs. We shouldn't need to clutter up
> up the mainline code with unnecessary Windows-specific
> microoptimizations.
I'm all for that, but if you want to help, please restructure the code
so that neither allocator.h nor careadlinkat are not used on platforms
whose readlink is an always-fail stub.
Sorry, but there are limits to what I can stand in code inelegance and
gratuitous complexity without having my stomach spilled out. I have
no authority to reject your patch, but I _can_ leave the parts of code
I'm responsible for as unaffected by it as possible.
On top of all that, the functions you introduce use malloc/realloc,
which I think will prevent their callers from being safe for
asynchronous calls triggered by external events (mouse etc.). The
original code used xmalloc/xrealloc instead, which have Emacs-specific
implementations to avoid that limitation.
next prev parent reply other threads:[~2011-04-01 19:38 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-01 6:47 bug#8401: removing duplication and improving the readlink code Paul Eggert
2011-04-01 8:33 ` Eli Zaretskii
2011-04-01 19:00 ` Paul Eggert
2011-04-01 19:38 ` Eli Zaretskii [this message]
2011-04-01 20:09 ` Paul Eggert
2011-04-01 20:57 ` Eli Zaretskii
2011-04-02 1:57 ` Paul Eggert
2011-04-03 16:41 ` Stefan Monnier
2011-04-04 4:38 ` Paul Eggert
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83hbahyd64.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=8401@debbugs.gnu.org \
--cc=eggert@cs.ucla.edu \
/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.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.