unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* gnus doesn't encode non-ascii attachment filenames
@ 2006-02-13  7:00 Zhang Wei
       [not found] ` <E1F8oEg-0007Q6-Vf@fencepost.gnu.org>
  0 siblings, 1 reply; 7+ messages in thread
From: Zhang Wei @ 2006-02-13  7:00 UTC (permalink / raw)


If the attached file has a non-ascii(chinese actually) filename, gnus
failed to correctly encode the filename. But it do decode non-ascii
attachment filename composed by other MUA.

-- 
Zhang Wei or Brep
<brep@smth.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: gnus doesn't encode non-ascii attachment filenames
       [not found] ` <E1F8oEg-0007Q6-Vf@fencepost.gnu.org>
@ 2006-02-14  1:25   ` Zhang Wei
  2006-02-14  2:13     ` Kenichi Handa
  0 siblings, 1 reply; 7+ messages in thread
From: Zhang Wei @ 2006-02-14  1:25 UTC (permalink / raw)
  Cc: handa, emacs-devel

"Richard M. Stallman" <rms@gnu.org> writes:

> I suggest you provide a precise test case so people can reproduce the
> problem.

Sorry, false alarm. This bug is only with the emacs-unicode-2
branch. No problem with emacs 22.

The difference of internal character representation between emacs23
and emacs22, makes gnus can't handle non-ascii attachment filename
correctly.

To generate a rfc2231 encoded filename such as "%d6%d0%ce%c4",
function (following-char) returns "d6" for the first char of the
filename "d6d0cec4" in emacs22, while in emacs23 this function returns
"3fffd6".

This is an ugly hack to solve this problem:

