unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
@ 2013-03-08 17:18 Ken Brown
  2013-03-08 19:42 ` Eli Zaretskii
  0 siblings, 1 reply; 18+ messages in thread
From: Ken Brown @ 2013-03-08 17:18 UTC (permalink / raw)
  To: 13907

Create a file "/tmp/Ü.txt".  (In case my mailer mangles this, that's 
<U-umlaut>.txt.)  Now open Windows Explorer and drag this file into an 
emacs frame.  This results in the error message

   dnd-open-local-file: Can not read file:///tmp/%20.txt

I think the problem occurs early in w32-handle-dropped-file (defined in 
lisp/term/w32-win.el).  That function starts with

(let ((f (if (eq system-type 'cygwin)
	     (cygwin-convert-file-name-from-windows file-name t)

At this point f should have the value "/tmp/Ü.txt".  If I continue 
manually carrying out the code in w32-handle-dropped-file as though f 
had that value, everything is fine, as shown below.  So 
cygwin-convert-file-name-from-windows must be doing something wrong.

Here's a session in the *scratch* buffer, imitating what 
w32-handle-dropped-file would do starting from the correct value of f:

(setq f "/tmp/Ü.txt")
"/tmp/Ü.txt"

(setq coding (or file-name-coding-system
		 default-file-name-coding-system))
utf-8-unix

(setq file-name
       (mapconcat 'url-hexify-string
		 (split-string (encode-coding-string f coding)
			       "/")
		 "/"))
"/tmp/%C3%9C.txt"

(setq uri (concat
	   (if (eq system-type 'cygwin)
	       "file://"
	     "file:")
	   file-name))
"file:///tmp/%C3%9C.txt"

(dnd-get-local-file-name uri t)
"/tmp/Ü.txt"


In GNU Emacs 24.3.50.4 (i686-pc-cygwin)
  of 2013-03-06 on fiona
Bzr revision: 111954 dmantipov@yandex.ru-20130306112630-ooq2zc4oq664z5zc
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
  `configure --with-w32 CFLAGS=-g3 -O0'

Important settings:
   value of $LANG: en_US.UTF-8
   locale-coding-system: utf-8-unix
   default enable-multibyte-characters: t






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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 17:18 bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name Ken Brown
@ 2013-03-08 19:42 ` Eli Zaretskii
  2013-03-08 20:06   ` Eli Zaretskii
  2013-03-08 20:33   ` Eli Zaretskii
  0 siblings, 2 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 19:42 UTC (permalink / raw)
  To: Ken Brown; +Cc: 13907

> Date: Fri, 08 Mar 2013 12:18:05 -0500
> From: Ken Brown <kbrown@cornell.edu>
> 
> Create a file "/tmp/Ü.txt".  (In case my mailer mangles this, that's 
> <U-umlaut>.txt.)  Now open Windows Explorer and drag this file into an 
> emacs frame.  This results in the error message
> 
>    dnd-open-local-file: Can not read file:///tmp/%20.txt
> 
> I think the problem occurs early in w32-handle-dropped-file (defined in 
> lisp/term/w32-win.el).  That function starts with
> 
> (let ((f (if (eq system-type 'cygwin)
> 	     (cygwin-convert-file-name-from-windows file-name t)
> 
> At this point f should have the value "/tmp/Ü.txt".  If I continue 
> manually carrying out the code in w32-handle-dropped-file as though f 
> had that value, everything is fine, as shown below.  So 
> cygwin-convert-file-name-from-windows must be doing something wrong.

What do you get from cygwin-convert-file-name-from-windows with this
file name?

Also, what is the system codepage on this system?






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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 19:42 ` Eli Zaretskii
@ 2013-03-08 20:06   ` Eli Zaretskii
  2013-03-08 20:33   ` Eli Zaretskii
  1 sibling, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 20:06 UTC (permalink / raw)
  To: kbrown; +Cc: 13907

