[八卦] 发现tango一个bug

tomqyp 2008-10-31
发现只要路径中包函“-”字符,tango处理时就会产生异常。
我英文不好,英文不错的朋友可不可以顺手报告一下。

import tango.io.FilePath;

void main()
{
	new FilePath(r"E:\gdb-6.8");
}
tomqyp 2008-10-31
找到原因了,原来不在于“-”字符,而是"\"字符引起的

version (Win32)
{
        enum : char 
        {
                CurrentDirChar = '.',
                FileSeparatorChar = '.',
                PathSeparatorChar = '/',
                SystemPathChar = ';',
        }

        static const char[] ParentDirString = "..";
        static const char[] CurrentDirString = ".";
        static const char[] FileSeparatorString = ".";
        static const char[] PathSeparatorString = "/";
        static const char[] SystemPathString = ";";

        static const char[] NewlineString = "\r\n";
}

package PathParser parse (char[] path, uint end)
{
        ............
        for (int i=end_; --i >= 0;)
             switch (fp[i])
                    {
                    case FileConst.FileSeparatorChar:
                         if (name_ < 0)
                             if (suffix_ < 0 && i && fp[i-1] != '.')
                                 suffix_ = i;
                         break;

                    case FileConst.PathSeparatorChar:
                         if (name_ < 0)
                             name_ = i + 1;
                         break;

                    case '\\':
                         throw new IOException ("unexpected '\\' character in path: "~path);

                    version (Win32)
                    {
                    case ':':
                         folder_ = i + 1;
                         break;
                    }

                    default:
                         break;
                    }

       ...............
}



奇怪的是windows下 目录分隔符也定义为'/',tango难到也会犯这样的底级错误?
tomqyp 2008-10-31
tango的版本是0.99.7

试了一下把这两处改一下,重新编译一下tango就OK了
oldrev 2008-11-01
人家代码里写明了不允许 \
throw new IOException ("unexpected '\\' character in path: "~path); 

这个不能算是 bug 吧?
tomqyp 2008-11-01
是啊不允许,但是在win32下\是目录分隔符啊,你看它的win32版的声明,目录分隔符却是/。

其实试一下就知道,win32下不管FilePath()用什么windows路径初始化都会引发异常。
tomqyp 2008-11-01
刚才在xp下试了一下,原来\和/都可以做分隔符。
比如用C:\windws\system32和C:/windws/system32,都可以正常操作。

但是windows api甚至tango的许多io函数在windows下返值都是默认用\做分隔符,所以把\定为非法肯定会出错了。
oldrev 2008-11-01
还是去问问开发者比较好
tomqyp 2008-11-03
下了svn里最近的版本,发现问题已经发现并解决了。
tango的做法是在FilePath初始化时在构造函数中将中路径转换成统一格式。

另外tango0.99.8好像快要发布了
Global site tag (gtag.js) - Google Analytics