Closed Bug 670788 Opened 10 years ago Closed 10 years ago

Firefox does not run when what is called through $PATH is a symbolic link and a file of the same name exists in the current directory

Categories

(Core :: XPCOM, defect)

x86
Linux
defect
Not set
normal

Tracking

()

VERIFIED FIXED
mozilla8
Tracking Status
firefox7 + fixed

People

(Reporter: k0scist, Unassigned)

References

Details

(Keywords: regression, verified-beta, Whiteboard: [qa!])

Attachments

(1 file)

Since sometime in the Firefox 7 days, my symbolic link ~/bin/firefox, which poins to ~/firefox/firefox, stopped working.  This is pretty bad.  I can no longer launch firefox from my menu (ubuntu 11.04, fluxbox), nor click on links in gnome-terminals, nor do my wealth of scripts work to open links.  In short, its a big deficiency for me.  I'm happy to help try things to debug, but am not really sure what to do

│which firefox
/home/jhammel/bin/firefox
│firefox
Couldn't load XPCOM.
│strace firefox
execve("/home/jhammel/bin/firefox", ["firefox"], [/* 42 vars */]) = 0
brk(0)                                  = 0x9a0f000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7750000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=118805, ...}) = 0
mmap2(NULL, 118805, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7732000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20M\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=121644, ...}) = 0
mmap2(NULL, 98824, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7719000
mmap2(0xb772e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15) = 0xb772e000
mmap2(0xb7730000, 4616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7730000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\n\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=9736, ...}) = 0
mmap2(NULL, 12408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7715000
mmap2(0xb7717000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb7717000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/i386-linux-gnu/libstdc++.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340B\4\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=930044, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7714000
mmap2(NULL, 959532, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7629000
mmap2(0xb7708000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xde) = 0xb7708000
mmap2(0xb770d000, 25644, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb770d000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libm.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\2604\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=149392, ...}) = 0
mmap2(NULL, 151680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7603000
mmap2(0xb7627000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23) = 0xb7627000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libgcc_s.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\37\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=108040, ...}) = 0
mmap2(NULL, 111148, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb75e7000
mmap2(0xb7601000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19) = 0xb7601000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220o\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1434180, ...}) = 0
mmap2(NULL, 1444360, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7486000
mprotect(0xb75e0000, 4096, PROT_NONE)   = 0
mmap2(0xb75e1000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15a) = 0xb75e1000
mmap2(0xb75e4000, 10760, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb75e4000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7485000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7484000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb74846e0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb75e1000, 8192, PROT_READ)   = 0
mprotect(0xb7601000, 4096, PROT_READ)   = 0
mprotect(0xb7627000, 4096, PROT_READ)   = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7483000
mprotect(0xb7708000, 16384, PROT_READ)  = 0
mprotect(0xb7717000, 4096, PROT_READ)   = 0
mprotect(0xb772e000, 4096, PROT_READ)   = 0
mprotect(0xb776f000, 4096, PROT_READ)   = 0
munmap(0xb7732000, 118805)              = 0
set_tid_address(0xb7484748)             = 14683
set_robust_list(0xb7484750, 0xc)        = 0
futex(0xbf824180, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0xbf824180, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, bf824190) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0xb771d6e0, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb771d760, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
uname({sys="Linux", node="jhammel-THINK", ...}) = 0
getcwd("/home/jhammel", 4096)           = 14
lstat64("/home/jhammel/firefox", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("/home/jhammel/firefox", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getrusage(RUSAGE_SELF, {ru_utime={0, 0}, ru_stime={0, 4000}, ...}) = 0
lstat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/jhammel", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/jhammel/libxpcom.so", 0xbf820f9c) = -1 ENOENT (No such file or directory)
futex(0xb7718064, FUTEX_WAKE_PRIVATE, 2147483647) = 0
readlink("/etc/malloc.conf", 0xbf81ff1d, 4096) = -1 ENOENT (No such file or directory)
mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7383000
mmap2(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7283000
munmap(0xb7283000, 1048576)             = 0
mmap2(0xb7300000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7283000
munmap(0xb7283000, 1048576)             = 0
mmap2(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7183000
munmap(0xb7183000, 2097152)             = 0
mmap2(0xb7200000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7200000
open("/home/jhammel/libxpcom.so", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "Couldn't load XPCOM.\n", 21Couldn't load XPCOM.
)  = 21
exit_group(255)                         = ?
│^C
│ls -l `which firefox`
lrwxrwxrwx 1 jhammel jhammel 29 2011-06-21 16:34 /home/jhammel/bin/firefox -> /home/jhammel/firefox/firefox
This is a problem on three of my computers.  Dunno what the deal is :(
Possibly from bug 552864? Regression range?
I'm pretty sure this is related to bug 552864. I don't know if that was Jeff that mentioned that on irc shortly after bug 552864 landed, but I was aware of someone having that issue, though I can't reproduce the problem...
Okay I could reproduce. It only happens when running "firefox". If you use the full path to the symbolic link, it works.
Summary: firefox does not run via a symbolic link anymore → firefox does not run when what is called through $PATH is a symbolic link
(In reply to comment #4)
> Okay I could reproduce. It only happens when running "firefox". If you use
> the full path to the symbolic link, it works.

It's even more subtle. It only happens when running "firefox" and the current directory contains a "firefox" file or directory.
Summary: firefox does not run when what is called through $PATH is a symbolic link → Firefox does not run when what is called through $PATH is a symbolic link and a file of the same name exists in the current directory
Blocks: 552864
Duplicate of this bug: 671397
Component: General → XPCOM
Product: Firefox → Core
QA Contact: general → xpcom
Seems like we should track this regression for 7....  It'll cause starting the browser to mysteriously fail for people in some cases.
Tracking for Firefox 7.
Comment on attachment 545323 [details] [diff] [review]
When looking for the executable path on Unix, only use realpath() when we got a file path in the first place

Please use strchr instead of index: index is legacy.
Attachment #545323 - Flags: review?(benjamin) → review+
http://hg.mozilla.org/mozilla-central/rev/6738896ce429
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Whiteboard: [inbound]
Target Milestone: --- → mozilla8
Confirmed.  This now works on my nightly.  Thanks a bunch!  Life is good again
Comment on attachment 545323 [details] [diff] [review]
When looking for the executable path on Unix, only use realpath() when we got a file path in the first place

See comment 8
Attachment #545323 - Flags: approval-mozilla-aurora?
Comment on attachment 545323 [details] [diff] [review]
When looking for the executable path on Unix, only use realpath() when we got a file path in the first place

Approved for mozilla-aurora. Please land asap.
Attachment #545323 - Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
I was able to reproduce the "Couldn't load XPCOM." error on Ubuntu with Firefox 7 beta 1 (Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20100101 Firefox/7.0)

Steps:
1. Removed previous Firefox version
2. Unpacked Firefox 7 beta 1
3. Launched Firefox from the download directory
   -> double click on "firefox" in directory -> works fine
   -> from command line: # ./firefox -> works fine
   -> from command line: # firefox -> bash: /usr/bin/firefox: No such file or directory -> this might be because Firefox script doesn't create any shortcut
4. If I copy Firefox script in /bin and run it, I get:
      /bin$ firefox
      Couldn't load XPCOM.

  If I create a symlink of firefox file in bin/firefox 
      Downloads/firefox# ln -s firefox /bin/firefox
   and run /bin $ firefox, I get: 
      /bin$ firefox
      bash: /bin/firefox: Too many levels of symbolic links
  If I create a symlink of run-mozilla.sh in bin/firefox
      /Downloads/firefox# ln -s run-mozilla.sh /bin/firefox
  and run /bin $ firefox, I get: 
      bash: /bin/firefox: No such file or directory
(In reply to Mihaela Velimiroviciu from comment #17)
> I was able to reproduce the "Couldn't load XPCOM." error on Ubuntu with
> Firefox 7 beta 1 (Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20100101
> Firefox/7.0)
> 
> Steps:
> 1. Removed previous Firefox version
> 2. Unpacked Firefox 7 beta 1
> 3. Launched Firefox from the download directory
>    -> double click on "firefox" in directory -> works fine
>    -> from command line: # ./firefox -> works fine
>    -> from command line: # firefox -> bash: /usr/bin/firefox: No such file
> or directory -> this might be because Firefox script doesn't create any
> shortcut
> 4. If I copy Firefox script in /bin and run it, I get:
>       /bin$ firefox
>       Couldn't load XPCOM.

"firefox" is not a script. So copying "firefox" in /bin is not going to work nor is it supposed to.

>   If I create a symlink of firefox file in bin/firefox 
>       Downloads/firefox# ln -s firefox /bin/firefox
>    and run /bin $ firefox, I get: 
>       /bin$ firefox
>       bash: /bin/firefox: Too many levels of symbolic links

That is because you created a /bin/firefox symbolic that points to itself. You need to do ln -s /path/to/Downloads/firefox/firefox /bin/firefox

>   If I create a symlink of run-mozilla.sh in bin/firefox
>       /Downloads/firefox# ln -s run-mozilla.sh /bin/firefox
>   and run /bin $ firefox, I get: 
>       bash: /bin/firefox: No such file or directory

Running "run-mozilla.sh" is not going to start firefox. And you're doing the same mistake as above, except now /bin/firefox points at /bin/run-mozilla.sh.
I created the symlink again and it works now:
~/Downloads/firefox$ sudo ln -s /home/mihaelavelimiroviciu//Downloads/firefox/firefox /bin/firefox

~/Downloads/firefox$ firefox
/bin$ firefox
-> firefox launches successfully
Based on comment 19, QA can call this VERIFIED.
Status: RESOLVED → VERIFIED
Whiteboard: [qa!]
Keywords: verified-beta
You need to log in before you can comment on or make changes to this bug.