> Date: Fri, 08 Mar 2013 21:42:56 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 13907@debbugs.gnu.org
> 
> > Date: Fri, 08 Mar 2013 12:18:05 -0500
> > From: Ken Brown <kbrown@cornell.edu>
> > 
> > Create a file "/tmp/Ü.txt".  (In case my mailer mangles this, that's 
> > <U-umlaut>.txt.)  Now open Windows Explorer and drag this file into an 
> > emacs frame.  This results in the error message
> > 
> >    dnd-open-local-file: Can not read file:///tmp/%20.txt
> > 
> > I think the problem occurs early in w32-handle-dropped-file (defined in 
> > lisp/term/w32-win.el).  That function starts with
> > 
> > (let ((f (if (eq system-type 'cygwin)
> > 	     (cygwin-convert-file-name-from-windows file-name t)
> > 
> > At this point f should have the value "/tmp/Ü.txt".  If I continue 
> > manually carrying out the code in w32-handle-dropped-file as though f 
> > had that value, everything is fine, as shown below.  So 
> > cygwin-convert-file-name-from-windows must be doing something wrong.
> 
> What do you get from cygwin-convert-file-name-from-windows with this
> file name?
> 
> Also, what is the system codepage on this system?

In addition, please describe how you created the "/tmp/Ü.txt" file --
what command did you use?






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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 19:42 ` Eli Zaretskii
  2013-03-08 20:06   ` Eli Zaretskii
@ 2013-03-08 20:33   ` Eli Zaretskii
  2013-03-08 20:53     ` Eli Zaretskii
  1 sibling, 1 reply; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 20:33 UTC (permalink / raw)
  To: kbrown; +Cc: 13907

> Date: Fri, 08 Mar 2013 21:42:56 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 13907@debbugs.gnu.org
> 
> > Date: Fri, 08 Mar 2013 12:18:05 -0500
> > From: Ken Brown <kbrown@cornell.edu>
> > 
> > Create a file "/tmp/Ü.txt".  (In case my mailer mangles this, that's 
> > <U-umlaut>.txt.)  Now open Windows Explorer and drag this file into an 
> > emacs frame.  This results in the error message
> > 
> >    dnd-open-local-file: Can not read file:///tmp/%20.txt
> > 
> > I think the problem occurs early in w32-handle-dropped-file (defined in 
> > lisp/term/w32-win.el).  That function starts with
> > 
> > (let ((f (if (eq system-type 'cygwin)
> > 	     (cygwin-convert-file-name-from-windows file-name t)
> > 
> > At this point f should have the value "/tmp/Ü.txt".  If I continue 
> > manually carrying out the code in w32-handle-dropped-file as though f 
> > had that value, everything is fine, as shown below.  So 
> > cygwin-convert-file-name-from-windows must be doing something wrong.
> 
> What do you get from cygwin-convert-file-name-from-windows with this
> file name?
> 
> Also, what is the system codepage on this system?

And one more question: what is the value of file-name _before_ it is
passed to cygwin-convert-file-name-from-windows?  Does it perhaps
already have the U-umlaut replaced by a blank?






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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 20:33   ` Eli Zaretskii
@ 2013-03-08 20:53     ` Eli Zaretskii
  2013-03-08 21:03       ` Ken Brown
  2013-03-08 21:25       ` Daniel Colascione
  0 siblings, 2 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 20:53 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: 13907

> Date: Fri, 08 Mar 2013 22:33:07 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 13907@debbugs.gnu.org
> 
> And one more question: what is the value of file-name _before_ it is
> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
> already have the U-umlaut replaced by a blank?

I think the problem is on the C level, not on the Lisp level.  Take a
look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
DragQueryFile to get the file name, then decodes it by DECODE_FILE.
But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
inappropriate for decoding file names that come from Windows APIs.

Instead, in the cygw32 build, construct_drag_n_drop should use
DragQueryFileW and convert the file name to the internal Emacs
representation using from_unicode.





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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 20:53     ` Eli Zaretskii
@ 2013-03-08 21:03       ` Ken Brown
  2013-03-09  8:09         ` Eli Zaretskii
  2013-03-08 21:25       ` Daniel Colascione
  1 sibling, 1 reply; 18+ messages in thread
From: Ken Brown @ 2013-03-08 21:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 13907

On 3/8/2013 3:53 PM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>> Cc: 13907@debbugs.gnu.org
>>
>> And one more question: what is the value of file-name _before_ it is
>> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
>> already have the U-umlaut replaced by a blank?
>
> I think the problem is on the C level, not on the Lisp level.  Take a
> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
> inappropriate for decoding file names that come from Windows APIs.
>
> Instead, in the cygw32 build, construct_drag_n_drop should use
> DragQueryFileW and convert the file name to the internal Emacs
> representation using from_unicode.

Thanks!  You solved it while I was trying to get the answers to your 
questions.  For the record, here's what happens in my example:

The value of file-name that is passed to 
cygwin-convert-file-name-from-windows is "C:\\cygwin\\tmp\\\334.txt". 
The converted file name is then "/tmp/ .txt".

I'll leave it to Daniel to fix this, since it's his code.

Thanks again, Eli.

Ken







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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 20:53     ` Eli Zaretskii
  2013-03-08 21:03       ` Ken Brown
@ 2013-03-08 21:25       ` Daniel Colascione
  2013-03-09  3:03         ` Daniel Colascione
  1 sibling, 1 reply; 18+ messages in thread
From: Daniel Colascione @ 2013-03-08 21:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 13907

[-- Attachment #1: Type: text/plain, Size: 1048 bytes --]

On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>> Cc: 13907@debbugs.gnu.org
>>
>> And one more question: what is the value of file-name _before_ it is
>> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
>> already have the U-umlaut replaced by a blank?
> 
> I think the problem is on the C level, not on the Lisp level.  Take a
> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
> inappropriate for decoding file names that come from Windows APIs.
> 
> Instead, in the cygw32 build, construct_drag_n_drop should use
> DragQueryFileW and convert the file name to the internal Emacs
> representation using from_unicode.
> 


Thanks for finding that! I've been swamped this week, and I haven't been able to
do any investigation. I'll see whether I can come up with a fix this weekend.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 21:25       ` Daniel Colascione
@ 2013-03-09  3:03         ` Daniel Colascione
  2013-03-09  3:03           ` Daniel Colascione
                             ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09  3:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 13907

[-- Attachment #1: Type: text/plain, Size: 2184 bytes --]

On 3/8/2013 1:25 PM, Daniel Colascione wrote:
> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>> From: Eli Zaretskii <eliz@gnu.org>
>>> Cc: 13907@debbugs.gnu.org
>>>
>>> And one more question: what is the value of file-name _before_ it is
>>> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
>>> already have the U-umlaut replaced by a blank?
>>
>> I think the problem is on the C level, not on the Lisp level.  Take a
>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>> inappropriate for decoding file names that come from Windows APIs.
>>
>> Instead, in the cygw32 build, construct_drag_n_drop should use
>> DragQueryFileW and convert the file name to the internal Emacs
>> representation using from_unicode.
>>
> 
> 
> Thanks for finding that! I've been swamped this week, and I haven't been able to
> do any investigation. I'll see whether I can come up with a fix this weekend.
> 

The patch below resolves the issue for me. Assuming it's acceptable, where
should I install it?

~/edev/trunk
$ bzr diff
=== modified file 'src/w32term.c'
--- src/w32term.c       2013-02-16 13:59:37 +0000
+++ src/w32term.c       2013-03-09 03:02:10 +0000
@@ -3186,12 +3186,27 @@

   for (i = 0; i < num_files; i++)
     {
+#ifdef NTGUI_UNICODE
+      len = DragQueryFileW (hdrop, i, NULL, 0);
+      if (len <= 0)
+       continue;
+
+      name = alloca ((len + 1) * sizeof (wchar_t));
+      DragQueryFileW (hdrop, i, (wchar_t *) name, len + 1);
+      files = Fcons (
+        from_unicode (make_unibyte_string(
+                        name,
+                        1 + sizeof (wchar_t) * len)),
+        files);
+#else
       len = DragQueryFile (hdrop, i, NULL, 0);
       if (len <= 0)
        continue;
+
       name = alloca (len + 1);
       DragQueryFile (hdrop, i, name, len + 1);
       files = Fcons (DECODE_FILE (build_string (name)), files);
+#endif /* NTGUI_UNICODE */
     }

   DragFinish (hdrop);




[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  3:03         ` Daniel Colascione
@ 2013-03-09  3:03           ` Daniel Colascione
  2013-03-09  8:32             ` Eli Zaretskii
  2013-03-10 23:00             ` Daniel Colascione
  2013-03-09 12:16           ` Ken Brown
  2013-03-09 19:31           ` Glenn Morris
  2 siblings, 2 replies; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09  3:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 13907

[-- Attachment #1: Type: text/plain, Size: 2445 bytes --]

On 3/8/2013 7:03 PM, Daniel Colascione wrote:
> On 3/8/2013 1:25 PM, Daniel Colascione wrote:
>> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>>> From: Eli Zaretskii <eliz@gnu.org>
>>>> Cc: 13907@debbugs.gnu.org
>>>>
>>>> And one more question: what is the value of file-name _before_ it is
>>>> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
>>>> already have the U-umlaut replaced by a blank?
>>>
>>> I think the problem is on the C level, not on the Lisp level.  Take a
>>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>>> inappropriate for decoding file names that come from Windows APIs.
>>>
>>> Instead, in the cygw32 build, construct_drag_n_drop should use
>>> DragQueryFileW and convert the file name to the internal Emacs
>>> representation using from_unicode.
>>>
>>
>>
>> Thanks for finding that! I've been swamped this week, and I haven't been able to
>> do any investigation. I'll see whether I can come up with a fix this weekend.
>>
> 
> The patch below resolves the issue for me. Assuming it's acceptable, where
> should I install it?
> 
> ~/edev/trunk
> $ bzr diff
> === modified file 'src/w32term.c'
> --- src/w32term.c       2013-02-16 13:59:37 +0000
> +++ src/w32term.c       2013-03-09 03:02:10 +0000
> @@ -3186,12 +3186,27 @@
> 
>    for (i = 0; i < num_files; i++)
>      {
> +#ifdef NTGUI_UNICODE
> +      len = DragQueryFileW (hdrop, i, NULL, 0);
> +      if (len <= 0)
> +       continue;
> +
> +      name = alloca ((len + 1) * sizeof (wchar_t));
> +      DragQueryFileW (hdrop, i, (wchar_t *) name, len + 1);
> +      files = Fcons (
> +        from_unicode (make_unibyte_string(
> +                        name,
> +                        1 + sizeof (wchar_t) * len)),
> +        files);
> +#else
>        len = DragQueryFile (hdrop, i, NULL, 0);
>        if (len <= 0)
>         continue;
> +
>        name = alloca (len + 1);
>        DragQueryFile (hdrop, i, name, len + 1);
>        files = Fcons (DECODE_FILE (build_string (name)), files);
> +#endif /* NTGUI_UNICODE */
>      }
> 
>    DragFinish (hdrop);

By the way: shouldn't we have an unwind handler here so that we call DragFinish
even if our memory allocation fails?


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-08 21:03       ` Ken Brown
@ 2013-03-09  8:09         ` Eli Zaretskii
  0 siblings, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-09  8:09 UTC (permalink / raw)
  To: Ken Brown; +Cc: 13907

> Date: Fri, 08 Mar 2013 16:03:25 -0500
> From: Ken Brown <kbrown@cornell.edu>
> CC: Daniel Colascione <dancol@dancol.org>, 13907@debbugs.gnu.org
> 
> The value of file-name that is passed to 
> cygwin-convert-file-name-from-windows is "C:\\cygwin\\tmp\\\334.txt". 
> The converted file name is then "/tmp/ .txt".

The appearance of a blank (or a question mark) instead of a character
is usually a tell-tale sign of a botched character conversion.

For example, when I drag-n-drop into a native w32 Emacs a file name
that includes characters not from the system codepage, I get this:

  dnd-open-local-file: Can not read file:D%3A/gnu/ispell-3.3.02.w32/dictionaries/Tatar-Rus-%3Fngliz%20s%3Fzlege.htm

(%3F is the question mark.)





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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  3:03           ` Daniel Colascione
@ 2013-03-09  8:32             ` Eli Zaretskii
  2013-03-09  8:37               ` Daniel Colascione
  2013-03-09  8:37               ` Daniel Colascione
  2013-03-10 23:00             ` Daniel Colascione
  1 sibling, 2 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-09  8:32 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: 13907

> Date: Fri, 08 Mar 2013 19:03:58 -0800
> From: Daniel Colascione <dancol@dancol.org>
> CC: 13907@debbugs.gnu.org
> 
> By the way: shouldn't we have an unwind handler here so that we call DragFinish
> even if our memory allocation fails?

What memory allocation?  If you mean 'alloca', its failure is
generally a fatal exception, which means we are no longer in a
position to call anything ;-)





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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  8:32             ` Eli Zaretskii
@ 2013-03-09  8:37               ` Daniel Colascione
  2013-03-09  8:51                 ` Eli Zaretskii
  2013-03-09  8:37               ` Daniel Colascione
  1 sibling, 1 reply; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09  8:37 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 13907

[-- Attachment #1: Type: text/plain, Size: 613 bytes --]

On 3/9/13 12:32 AM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 19:03:58 -0800
>> From: Daniel Colascione <dancol@dancol.org>
>> CC: 13907@debbugs.gnu.org
>>
>> By the way: shouldn't we have an unwind handler here so that we call DragFinish
>> even if our memory allocation fails?
> 
> What memory allocation?  If you mean 'alloca', its failure is
> generally a fatal exception, which means we are no longer in a
> position to call anything ;-)
> 

We're consing, aren't we? If we can't cons, even after gc, we
longjmp out in memory_full, right? Granted, I haven't seen that
happen in years.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 235 bytes --]

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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  8:32             ` Eli Zaretskii
  2013-03-09  8:37               ` Daniel Colascione
@ 2013-03-09  8:37               ` Daniel Colascione
  1 sibling, 0 replies; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09  8:37 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 13907

[-- Attachment #1: Type: text/plain, Size: 613 bytes --]

On 3/9/13 12:32 AM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 19:03:58 -0800
>> From: Daniel Colascione <dancol@dancol.org>
>> CC: 13907@debbugs.gnu.org
>>
>> By the way: shouldn't we have an unwind handler here so that we call DragFinish
>> even if our memory allocation fails?
> 
> What memory allocation?  If you mean 'alloca', its failure is
> generally a fatal exception, which means we are no longer in a
> position to call anything ;-)
> 

We're consing, aren't we? If we can't cons, even after gc, we
longjmp out in memory_full, right? Granted, I haven't seen that
happen in years.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 235 bytes --]

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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  8:37               ` Daniel Colascione
@ 2013-03-09  8:51                 ` Eli Zaretskii
  0 siblings, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-09  8:51 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: 13907

> Date: Sat, 09 Mar 2013 00:37:40 -0800
> From: Daniel Colascione <dancol@dancol.org>
> CC: 13907@debbugs.gnu.org
> 
> On 3/9/13 12:32 AM, Eli Zaretskii wrote:
> >> Date: Fri, 08 Mar 2013 19:03:58 -0800
> >> From: Daniel Colascione <dancol@dancol.org>
> >> CC: 13907@debbugs.gnu.org
> >>
> >> By the way: shouldn't we have an unwind handler here so that we call DragFinish
> >> even if our memory allocation fails?
> > 
> > What memory allocation?  If you mean 'alloca', its failure is
> > generally a fatal exception, which means we are no longer in a
> > position to call anything ;-)
> > 
> 
> We're consing, aren't we? If we can't cons, even after gc, we
> longjmp out in memory_full, right?

Right.

Well, DragFinish just releases memory, so it's not terribly important
to make sure we call it if we end up in memory_full.  But it might be
good for cleaner code, yes.





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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  3:03         ` Daniel Colascione
  2013-03-09  3:03           ` Daniel Colascione
@ 2013-03-09 12:16           ` Ken Brown
  2013-03-09 19:31           ` Glenn Morris
  2 siblings, 0 replies; 18+ messages in thread
From: Ken Brown @ 2013-03-09 12:16 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: 13907

On 3/8/2013 10:03 PM, Daniel Colascione wrote:
> On 3/8/2013 1:25 PM, Daniel Colascione wrote:
>> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>>> From: Eli Zaretskii <eliz@gnu.org>
>>>> Cc: 13907@debbugs.gnu.org
>>>>
>>>> And one more question: what is the value of file-name _before_ it is
>>>> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
>>>> already have the U-umlaut replaced by a blank?
>>>
>>> I think the problem is on the C level, not on the Lisp level.  Take a
>>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>>> inappropriate for decoding file names that come from Windows APIs.
>>>
>>> Instead, in the cygw32 build, construct_drag_n_drop should use
>>> DragQueryFileW and convert the file name to the internal Emacs
>>> representation using from_unicode.
>>>
>>
>>
>> Thanks for finding that! I've been swamped this week, and I haven't been able to
>> do any investigation. I'll see whether I can come up with a fix this weekend.
>>
>
> The patch below resolves the issue for me. Assuming it's acceptable, where
> should I install it?

It fixes it for me too.  Thanks.

Ken






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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  3:03         ` Daniel Colascione
  2013-03-09  3:03           ` Daniel Colascione
  2013-03-09 12:16           ` Ken Brown
@ 2013-03-09 19:31           ` Glenn Morris
  2 siblings, 0 replies; 18+ messages in thread
From: Glenn Morris @ 2013-03-09 19:31 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: 13907

Daniel Colascione wrote:

> The patch below resolves the issue for me. Assuming it's acceptable, where
> should I install it?

To trunk, IMO.





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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-09  3:03           ` Daniel Colascione
  2013-03-09  8:32             ` Eli Zaretskii
@ 2013-03-10 23:00             ` Daniel Colascione
  2013-03-11  9:51               ` Ken Brown
  1 sibling, 1 reply; 18+ messages in thread
From: Daniel Colascione @ 2013-03-10 23:00 UTC (permalink / raw)
  To: Eli Zaretskii, kbrown; +Cc: 13907

[-- Attachment #1: Type: text/plain, Size: 1632 bytes --]

On 3/8/2013 7:03 PM, Daniel Colascione wrote:
> On 3/8/2013 7:03 PM, Daniel Colascione wrote:
>> On 3/8/2013 1:25 PM, Daniel Colascione wrote:
>>> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>>>> From: Eli Zaretskii <eliz@gnu.org>
>>>>> Cc: 13907@debbugs.gnu.org
>>>>>
>>>>> And one more question: what is the value of file-name _before_ it is
>>>>> passed to cygwin-convert-file-name-from-windows?  Does it perhaps
>>>>> already have the U-umlaut replaced by a blank?
>>>>
>>>> I think the problem is on the C level, not on the Lisp level.  Take a
>>>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>>>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>>>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>>>> inappropriate for decoding file names that come from Windows APIs.
>>>>
>>>> Instead, in the cygw32 build, construct_drag_n_drop should use
>>>> DragQueryFileW and convert the file name to the internal Emacs
>>>> representation using from_unicode.
>>>>
>>>
>>>
>>> Thanks for finding that! I've been swamped this week, and I haven't been able to
>>> do any investigation. I'll see whether I can come up with a fix this weekend.
>>>
>>
>> The patch below resolves the issue for me. Assuming it's acceptable, where
>> should I install it?

bzr trunk revision 111999 resolves this bug, the title-bar bug, and a few others
relating to mismatches between the Windows GUI encoding and the Cygwin system
encoding. Ken, it's probably this change that you want to backport to your
Cygwin package.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

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

* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
  2013-03-10 23:00             ` Daniel Colascione
@ 2013-03-11  9:51               ` Ken Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Ken Brown @ 2013-03-11  9:51 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: 13907-done

On 3/10/2013 7:00 PM, Daniel Colascione wrote:
> bzr trunk revision 111999 resolves this bug, the title-bar bug, and a few others
> relating to mismatches between the Windows GUI encoding and the Cygwin system
> encoding. Ken, it's probably this change that you want to backport to your
> Cygwin package.

Thanks, Daniel!  I'm closing the bug.

Ken






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

end of thread, other threads:[~2013-03-11  9:51 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-08 17:18 bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name Ken Brown
2013-03-08 19:42 ` Eli Zaretskii
2013-03-08 20:06   ` Eli Zaretskii
2013-03-08 20:33   ` Eli Zaretskii
2013-03-08 20:53     ` Eli Zaretskii
2013-03-08 21:03       ` Ken Brown
2013-03-09  8:09         ` Eli Zaretskii
2013-03-08 21:25       ` Daniel Colascione
2013-03-09  3:03         ` Daniel Colascione
2013-03-09  3:03           ` Daniel Colascione
2013-03-09  8:32             ` Eli Zaretskii
2013-03-09  8:37               ` Daniel Colascione
2013-03-09  8:51                 ` Eli Zaretskii
2013-03-09  8:37               ` Daniel Colascione
2013-03-10 23:00             ` Daniel Colascione
2013-03-11  9:51               ` Ken Brown
2013-03-09 12:16           ` Ken Brown
2013-03-09 19:31           ` Glenn Morris

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).