[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#11981: 24.1.50; url-http-parse-headers should not disable file name
From: |
David Engster |
Subject: |
bug#11981: 24.1.50; url-http-parse-headers should not disable file name handlers since it breaks auth-source |
Date: |
Sat, 21 Jul 2012 16:31:18 +0200 |
User-agent: |
Gnus/5.130006 (Ma Gnus v0.6) Emacs/24.1.50 (gnu/linux) |
David Engster writes:
> Stefan Monnier writes:
>>>> However, this workaraound assumes that everything that gets afterwards
>>>> in the `let'-section does not depend on file name handlers. However,
>>>> this is not the case: `url-http-handle-authentication' is called which
>
>>>> in turn calls the auth-source package. This package however supports
>>>> encrypted authinfo files which have to be automatically decrypted
>>>> through `auto-encryption-mode'. This, of course, works through file name
>>>> handlers.
>>> Does it work, if Tramp is disabled instead?
>>
>> I think I'd first like to better understand bug#6717: why do we take
>> a local part of a URL, let it start with / and then pass it to
>> file-name-directory? That sounds like a problem in itself.
>
> I agree. I wonder which call to `file-name-directory' threw the error in
> the original report - the most likely candidate is `url-file-directory',
> which should simply be rewritten to not use `file-name-directory'.
Patch attached. It even fixes another bug along the way:
`url-file-(non)directory' would not work on hexified URLs.
I'm not 100% sure this also fixes bug #6717; it might be that there's
another file-* call lurking somewhere.
-David
=== modified file 'lisp/url/url-util.el'
--- lisp/url/url-util.el 2012-07-11 23:13:41 +0000
+++ lisp/url/url-util.el 2012-07-21 14:25:59 +0000
@@ -246,18 +246,24 @@
"Return the directory part of FILE, for a URL."
(cond
((null file) "")
- ((string-match "\\?" file)
- (file-name-directory (substring file 0 (match-beginning 0))))
- (t (file-name-directory file))))
+ ((string-match "\\(\\?\\|%3[fF]\\)" file)
+ (url-file-directory (substring file 0 (match-beginning 0))))
+ ((string-match "\\(.*\\(/\\|%2[fF]\\)\\)" file)
+ (match-string 1 file))
+ (t
+ "")))
;;;###autoload
(defun url-file-nondirectory (file)
"Return the nondirectory part of FILE, for a URL."
(cond
((null file) "")
- ((string-match "\\?" file)
- (file-name-nondirectory (substring file 0 (match-beginning 0))))
- (t (file-name-nondirectory file))))
+ ((string-match "\\(\\?\\|%3[fF]\\)" file)
+ (url-file-nondirectory (substring file 0 (match-beginning 0))))
+ ((string-match ".*\\(?:/\\|%2[fF]\\)\\(.*\\)" file)
+ (match-string 1 file))
+ (t
+ "")))
;;;###autoload
(defun url-parse-query-string (query &optional downcase allow-newlines)