Subject: Re: bug#5475: Archives with filenames with square brackets

From: Juri Linkov <[email-masked]>
Date: Sun, 31 Jan 2010 12:56:19 +0200

>> The default value of `archive-zip-extract' can be either "unzip" or
>> "pkunzip" (depending on the presence of the executable in `exec-path'),
>> but the function `archive-zip-extract' compares with the value "pkzip".
>> So the pkzip/pkunzip branch is never executed.
>>
>> It seems the intention of the change revno#45347 (2002-05-19) was
>> to compare with "pkunzip" instead of "pkzip"
>
> Right, looks like a bug.
>
> Btw, I looked into 7z, and it doesn't have the same problem as unzip.
> So we probably should only quote with unzip.

Does the following patch look right?  At least, it fixes a bug, and
after feature freeze we could add more data structures to defcustom to
indicate whether the file name needs to be quoted.

=== modified file 'lisp/arc-mode.el'
--- lisp/arc-mode.el	2010-01-28 20:06:36 +0000
+++ lisp/arc-mode.el	2010-01-31 10:55:14 +0000
@@ -1782,12 +1782,13 @@ (defun archive-zip-summarize ()
     (apply 'vector (nreverse files))))
 
 (defun archive-zip-extract (archive name)
-  (if (equal (car archive-zip-extract) "pkzip")
-      (archive-*-extract archive name archive-zip-extract)
-    ;; unzip expands wildcards in NAME, so we need to quote it.
-    ;; FIXME: Does pkzip need similar treatment?
-    (archive-extract-by-stdout archive (shell-quote-argument name)
-			       archive-zip-extract)))
+  (if (equal (car archive-zip-extract) "unzip")
+      ;; unzip expands wildcards in NAME, so we need to quote it.
+      ;; FIXME: Does pkzip need similar treatment?
+      ;; (7z doesn't need to quote wildcards)
+      (archive-extract-by-stdout archive (shell-quote-argument name)
+				 archive-zip-extract)
+    (archive-*-extract archive name archive-zip-extract)))
 
 (defun archive-zip-write-file-member (archive descr)
   (archive-*-write-file-member

-- 
Juri Linkov
http://www.jurta.org/emacs/