Opened 10 years ago
Last modified 2 years ago
#391 accepted defect
"bad place for a wild pathname" on EXT:PROBE-DIRECTORY for NAME containing #\*
| Reported by: | Mark Evenson | Owned by: | Mark Evenson |
|---|---|---|---|
| Priority: | critical | Milestone: | 1.9.3 |
| Component: | interpreter | Version: | 1.5.0-dev |
| Keywords: | cl:probe-file ext:probe-directory cl:directory | Cc: | |
| Parent Tickets: |
Description
John Pallister on #abcl reported problems with configuring ASDF via (asdf:initialize-source-registry '(:source-registry (:tree (:home "src/synchromesh")) :inherit-configuration)) for which he later traced down to problems with a pathname NAME containing a #\* character:
<synchromesh> Ooh, that's interesting - EXTENSIONS:PROBE-DIRECTORY has found a filename in the specified directory tree that contains a "*". <synchromesh> Then (much deeper) org.armedbear.lisp.probe_file$pf_probe_directory.execute(probe_file.java:88) throws the error.
The exact error cases here still needs to be determined.
TBD: What does it mean to PROBE-{DIRECTORY,FILE} on a PATHNAME containing #\*?
Change History (21)
comment:1 follow-up: 4 Changed 10 years ago by
comment:2 Changed 10 years ago by
| Milestone: | 1.3.3 → 1.4.0 |
|---|
comment:4 Changed 9 years ago by
Replying to mevenson:
From discussion in #lisp, it seems that PROBE-FILE cannot accept pathname designators which contain wildcards, so the #\* character should be treated as a literal #\* in our PROBE-{FILE,DIRECTORY} implementations.
The problem lies in that ABCL "overloads" the meaning of #\* characters in PATHNAME objects as both designating a wildcard for a string of zero or more characters, as well as a literal #\* object.
Surveying alisp, sbcl, and ccl reveal different strategies for dealing with this.
For alisp, #p"foo*" is not WILD-PATHNAME-P true.
sbcl replaces pathnames with wildcards with explicit objects
CL-USER> (describe #p"/tmp/foo*")
#P"/tmp/foo*"
[structure-object]
Slots with :INSTANCE allocation:
HOST = #<SB-IMPL::UNIX-HOST {1000FDEC23}>
DEVICE = NIL
DIRECTORY = (:ABSOLUTE "tmp")
NAME = #<SB-IMPL::PATTERN "foo" :MULTI-CHAR-WILD>
TYPE = NIL
VERSION = :NEWEST
; No value
Lots of factors to consider here. Need to summarize issues more succinctly.
comment:5 Changed 9 years ago by
| Keywords: | cl:directory added |
|---|---|
| Milestone: | 1.5.0 → 1.4.1 |
| Resolution: | → fixed |
| Status: | new → closed |
| Version: | → 1.5.0-dev |
Directory entries with asterisk characters no longer cause errors. Ambiguities remain for what an asterisk character means for various parts of our CL:PATHNAME implementation
comment:6 Changed 9 years ago by
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
Apparently not addressed.
Recipe for failure.
1) Create a file with asterisk characters in a directory that ASDF will search
2) Attempt to load Quicklisp
CL-USER(1): (asdf:load-system :quicklisp-abcl)
#<THREAD "interpreter" {73C28A4A}>: Debugger invoked on condition of type FILE-ERROR
Bad place for a wild pathname.
Restarts:
0: RETRY Retry ASDF operation.
1: CLEAR-CONFIGURATION-AND-RETRY Retry ASDF operation after resetting the configuration.
2: TOP-LEVEL Return to top level.
[1] CL-USER(3): :bt 50
0: (SYSTEM:BACKTRACE)
1: (INVOKE-DEBUGGER #<FILE-ERROR {7A02CBCD}>)
2: org.armedbear.lisp.Lisp.error(Lisp.java:382)
3: org.armedbear.lisp.probe_file$pf_probe_directory.execute(probe_file.java:88)
4: org.armedbear.lisp.Symbol.execute(Symbol.java:803)
5: org.armedbear.lisp.LispThread.execute(LispThread.java:814)
6: org.armedbear.lisp.asdf_252.execute(asdf.lisp:2862)
7: org.armedbear.lisp.Symbol.execute(Symbol.java:803)
8: org.armedbear.lisp.LispThread.execute(LispThread.java:814)
9: org.armedbear.lisp.asdf_254.execute(asdf.lisp:2862)
10: org.armedbear.lisp.Symbol.execute(Symbol.java:838)
11: org.armedbear.lisp.LispThread.execute(LispThread.java:872)
12: org.armedbear.lisp.asdf_1611.execute(asdf.lisp:11614)
13: org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:150)
14: org.armedbear.lisp.Symbol.execute(Symbol.java:852)
15: org.armedbear.lisp.LispThread.execute(LispThread.java:894)
16: org.armedbear.lisp.asdf_1621.execute(asdf.lisp:11614)
17: org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:185)
18: org.armedbear.lisp.Symbol.execute(Symbol.java:883)
19: org.armedbear.lisp.LispThread.execute(LispThread.java:943)
20: org.armedbear.lisp.asdf_1648.execute(asdf.lisp:11614)
21: org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:98)
22: org.armedbear.lisp.Symbol.execute(Symbol.java:803)
23: org.armedbear.lisp.LispThread.execute(LispThread.java:814)
24: org.armedbear.lisp.asdf_1650.execute(asdf.lisp:11614)
25: org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:98)
26: org.armedbear.lisp.Symbol.execute(Symbol.java:803)
27: org.armedbear.lisp.LispThread.execute(LispThread.java:814)
28: org.armedbear.lisp.asdf_1651.execute(asdf.lisp:11614)
29: org.armedbear.lisp.CompiledClosure.execute(CompiledClosure.java:89)
30: org.armedbear.lisp.Symbol.execute(Symbol.java:793)
31: org.armedbear.lisp.LispThread.execute(LispThread.java:798)
32: org.armedbear.lisp.asdf_1652.execute(asdf.lisp:11614)
33: org.armedbear.lisp.Symbol.execute(Symbol.java:803)
34: org.armedbear.lisp.LispThread.execute(LispThread.java:814)
35: org.armedbear.lisp.asdf_819.execute(asdf.lisp:7967)
36: org.armedbear.lisp.LispThread.execute(LispThread.java:814)
37: org.armedbear.lisp.Primitives$pf_apply.execute(Primitives.java:2794)
38: (PROBE-DIRECTORY #P"/Users/evenson/work/abcl/xx*xx")
39: (UIOP/FILESYSTEM:SUBDIRECTORIES #P"/Users/evenson/work/abcl/")
40: (UIOP/FILESYSTEM:COLLECT-SUB*DIRECTORIES
comment:8 Changed 9 years ago by
| Owner: | set to Mark Evenson |
|---|---|
| Priority: | major → critical |
| Status: | reopened → accepted |
comment:12 Changed 5 years ago by
| Milestone: | 1.6.2 → 1.7.0 |
|---|
comment:17 Changed 4 years ago by
Don Morrison notes in <https://mailman.common-lisp.net/pipermail/armedbear-devel/2021-May/004197.html>
I don’t think I have the ability to comment on bugs in the issue tracker, or, if I do, I’ve not figured out how to do it. I hope sending mail to this list for the purpose is acceptable; apologies if not. I note that #391 was opened six years ago, but remains unfixed, and, apart from apparently being pushed off from release to release, seems not to have received any love for four years. I just wanted to add a note to it that it is still being encountered in the wild, and is, at least in one user’s case, causing some pain. File names containing asterisks may not be a good idea, but sometimes we have no control over the names of files we are given. It also means at least one (uiop:subdirectories), and probably many, UIOP functions sometimes fail in what can appear to be mysterious ways on ABCL, but not other implementations.
comment:18 Changed 4 years ago by
| Milestone: | 1.8.1 → 1.9.0 |
|---|
comment:19 Changed 3 years ago by
| Milestone: | 1.9.0 → 1.9.1 |
|---|
comment:20 Changed 3 years ago by
| Milestone: | 1.9.1 → 1.9.2 |
|---|
comment:21 Changed 2 years ago by
| Milestone: | 1.9.2 → 1.9.3 |
|---|
From discussion in #lisp, it seems that PROBE-FILE cannot accept pathname designators which contain wildcards, so the #\* character should be treated as a literal #\* in our PROBE-{FILE,DIRECTORY} implementations.