Overview
Artifact ID: | 5e8f92601f25ee6b6a58ac89fabc68f03bc5536c |
---|---|
Ticket: | 3f0216560679fd41b6afcc84e7b9ffe0dd971fa8
i18n: fossil ui can't show artifacts with non-ascii chars in the name on Windows |
User & Date: | anonymous 2011-05-27 03:44:12 |
Changes
- Appended to comment:
<hr /><i>anonymous claiming to be tsul added on 2011-05-27 03:44:12 UTC:</i><br /> First, by default the fossil executable is compiled with <tt>-Os</tt> MinGW gcc option on Windows as I understand. And it fails on conditions described above. But without <tt>-Os</tt> option it works fine. Second, here's my debug output of fossil-with-Os http subprocess: <verbatim> V:\dvcs\wc>fossil-ggdb-Os.exe --systemtrace --sqltrace --httptrace http repo in1.txt out1.txt 127.0.0.1 --nossl --localauth # cgi: GATEWAY_INTERFACE = [CGI/1.0] # cgi: REQUEST_METHOD = [GET] # cgi: REQUEST_URI = [/artifact?name=bdbdc5bc614b3003e6e5a275ea8482a9b9059698] # cgi: PATH_INFO = [/artifact] # cgi: QUERY_STRING = [name=bdbdc5bc614b3003e6e5a275ea8482a9b9059698] # cgi: REMOTE_ADDR = [127.0.0.1] # cgi: HTTP_HOST = [127.0.0.1:8080] # cgi: name = [bdbdc5bc614b3003e6e5a275ea8482a9b9059698] SELECT 1 FROM config WHERE name='aux-schema' AND value<>'2011-04-25 19:50'; SELECT 0 FROM blob WHERE uuid='bdbdc5bc614b3003e6e5a275ea8482a9b9059698'; SELECT rid FROM blob WHERE uuid='bdbdc5bc614b3003e6e5a275ea8482a9b9059698'; SELECT value FROM config WHERE name='localauth'; SELECT uid FROM user WHERE cap LIKE '%s%'; SELECT login FROM user WHERE uid=1; # login: [Tsul] with capabilities [sx] SELECT cap FROM user WHERE login = 'nobody'; SELECT cap FROM user WHERE login = 'anonymous'; SELECT uuid FROM blob WHERE rid=2; SELECT 1 FROM shun WHERE uuid='bdbdc5bc614b3003e6e5a275ea8482a9b9059698'; SELECT value FROM config WHERE name='header'; SELECT value FROM config WHERE name='project-name'; SELECT value FROM config WHERE name='index-page'; SELECT uuid FROM blob WHERE rid=2; SELECT uuid FROM blob WHERE rid=2; SELECT filename.name, datetime(event.mtime), coalesce(event.ecomment,event.comment), coalesce(event.euser,event.user), b.uuid FROM mlink, filename, event, blob a, blob b WHERE filename.fnid=mlink.fnid AND event.objid=mlink.mid AND a.rid=mlink.fid AND b.rid=mlink.mid AND mlink.fid=2; SELECT value FROM config WHERE name='wiki-use-html'; SELECT substr(tagname, 6, 10000), datetime(event.mtime), coalesce(event.euser, event.user) FROM tagxref, tag, event WHERE tagxref.rid=2 AND tag.tagid=tagxref.tagid AND tag.tagname LIKE 'wiki-%' AND event.objid=tagxref.rid; SELECT datetime(mtime), user, comment, type, uuid, tagid FROM event, blob WHERE event.objid=2 AND blob.rid=2; SELECT target, filename, datetime(mtime), user, src FROM attachment WHERE src=(SELECT uuid FROM blob WHERE rid=2) ORDER BY mtime DESC /*sort*/; </verbatim> And then it's crashed. The input file used was listed above. Debug output of fossil-without-Os http subprocess differs only in additional lines at the end: <verbatim> SELECT srcid FROM delta WHERE rid=2; SELECT content FROM blob WHERE rid=2 AND size>=0; SELECT value FROM config WHERE name='footer'; -- LOOKASIDE_USED 24 95 -- LOOKASIDE_HIT 728 -- LOOKASIDE_MISS_SIZE 209 -- LOOKASIDE_MISS_FULL 0 -- CACHE_USED 25800 -- SCHEMA_USED 15608 -- STMT_USED 3392 -- MEMORY_USED 94120 99752 -- MALLOC_SIZE 48000 -- MALLOC_COUNT 467 479 -- PCACHE_OVFLOW 25384 27568 -- prepared statements 23 </verbatim> At last, here is the gdb stacktrace of segfault and some other details about fossil-with-Os http subprocess: <verbatim> V:\dvcs\wc>gdb fossil-ggdb-Os.exe GNU gdb (GDB) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "mingw32". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from V:\dvcs\wc/fossil-ggdb-Os.exe...done. (gdb) run http repo in1.txt out1.txt 127.0.0.1 --nossl --localauth Starting program: V:\dvcs\wc/fossil-ggdb-Os.exe http repo in1.txt out1.txt 127.0.0.1 --nossl --localauth [New Thread 3792.0xd88] Program received signal SIGSEGV, Segmentation fault. 0x77c37742 in strcmp () from C:\WINDOWS\system32\msvcrt.dll (gdb) bt #0 0x77c37742 in strcmp () from C:\WINDOWS\system32\msvcrt.dll #1 0x00413a89 in mimetype_from_name (zName=0x6ff440 "\321Д\321\213\320▓\320░") at wbld/doc_.c:302 #2 0x0041e1af in artifact_page () at wbld/info_.c:1250 #3 0x00423081 in process_one_web_page (zNotFound=0x0) at wbld/main_.c:1057 #4 0x00422a6d in main (argc=<value optimized out>, argv=0x3e4088) at wbld/main_.c:290 (gdb) f 1 #1 0x00413a89 in mimetype_from_name (zName=0x6ff440 "\321Д\321\213\320▓\320░") at wbld/doc_.c:302 302 c = fossil_strcmp(zSuffix, aMime[i].zSuffix); (gdb) l 297 first = 0; 298 last = sizeof(aMime)/sizeof(aMime[0]); 299 while( first<=last ){ 300 int c; 301 i = (first+last)/2; 302 c = fossil_strcmp(zSuffix, aMime[i].zSuffix); 303 if( c==0 ) return aMime[i].zMimetype; 304 if( c<0 ){ 305 last = i-1; 306 }else{ (gdb) p zSuffix $1 = "\321Д\321\213\320▓\320░\000■\"\000\330¤\"\000yLC" (gdb) x/9xb zSuffix 0x22fdac: 0xd1 0x84 0xd1 0x8b 0xd0 0xb2 0xd0 0xb0 0x22fdb4: 0x00 (gdb) p i $3 = 190 (gdb) p last $4 = <value optimized out> (gdb) p aMime[i] $5 = {zSuffix = 0x38464947 <Address 0x38464947 out of bounds>, size = 1191207223, zMimetype = 0x39384649 <Address 0x39384649 out of bounds>} (gdb) </verbatim> Note that zSuffis = 'фыва' in UTF8, that is the subj. filename.