<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.iis.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:cs="http://blogs.iis.net/"><channel><title>IIS7 - General</title><link>http://forums.iis.net/1041.aspx</link><description>For any general questions relating to IIS 7</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Re: WebDAV module cannot handle UTF-8 in MOVE method.</title><link>http://forums.iis.net/thread/1889406.aspx</link><pubDate>Thu, 08 Jan 2009 13:33:30 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1889406</guid><dc:creator>keisukeo</dc:creator><slash:comments>0</slash:comments><comments>http://forums.iis.net/thread/1889406.aspx</comments><wfw:commentRss>http://forums.iis.net/commentrss.aspx?SectionID=1041&amp;PostID=1889406</wfw:commentRss><description>&lt;p&gt;Thank you for fixing it!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Keisuke&lt;/p&gt;</description></item><item><title>Re: WebDAV module cannot handle UTF-8 in MOVE method.</title><link>http://forums.iis.net/thread/1889388.aspx</link><pubDate>Thu, 08 Jan 2009 09:03:03 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1889388</guid><dc:creator>JaroDunajsky</dc:creator><slash:comments>0</slash:comments><comments>http://forums.iis.net/thread/1889388.aspx</comments><wfw:commentRss>http://forums.iis.net/commentrss.aspx?SectionID=1041&amp;PostID=1889388</wfw:commentRss><description>&lt;p&gt;We confirmed the problem. We tested fix for it and it will be included in the next update for WebDAV.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Thanks for letting us know&lt;/p&gt;</description></item><item><title>WebDAV module cannot handle UTF-8 in MOVE method.</title><link>http://forums.iis.net/thread/1885605.aspx</link><pubDate>Fri, 21 Nov 2008 15:37:11 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1885605</guid><dc:creator>keisukeo</dc:creator><slash:comments>0</slash:comments><comments>http://forums.iis.net/thread/1885605.aspx</comments><wfw:commentRss>http://forums.iis.net/commentrss.aspx?SectionID=1041&amp;PostID=1885605</wfw:commentRss><description>&lt;p&gt;Hi&amp;nbsp;IIS guys,&lt;br /&gt;&lt;br /&gt;I found&amp;nbsp;a UTF-8 problem in WebDAV module.&amp;nbsp;Could you take a look and fix this issue? It must be very easy to fix.&lt;br /&gt;&lt;br /&gt;Problem Summary&lt;br /&gt;===============&lt;/p&gt;
&lt;p&gt;IIS7: WebDAV module cannot handle UTF-8 in MOVE method&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Repro Steps&lt;br /&gt;===========&lt;/p&gt;
&lt;p&gt;1. Install WebDAV module on IIS7&lt;br /&gt;2. Create a folder named &amp;quot;xyz&amp;quot; under the root directory.&lt;br /&gt;3. Send the following request with WFetch.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; REQUEST: **************&lt;br /&gt;&amp;nbsp; MOVE /xyz HTTP/1.1&lt;br /&gt;&amp;nbsp; Host: localhost&lt;br /&gt;&amp;nbsp; Overwrite: F&lt;br /&gt;&amp;nbsp; Destination: &lt;a href="http://localhost/%E3%83%86%E3%82%B9%E3%83%88"&gt;http://localhost/%E3%83%86%E3%82%B9%E3%83%88&lt;/a&gt;&lt;br /&gt;&amp;nbsp; Translate: f&lt;br /&gt;&amp;nbsp; Accept: */*&lt;br /&gt;&amp;nbsp; Authorization: Basic xxxxx&lt;/p&gt;
&lt;p&gt;&amp;nbsp; You can see the following message from the IIS.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; RESPONSE: **************&lt;br /&gt;&amp;nbsp; HTTP/1.1 201 Created&lt;br /&gt;&amp;nbsp; Server: Microsoft-IIS/7.0&lt;br /&gt;&amp;nbsp; X-Powered-By: ASP.NET&lt;br /&gt;&amp;nbsp; Date: Fri, 21 Nov 2008 08:03:07 GMT&lt;br /&gt;&amp;nbsp; Content-Length: 0&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Expected Result&lt;br /&gt;===============&lt;/p&gt;
&lt;p&gt;A folder named &amp;quot;テスト&amp;quot; is created.&lt;/p&gt;
&lt;p&gt;# &amp;quot;テスト&amp;quot; means &amp;#39;test&amp;#39; in Japanese.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Actual Result&lt;br /&gt;=============&lt;/p&gt;
&lt;p&gt;A resultant folder name is invalid.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Debug Information&lt;br /&gt;=================&lt;/p&gt;
&lt;p&gt;WebDAV module must URL decode HTTP header line before MultiByteToWideChar.&lt;br /&gt;I confirmed that a directory is created with a correct name if Distination&lt;br /&gt;HTTP header line is URL decoded before MBTWC call.&lt;/p&gt;
&lt;p&gt;I digged into this issue. The debug log is as follows.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Set two break points.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;0:006&amp;gt; bl&lt;br /&gt;&amp;nbsp;0 e 77025cae&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0001 (0001)&amp;nbsp; 0:**** kernel32!MultiByteToWideChar&lt;br /&gt;&amp;nbsp;1 e 7702d198&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0001 (0001)&amp;nbsp; 0:**** kernel32!WideCharToMultiByte&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; g&lt;/strong&gt;&lt;br /&gt;Breakpoint 0 hit&lt;br /&gt;eax=00000000 ebx=77025cae ecx=00000000 edx=00000000 esi=01ebf4f4 edi=01c3c7d0&lt;br /&gt;eip=77025cae esp=01ebf3c0 ebp=01ebf3ec iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up ei pl zr na pe nc&lt;br /&gt;cs=001b&amp;nbsp; ss=0023&amp;nbsp; ds=0023&amp;nbsp; es=0023&amp;nbsp; fs=003b&amp;nbsp; gs=0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; efl=00000246&lt;br /&gt;kernel32!MultiByteToWideChar:&lt;br /&gt;77025cae 8bff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edi,edi&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; kbn&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;# ChildEBP RetAddr&amp;nbsp; Args to Child&lt;br /&gt;00 01ebf3bc 6e952d32 0000fde9 00000008 01ebf430 kernel32!MultiByteToWideChar&lt;br /&gt;WARNING: Stack unwind information not available. Following frames may be wrong.&lt;br /&gt;01 01ebf3ec 6e949a69 01ebf430 0000001c 00000000 webdav!RegisterModule+0x5e97&lt;br /&gt;02 01ebf40c 6e94a2e1 01ebf430 00000000 01c26b78 webdav+0x9a69&lt;br /&gt;03 01ebf494 6e947d40 01c25d68 01ebf4f4 00000000 webdav+0xa2e1&lt;br /&gt;04 01ebf528 6e94bb7f 01152950 00000100 0115938c webdav+0x7d40&lt;br /&gt;05 01ebf544 70db7035 0115bd18 01c25dc0 01c25d6c webdav+0xbb7f&lt;br /&gt;...&lt;br /&gt;13 01ebf978 77c0e4b6 01136eb8 7cd3a7d1 00000000 kernel32!BaseThreadInitThunk+0xe&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; dc 01ebf3bc&lt;br /&gt;&lt;/strong&gt;01ebf3bc&amp;nbsp; 01ebf4f4 6e952d32 0000fde9 00000008&amp;nbsp; ....2-.n........&lt;br /&gt;01ebf3cc&amp;nbsp; 01ebf430 0000001c 01c3c7d0 000000b8&amp;nbsp; 0...............&lt;br /&gt;01ebf3dc&amp;nbsp; 01ebf4f4 01c255f5 01c25d00 00000000&amp;nbsp; .....U...]......&lt;br /&gt;...&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; da 01ebf430&lt;br /&gt;&lt;/strong&gt;01ebf430&amp;nbsp; &amp;quot;/%E3%83%86%E3%82%B9%E3%83%88&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;I found that MultiByteToWideChar tried to convert the URL encoded string to Unicode directly. This is a problem.&lt;/p&gt;
&lt;p&gt;The URL encoded string must be decoded before MultiByteToWideChar.&lt;/p&gt;
&lt;p&gt;So I URL encoded the string directly like this,&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; eb 01ebf430 2f e3 83 86 e3 82 b9 e3 83 88 00&lt;br /&gt;0:006&amp;gt; dc 01ebf430&lt;/strong&gt;&lt;br /&gt;01ebf430&amp;nbsp; 8683e32f e3b982e3 45008883 32382533&amp;nbsp; /..........E3%82&lt;br /&gt;01ebf440&amp;nbsp; 25394225 38253345 38382533 01c26b00&amp;nbsp; %B9%E3%83%88.k..&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;and adjusted the fourth param of MBTWC so as to handle null-terminated string.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;0:006&amp;gt; ed 01ebf3d0 ffffffff&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Run IIS...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; g 6e952d32&lt;/strong&gt;&lt;br /&gt;eax=00000005 ebx=77025cae ecx=6dfb7879 edx=0000000b esi=01ebf4f4 edi=01c3c7d0&lt;br /&gt;eip=6e952d32 esp=01ebf3dc ebp=01ebf3ec iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up ei pl zr na pe nc&lt;br /&gt;cs=001b&amp;nbsp; ss=0023&amp;nbsp; ds=0023&amp;nbsp; es=0023&amp;nbsp; fs=003b&amp;nbsp; gs=0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; efl=00000246&lt;br /&gt;webdav!RegisterModule+0x5e97:&lt;br /&gt;6e952d32 8945fc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [ebp-4],eax ss:0023:01ebf3e8=00000000&lt;br /&gt;&lt;strong&gt;0:006&amp;gt; du 01c3c7d0&lt;br /&gt;&lt;/strong&gt;01c3c7d0&amp;nbsp; &amp;quot;/テスト&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;I confirmed that a correct directory was created.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Appendix&lt;br /&gt;========&lt;/p&gt;
&lt;p&gt;1) Confirmed MKCOL method can handle UTF-8 correctly.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;I confirmed that MKCOL method can create a directory with UTF-8 directory name.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp; REQUEST: **************&lt;br /&gt;&amp;nbsp; MKCOL /%E3%83%86%E3%82%B9%E3%83%88 HTTP/1.1&lt;br /&gt;&amp;nbsp; Host: localhost&lt;br /&gt;&amp;nbsp; Accept: */*&lt;br /&gt;&amp;nbsp; Authorization: Basic xxxxx&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp; RESPONSE: **************&lt;br /&gt;&amp;nbsp; HTTP/1.1 201 Created&lt;br /&gt;&amp;nbsp; Server: Microsoft-IIS/7.0&lt;br /&gt;&amp;nbsp; X-Powered-By: ASP.NET&lt;br /&gt;&amp;nbsp; Date: Fri, 21 Nov 2008 07:57:59 GMT&lt;br /&gt;&amp;nbsp; Content-Length: 0&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;A directory named &amp;quot;テスト&amp;quot; was created. &amp;quot;テスト&amp;quot; means &amp;quot;test&amp;quot; in Japanese. &lt;br /&gt;And the UTF-8 code is &amp;quot;E38386E382B9E38388&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;2) Confirmed MOVE method cannot handle UTF-8 correctly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; REQUEST: **************&lt;br /&gt;&amp;nbsp; MOVE /xyz HTTP/1.1&lt;br /&gt;&amp;nbsp; Host: localhost&lt;br /&gt;&amp;nbsp; Overwrite: F&lt;br /&gt;&amp;nbsp; Destination: &lt;a href="http://localhost/%E3%83%86%E3%82%B9%E3%83%88"&gt;http://localhost/%E3%83%86%E3%82%B9%E3%83%88&lt;/a&gt;&lt;br /&gt;&amp;nbsp; Translate: f&lt;br /&gt;&amp;nbsp; Accept: */*&lt;br /&gt;&amp;nbsp; Authorization: Basic xxxxx&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp; RESPONSE: **************&lt;br /&gt;&amp;nbsp; HTTP/1.1 201 Created&lt;br /&gt;&amp;nbsp; Server: Microsoft-IIS/7.0&lt;br /&gt;&amp;nbsp; X-Powered-By: ASP.NET&lt;br /&gt;&amp;nbsp; Date: Fri, 21 Nov 2008 08:03:07 GMT&lt;br /&gt;&amp;nbsp; Content-Length: 0&lt;/p&gt;
&lt;p&gt;But the resultant directory name was unreadable.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thank you,&lt;br /&gt;Keisuke Oyama&lt;br /&gt;&lt;br /&gt;E-mail: &lt;a href="mailto:dadosan@keicode.com"&gt;dadosan@keicode.com&lt;/a&gt;&lt;br /&gt;URL: &lt;a href="http://keicode.com/"&gt;http://keicode.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>