Opened 13 years ago
Closed 13 years ago
#939 closed defect (fixed)
simple-directory-handler: error 500 on listing a directory with a link foo -> foo
| Reported by: | Mario Domenech Goulart | Owned by: | sjamaan |
|---|---|---|---|
| Priority: | minor | Milestone: | someday |
| Component: | extensions | Version: | 4.8.x |
| Keywords: | spiffy, simple-directory-handler | Cc: | |
| Estimated difficulty: |
Description
Here are the steps to reproduce the problem:
$ cat server.scm
(use spiffy simple-directory-handler)
(handle-directory simple-directory-handler)
(start-server)
$ mkdir web
$ cd web
$ ln -s foo foo
$ cd ..
$ csi -s server.scm &
[1] 6379
$ wget http://localhost:8080
--2012-10-24 17:32:45-- http://localhost:8080/
Resolving localhost... ::1, 127.0.0.1
Connecting to localhost|::1|:8080... failed: Connection refused.
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... [Wed Oct 24 17:32:45 2012] "GET http://localhost:8080/ HTTP/1.0" Error: (file-exists?)
system error while trying to access file
"./web//foo"
Call history:
display
spiffy#root-path
make-pathname
simple-directory-handler#simple-directory-dotfiles?
directory
sort
fold
spiffy#root-path
make-pathname
make-pathname
directory?
file-exists?
k695701
g699700
spiffy#handle-exception
with-output-to-string <--
500 Internal Server Error
2012-10-24 17:32:45 ERROR 500: Internal Server Error.
The problem seems to be in simple-directory-handler's simple-directory-handler procedure, when it calls file-exists? in the fold body (around line 82).
The call to file-exists? seems to be due to the fact that (simple-directory-display-file) calls file-size and file-modification-time on the given file. That's actually subject to race conditions, so maybe it would be better to just handle exceptions in (simple-directory-display-file) when attempting those operations.
Note: See
TracTickets for help on using
tickets.

Should be fixed in r27714. Thanks, Mario!