今天发现了我写的一个bug

    private void getFiles(String path, List<File> list) {
        File dir = new File(path);
        if (dir.isFile()) {
            list.add(dir);
        } else {// is folder
            File[] fileArr = dir.listFiles();
            for (File file : fileArr) {
                getFiles(file.getAbsolutePath(), list);
            }
        }
    }

对,上面的这段代码就是我写出来的bug。先说下该段代码的用意:传过来一个文件/目录路径,遍历下面的所有文件。

这段代码暴露出来的问题是,假如用户输入的是 [email protected]#/a/a8888% 这样的参数,此时,代码会执行到else里面,结果就报了空指针异常。

这里面就是犯了过分相信用户输入的错误,也属于程序的健壮性中的一种。

问题的部分先不多说了。由此,我却联想到了另外一个问题,到底该在何处去验证我们的输入。

看示例:

    private void function(){

        String para = getPara();
        fun1(para);
        fun2(para);
        fun3(para);
        ……
    }

像上面的这个示例一样,如果我们在每个方法里面都去验证数据的合法性,总觉得有些啰嗦重复,但是如果不验证,只在getpara方法里面验证,万一哪天需求变更,或者是方法修改,抑或是别的人调用fun1()的时候没有考虑到数据的有效性,就又会引发问题。

思来想去还是没有结果。最终就归结为具体问题具体对待吧(尼玛这也太不负责了吧)

ps:本人写博客不多,表达能力较差,轻喷

时间: 2024-08-03 00:56:30

今天发现了我写的一个bug的相关文章

发现一个骗粉丝的人后发现博客园的一个bug

发现一个骗粉丝的人后发现博客园的一个bug 当你点开这篇文章的时候,如果你已经登录博客园账号,那么你自动回成为我的博客园粉丝,因为我加了自动关注的js,这里并不是想骗粉丝,希望博客园能重视这个bug(当然博客园肯定知道这个bug的).明天早上我会删除掉这段js的. 起因>发现一个骗粉丝的人 经过>他是如何实现骗粉丝的 我的一些思考 1.发现一个骗粉丝的人 今天下班,打开博客园的时候看到这篇文章,点了进去,感觉排版不错,自定义的界面体验非常不错,职业性地点击了主页看了看,发现了一个问题,于是乎有

jQuery关于checkbox的一个bug

今做一个网页,实现一个很简单的功能:给出一个“全选”的复选框以及若干个受其控制的复选框,点击“全选”复选框可以全选或全取消其他的几个复选框.就这么一个简单的功能,却让我折腾了很久,最终发现竟然是jQuery的一个bug.废话少说,直接上代码. <input id="chkAll" type="checkbox" /> 全部 <input type="checkbox" name="chkgrpFlag" /&

zepto tap事件的一个bug

最近在使用zepto.js的时候,发现其tap事件的一个BUG,被产品和测试同学反复找了几次之后,终于下定决定去研究zepto的源码,并解决了问题. BUG情况说明: 给页面<a>标签绑定了tap事件,在移动设备上点击按钮貌似一切正常,可以正常响应. 但是,把页面上下滑动几次之后,或者在滑动时手指滑动出移动屏幕之外,之后再点击按钮,就会发现第一次点击的时候事件没被触发,需要点击第二次才会正常,而且几乎是必现的.一开始的时候我还以为是安卓Webview要获取页面焦点的原因,后来研究了下zepto

发现C++Builder 2010集合类的一个BUG

今天用C++Builder 2010写一段小代码,用到了集合类,可集合运算结果怎么也不对,排除了其它原因,最后确定应该是集合类源代码的问题,下面是一段集合类的测试代码: enum TTest{tt0, tt15 = 15, tt16 = 16}; typedef Set<TTest, tt0, tt16> TTests; void __fastcall TForm1::Button1Click(TObject *Sender) { TTests t1 = TTests() << t

偶然的错误发现一个bug,引人深思的null

今天测接口的时候 很偶然的发现一个bug,先交代下游戏接口游戏战斗时会发送uid和登录token回去,这时候会返回一个参数叫storykey发送uid,token,返回storykey,战斗结果加上storykey再发回去,这是一次战斗流程,storykey只能被使用一次.然后我写代码的时候不小心多加了个引号,导致uid多了个引号,这样token和uid就对不起来了,服务器提示token错误,然后再发战斗结果和storykey(这个时候为null)回去,竟然返回了正确的战斗结果,更可怕的是,这个

Ibatis2.3.4的一个bug

java.lang.ClassCastException: com.chat.upgrade.domain.ClientFile cannot be cast to java.lang.String 今天查一个对象转化成json串报错的问题,查了两个小时,最后问题的根源居然是ibatis. ibatis的语句如下: <typeAlias alias="Client" type="com.chat.upgrade.domain.ClientFile"/>

ubuntu12.04 software-center 的一个BUG

ubuntu software-center 软件中心今天突然发现打不开了,就是在启动的过程中启动一半就退出了,多次启动无果.首先想到的办法当然是最彻底的两句话 sudo apt-get purge software-center sudo apt-get install software-center 结果未果,启动起来还是首先一个窗体初始化 接着..就直接关闭了.然后查看它的输出信息,发现原来是py输出中文导致的,因为我们窗体上有很多中文字体的组件需要加载,而python处理的时候有一个使用

用WPF写了一个弹幕播放器

看弹幕视频的时候,如果不发弹幕,一个本地的弹幕播放器往往能带来更好的体验.目前已经有一些实现了,最初用过一个MukioPlayer, 后来又用过一个用C++写的BiliLocal,这个程序能自动下载弹幕,播放格式也非常宽泛,功能和性能基本上都没有什么值得挑剔的地方,感觉主要的一个Bug就是进度跳转的时候弹幕要消失一阵子(包括显示/隐藏弹幕的时候). 前段时间为学习WPF的动画的时候顺便做了一个本地的弹幕播放器练手,后来发现效果还不错,便将其完善了下,现在已经能基本可用了.虽然BiliLocal已

用opencv读取图像鼠标点的像素,更正一个Bug

作者:skyseraph 出处:http://www.cnblogs.com/skyseraph/ 以下代码在网上流传很广. 不过,调试运行之后发现,功能是正确的,但是内存很快就耗尽,导致死机.经过查找,加上: cvReleaseImage(&img1);    //释放源图像占用的内存 这一行是我(szliug)加的,否则内存很快就会耗尽,会死机的. 之后运行正常. /*===============================================// 功能:OpenCV Ut