*** rfc2231.el	08  Feb 2006 20:05:31 +0800	7.13
--- rfc2231.el	14  Feb 2006 09:12:16 +0800	
***************
*** 194,207 ****
    (string-match "\\`\\(?:\\([^']+\\)?'\\([^']+\\)?'\\)?\\(.+\\)" string)
    (let ((coding-system (mm-charset-to-coding-system (match-string 1 string)))
  	;;(language (match-string 2 string))
! 	(value (match-string 3 string)))
      (mm-with-multibyte-buffer
        (insert value)
        (goto-char (point-min))
        (while (search-forward "%" nil t)
  	(insert
  	 (prog1
! 	     (string-to-number (buffer-substring (point) (+ (point) 2)) 16)
  	   (delete-region (1- (point)) (+ (point) 2)))))
        ;; Decode using the charset, if any.
        (unless (memq coding-system '(nil ascii))
--- 194,213 ----
    (string-match "\\`\\(?:\\([^']+\\)?'\\([^']+\\)?'\\)?\\(.+\\)" string)
    (let ((coding-system (mm-charset-to-coding-system (match-string 1 string)))
  	;;(language (match-string 2 string))
! 	(value (match-string 3 string))
! 	number)
      (mm-with-multibyte-buffer
        (insert value)
        (goto-char (point-min))
        (while (search-forward "%" nil t)
+ 	(setq number (string-to-number (buffer-substring (point) (+ (point) 2)) 16))
  	(insert
  	 (prog1
! 	   (if (>= emacs-major-version 23)
! 	       (if (> number #x7F)
! 		   (+ number #x3fff00) 
! 		 number) ;; why (unibyte-char-to-multibyte ch) does not work?
! 	     number)
  	   (delete-region (1- (point)) (+ (point) 2)))))
        ;; Decode using the charset, if any.
        (unless (memq coding-system '(nil ascii))
***************
*** 219,226 ****
  	(num -1)
  	;; Don't make lines exceeding 76 column.
  	(limit (- 74 (length param)))
! 	spacep encodep charsetp charset broken)
!     (with-temp-buffer
        (insert value)
        (goto-char (point-min))
        (while (not (eobp))
--- 225,232 ----
  	(num -1)
  	;; Don't make lines exceeding 76 column.
  	(limit (- 74 (length param)))
! 	spacep encodep charsetp charset broken following-char)
!     (mm-with-multibyte-buffer
        (insert value)
        (goto-char (point-min))
        (while (not (eobp))
***************
*** 245,260 ****
  	(goto-char (point-min))
  	(insert (symbol-name (or charset 'us-ascii)) "''")
  	(while (not (eobp))
! 	  (if (or (not (memq (following-char) ascii))
! 		  (memq (following-char) control)
! 		  (memq (following-char) tspecial)
! 		  (memq (following-char) special)
! 		  (eq (following-char) ? ))
  	      (progn
  		(when (>= (current-column) (1- limit))
  		  (insert ";\n")
  		  (setq broken t))
! 		(insert "%" (format "%02x" (following-char)))
  		(delete-char 1))
  	    (when (> (current-column) limit)
  	      (insert ";\n")
--- 251,270 ----
  	(goto-char (point-min))
  	(insert (symbol-name (or charset 'us-ascii)) "''")
  	(while (not (eobp))
! 	  (if (>= emacs-major-version 23)
! 	      (setq following-char
! 		    (multibyte-char-to-unibyte (following-char)))
! 	    (setq following-char (following-char)))
! 	  (if (or (not (memq following-char ascii))
! 		  (memq following-char control)
! 		  (memq following-char tspecial)
! 		  (memq following-char special)
! 		  (eq following-char ? ))
  	      (progn
  		(when (>= (current-column) (1- limit))
  		  (insert ";\n")
  		  (setq broken t))
! 		(insert "%" (format "%02x" following-char))
  		(delete-char 1))
  	    (when (> (current-column) limit)
  	      (insert ";\n")

-- 
Zhang Wei or Brep
<brep@smth.org>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: gnus doesn't encode non-ascii attachment filenames
  2006-02-14  1:25   ` Zhang Wei
@ 2006-02-14  2:13     ` Kenichi Handa
  2006-02-14  3:36       ` Miles Bader
  0 siblings, 1 reply; 7+ messages in thread
From: Kenichi Handa @ 2006-02-14  2:13 UTC (permalink / raw)
  Cc: rms, emacs-devel

In article <87irriras8.fsf@emacsfans.org>, Zhang Wei <id.brep@gmail.com> writes:

[...]
> Sorry, false alarm. This bug is only with the emacs-unicode-2
> branch. No problem with emacs 22.

> The difference of internal character representation between emacs23
> and emacs22, makes gnus can't handle non-ascii attachment filename
> correctly.

> To generate a rfc2231 encoded filename such as "%d6%d0%ce%c4",
> function (following-char) returns "d6" for the first char of the
> filename "d6d0cec4" in emacs22, while in emacs23 this function returns
> "3fffd6".

Ah, I see.

> This is an ugly hack to solve this problem:

For Emacs 23, we can have a better/simpler fix.  But, could
someone tell me the maintenance policy of Gnus codes?
Should we modify codes in cvs HEAD so that it works also
with emacs-unicode-2 (perhaps with version check here and
there)?  Or, should we directly modify codes in cvs
emacs-unicode-2?

---
Kenichi Handa
handa@m17n.org

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: gnus doesn't encode non-ascii attachment filenames
  2006-02-14  2:13     ` Kenichi Handa
@ 2006-02-14  3:36       ` Miles Bader
  2006-02-14 10:59         ` Gnus compatibility with Emacs 23 (unicode branch) (was: gnus doesn't encode non-ascii attachment filenames) Reiner Steib
  2006-03-23  5:58         ` gnus doesn't encode non-ascii attachment filenames Kenichi Handa
  0 siblings, 2 replies; 7+ messages in thread
From: Miles Bader @ 2006-02-14  3:36 UTC (permalink / raw)
  Cc: Zhang Wei, rms, emacs-devel

Kenichi Handa <handa@m17n.org> writes:
> For Emacs 23, we can have a better/simpler fix.  But, could someone
> tell me the maintenance policy of Gnus codes?  Should we modify codes
> in cvs HEAD so that it works also with emacs-unicode-2 (perhaps with
> version check here and there)?  Or, should we directly modify codes in
> cvs emacs-unicode-2?

It seems to me better keep the code in both branches the same, if
possible.

Changes to Emacs 22 will be propagated to Gnus 5.10 and the Gnus
development branch (No Gnus); as people may wish to use the Gnus
development branch with Emacs 23, it would be a good thing to avoid
changes which are only in the Emacs 23 sources.

-Miles
-- 
Next to fried food, the South has suffered most from oratory.
  			-- Walter Hines Page

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Gnus compatibility with Emacs 23 (unicode branch) (was: gnus doesn't encode non-ascii attachment filenames)
  2006-02-14  3:36       ` Miles Bader
@ 2006-02-14 10:59         ` Reiner Steib
  2006-02-23 21:03           ` Gnus compatibility with Emacs 23 (unicode branch) Reiner Steib
  2006-03-23  5:58         ` gnus doesn't encode non-ascii attachment filenames Kenichi Handa
  1 sibling, 1 reply; 7+ messages in thread
From: Reiner Steib @ 2006-02-14 10:59 UTC (permalink / raw)
  Cc: emacs-devel, ding, Kenichi Handa

On Tue, Feb 14 2006, Miles Bader wrote:

> Kenichi Handa <handa@m17n.org> writes:
>> For Emacs 23, we can have a better/simpler fix.  But, could someone
>> tell me the maintenance policy of Gnus codes?  Should we modify codes
>> in cvs HEAD so that it works also with emacs-unicode-2 (perhaps with
>> version check here and there)?  

(Or feature check, if possible.)  But please don't break compatibility
with Emacs 21 and Emacs 20.7 [1].

>> Or, should we directly modify codes in cvs emacs-unicode-2?
>
> It seems to me better keep the code in both branches the same, if
> possible.
>
> Changes to Emacs 22 will be propagated to Gnus 5.10 and the Gnus
> development branch (No Gnus); as people may wish to use the Gnus
> development branch with Emacs 23, it would be a good thing to avoid
> changes which are only in the Emacs 23 sources.

I agree.  AFAICS, Dave Love already installed some changes to make
Gnus work with emacs-unicode-2 (often referred as "Emacs 22" [2] in
code comments).  But there are probably also some open issues:
E.g. "Wrong for Emacs 23" in `message-fix-before-sending'.

Bye, Reiner.

[1] We are currently discussing if we should drop Emacs 20.7
    compatibility also for the stable branch (Gnus 5.10, v5-10) as we
    have already done for the development version of Gnus (No Gnus).

[2] We should probably check out the before-renaming-to-emacs-22
    version, look for strings like "Emacs 22" and replace the comments
    with "Emacs 23 (unicode)" 
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Gnus compatibility with Emacs 23 (unicode branch)
  2006-02-14 10:59         ` Gnus compatibility with Emacs 23 (unicode branch) (was: gnus doesn't encode non-ascii attachment filenames) Reiner Steib
@ 2006-02-23 21:03           ` Reiner Steib
  0 siblings, 0 replies; 7+ messages in thread
From: Reiner Steib @ 2006-02-23 21:03 UTC (permalink / raw)


On Tue, Feb 14 2006, Reiner Steib wrote:

> AFAICS, Dave Love already installed some changes to make Gnus work
> with emacs-unicode-2 (often referred as "Emacs 22" [2] in code
> comments).  But there are probably also some open issues:
> E.g. "Wrong for Emacs 23" in `message-fix-before-sending'.
[...]
> [2] We should probably check out the before-renaming-to-emacs-22
>     version, look for strings like "Emacs 22" and replace the comments
>     with "Emacs 23 (unicode)" 

Done in Gnus' CVS.  (I looked at the Gnus 5.10.6 release files.)

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: gnus doesn't encode non-ascii attachment filenames
  2006-02-14  3:36       ` Miles Bader
  2006-02-14 10:59         ` Gnus compatibility with Emacs 23 (unicode branch) (was: gnus doesn't encode non-ascii attachment filenames) Reiner Steib
@ 2006-03-23  5:58         ` Kenichi Handa
  1 sibling, 0 replies; 7+ messages in thread
From: Kenichi Handa @ 2006-03-23  5:58 UTC (permalink / raw)
  Cc: id.brep, rms, emacs-devel

I'm sorry for the late response on this matter.

In article <buo64ni392v.fsf@dhapc248.dev.necel.com>, Miles Bader <miles.bader@necel.com> writes:

> Kenichi Handa <handa@m17n.org> writes:
>> For Emacs 23, we can have a better/simpler fix.  But, could someone
>> tell me the maintenance policy of Gnus codes?  Should we modify codes
>> in cvs HEAD so that it works also with emacs-unicode-2 (perhaps with
>> version check here and there)?  Or, should we directly modify codes in
>> cvs emacs-unicode-2?

> It seems to me better keep the code in both branches the same, if
> possible.

> Changes to Emacs 22 will be propagated to Gnus 5.10 and the Gnus
> development branch (No Gnus); as people may wish to use the Gnus
> development branch with Emacs 23, it would be a good thing to avoid
> changes which are only in the Emacs 23 sources.

I've just installed the attached change in HEAD (it doesn't
check versions nor existence of a specific function).  But,
as I'm not using Gnus, could Gnus users please check if it
doesn't break anything?

To Emacs 23 users; the change will be propagated to Emacs 23
in a week or so.  If you can't wait for that, please apply
the patch by yourself and check if it fixes the current
problem.

---
Kenichi Handa
handa@m17n.org

2006-03-23  Kenichi Handa  <handa@m17n.org>

	* rfc2231.el (rfc2231-decode-encoded-string): Work on unibyte
	buffer and then decode the buffer text if necessary.
	(rfc2231-encode-string): Be sure to work on multibyte buffer at
	first, and after mm-encode-body, change the buffer to unibyte.
	
*** rfc2231.el	20 Feb 2006 09:51:27 +0900	1.4.14.11
--- rfc2231.el	22 Mar 2006 22:07:21 +0900	
***************
*** 227,233 ****
    (let ((coding-system (mm-charset-to-coding-system (match-string 2 string)))
  	;;(language (match-string 3 string))
  	(value (match-string 4 string)))
!     (mm-with-multibyte-buffer
        (insert value)
        (goto-char (point-min))
        (while (search-forward "%" nil t)
--- 227,233 ----
    (let ((coding-system (mm-charset-to-coding-system (match-string 2 string)))
  	;;(language (match-string 3 string))
  	(value (match-string 4 string)))
!     (mm-with-unibyte-buffer
        (insert value)
        (goto-char (point-min))
        (while (search-forward "%" nil t)
***************
*** 236,244 ****
  	     (string-to-number (buffer-substring (point) (+ (point) 2)) 16)
  	   (delete-region (1- (point)) (+ (point) 2)))))
        ;; Decode using the charset, if any.
!       (unless (memq coding-system '(nil ascii))
! 	(mm-decode-coding-region (point-min) (point-max) coding-system))
!       (buffer-string))))
  
  (defun rfc2231-encode-string (param value)
    "Return and PARAM=VALUE string encoded according to RFC2231.
--- 236,244 ----
  	     (string-to-number (buffer-substring (point) (+ (point) 2)) 16)
  	   (delete-region (1- (point)) (+ (point) 2)))))
        ;; Decode using the charset, if any.
!       (if (memq coding-system '(nil ascii))
! 	  (buffer-string)
! 	(mm-decode-coding-string (buffer-string) coding-system)))))
  
  (defun rfc2231-encode-string (param value)
    "Return and PARAM=VALUE string encoded according to RFC2231.
***************
*** 252,258 ****
  	;; Don't make lines exceeding 76 column.
  	(limit (- 74 (length param)))
  	spacep encodep charsetp charset broken)
!     (with-temp-buffer
        (insert value)
        (goto-char (point-min))
        (while (not (eobp))
--- 252,258 ----
  	;; Don't make lines exceeding 76 column.
  	(limit (- 74 (length param)))
  	spacep encodep charsetp charset broken)
!     (mm-with-multibyte-buffer
        (insert value)
        (goto-char (point-min))
        (while (not (eobp))
***************
*** 268,273 ****
--- 268,274 ----
  	(forward-char 1))
        (when charsetp
  	(setq charset (mm-encode-body)))
+       (set-buffer-multibyte nil)
        (cond
         ((or encodep charsetp
  	    (progn

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2006-03-23  5:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-13  7:00 gnus doesn't encode non-ascii attachment filenames Zhang Wei
     [not found] ` <E1F8oEg-0007Q6-Vf@fencepost.gnu.org>
2006-02-14  1:25   ` Zhang Wei
2006-02-14  2:13     ` Kenichi Handa
2006-02-14  3:36       ` Miles Bader
2006-02-14 10:59         ` Gnus compatibility with Emacs 23 (unicode branch) (was: gnus doesn't encode non-ascii attachment filenames) Reiner Steib
2006-02-23 21:03           ` Gnus compatibility with Emacs 23 (unicode branch) Reiner Steib
2006-03-23  5:58         ` gnus doesn't encode non-ascii attachment filenames Kenichi Handa

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).