GNU bug report logs - #18310
24.3.93; relative links don't work in eww and Windows 7

Previous Next

Package: emacs;

Reported by: joaotavora <at> gmail.com (João Távora)

Date: Thu, 21 Aug 2014 10:35:01 UTC

Severity: normal

Found in version 24.3.93

Fixed in version 24.3.94

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 18310 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: joaotavora <at> gmail.com (João Távora)
Cc: 18310 <at> debbugs.gnu.org
Subject: Re: bug#18310: 24.3.93; relative links don't work in eww and Windows 7
Date: Thu, 21 Aug 2014 17:04:49 +0300
> From: joaotavora <at> gmail.com (João Távora)
> Date: Thu, 21 Aug 2014 11:33:32 +0100
> 
> On Windows 7:
> 
>     emacs -Q
>     M-x eww RET
>     http://www.lispworks.com/documentation/HyperSpec/Front/index.htm RET
> 
> Try to follow any of the relative links on the page, they point to
> something strange like "www.lispworks.comz" (note the final "z") which
> basically breaks all navigation.
> 
> The `shr-url' property at point shows
> 
>     http://www.lispworks.comz:/documentation/HyperSpec/Front/StartPts.htm
> 
> And everything indicates this is a consequence of a previous bug fix of
> mine for bug#17217 [1], which does not manifest itself in my Linux
> box. I'm pretty sure it also did not manifest itself on my old Windows
> XP box.

I'm pretty sure it did happen on XP.

> In that fix, I used the function `expand-file-name' in `shr-expand-url'
> to compute the expanded URL for "totally relative" case of hrefs like
> "../something".
> 
> This new bug seems to be caused by `expand-file-name' insisting on
> producing a valid windows pathname (with drive letter), even though it
> was passed the second argument DEFAULT-DIRECTORY.

That's what expand-file-name is supposed to do: it should produce a
fully-qualified file name that unequivocally describes a file.  That
means the file name must specify the drive letter.

> That is, on my Windows 7 system:
> 
>    (expand-file-name "../bla" "/something/else")
> 
> expands to
> 
>    "z:/something/bla"
> 
> Whereas I intented it to expand to "/something/bla".

"/something/bla" is not a fully-qualified file name, not on Windows.
As long as the drive letter is not specified, the file name is
ambiguous.

> My HOME variable is set to at "z:", but unsetting it does not help
> either.

I don't think it's because of HOME, since there was no "~" in the file
name.  I'm guessing that the default-directory of the buffer where you
used that code was on the z: drive, so Emacs used that to complete the
missing drive letter.

> I don't have time right now to look at the C-code for
> `expand-file-name'.

There's nothing wrong with expand-file-name, please don't waste your
time looking there.  The problem is in the change you made.  You
cannot use expand-file-name on anything but a file name on a local
filesystem, even if the "thing" you have to deal with happens to look
like a file name and uses slashes as separators.  expand-file-name
assumes without testing that its arguments are syntactically valid
local file names, and will produce invalid results if they are not.

Please use url-expand-file-name instead, it does exactly what you
want, and does that portably.




This bug report was last modified 10 years and 248 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.