By improving the relative_path() algorithm, e02ca72 (path.c: refactor
relative_path(), not only strip prefix, 2013-06-25) uncovered a latent
bug. While most editor applications like cat and vim handle
non-canonicalized relative paths fine, emacs does not. This is due to a
long-standing bug in emacs, where it refuses to resolve symlinks in the
supplied path:
#!/bin/sh
mkdir z z/a z/b
echo moodle >z/a/file
ln -s z/b
cd b
emacs ../a/file # fail: opens /tmp/a/file
Even if emacs were to be patched to fix this bug now, we still need to
support users running older versions.
Co-authored-by: Nguyễn Thái Ngọc Duy [off-list ref]
Signed-off-by: Ramkumar Ramachandra <redacted>
---
Urgent candidate for maint. I wrote to emacs-devel, but nobody seems
to be interested; the sources are horrendously unmaintainable, and
the project should die soon.
editor.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/editor.c b/editor.c
index 27bdecd..0abbd8d 100644
--- a/editor.c
+++ b/editor.c
@@ -37,7 +37,7 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en
return error("Terminal is dumb, but EDITOR unset");
if (strcmp(editor, ":")) {
- const char *args[] = { editor, path, NULL };
+ const char *args[] = { editor, real_path(path), NULL };
struct child_process p;
int ret, sig;
--
1.8.4.rc0.2.g7ba4592
On Sun, Jul 28, 2013 at 11:59 PM, Ramkumar Ramachandra
[off-list ref] wrote:
By improving the relative_path() algorithm, e02ca72 (path.c: refactor
relative_path(), not only strip prefix, 2013-06-25) uncovered a latent
bug. While most editor applications like cat and vim handle
non-canonicalized relative paths fine, emacs does not. This is due to a
long-standing bug in emacs, where it refuses to resolve symlinks in the
supplied path:
#!/bin/sh
mkdir z z/a z/b
echo moodle >z/a/file
ln -s z/b
cd b
emacs ../a/file # fail: opens /tmp/a/file
Even if emacs were to be patched to fix this bug now, we still need to
support users running older versions.
We used to have workaround for external programs, e.g. 35ce862 (pager:
Work around window resizing bug in 'less' - 2007-01-24), so I don't
think this is a problem.
Co-authored-by: Nguyễn Thái Ngọc Duy [off-list ref]
Signed-off-by: Ramkumar Ramachandra <redacted>
---
Urgent candidate for maint. I wrote to emacs-devel, but nobody seems
to be interested; the sources are horrendously unmaintainable, and
the project should die soon.
Hey, I don't want to throw away years of training my fingers to use
emacs. It can't die until there is a viable fork :)
quoted hunk
diff --git a/editor.c b/editor.c
index 27bdecd..0abbd8d 100644
--- a/editor.c
+++ b/editor.c
@@ -37,7 +37,7 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en
return error("Terminal is dumb, but EDITOR unset");
if (strcmp(editor, ":")) {
- const char *args[] = { editor, path, NULL };
+ const char *args[] = { editor, real_path(path), NULL };
struct child_process p;
int ret, sig;
real_path() returns a static buffer, which could be overwritten by the
next real_path() call. I checked and I think that won't happen. So the
patch looks good.
--
Duy