BufferedReader Null Dereference

时间:2014-03-17 10:03:26

标签: java xss stringbuffer notnull

当我在下面的代码上进行XSS验证时,while((anInt=bufferedReader.read())!=-1)行发出Null Dereference问题。为此,这足以检查非null或我们是否有任何其他检查或解决方案来解决此问题。

BufferedReader bufferedReader = null;
    try {
        bufferedReader = new BufferedReader(new FileReader(new File (url.toURI())));
    } catch (Exception e) {
        e.printStackTrace();
    }

    response.setContentType("text/plain");
    try{
        int anInt=0;
        //if(!bufferedReader.equals(null)){
            while((anInt=bufferedReader.read())!=-1)
                response.getWriter().write(anInt);
        //}
    } catch(IOException ioe) { }
    return null;

评论if条件..

4 个答案:

答案 0 :(得分:3)

  

我收到Null Dereference问题

不,你不是。没有这样的问题'。你得到的是NullPointerException.请准确。在解释错误消息时没有任何美德,或者没有正确阅读它们,或者导致您出现此错误的任何内容。

这里的表面上的错误是使用bufferedReader.equals()作为测试来查看bufferedReader是否null.一时的想法会让你相信这样做是徒劳的。如果它为null,那么如何调用equals()就能成功?

此处的原始错误是错误的结构化异常处理。您有catch块后面的代码依赖于try块的成功。因此,它应该 try块内。然后你会注意到你只需要一个catch块......但是请在里面放一些东西,比如exc.printStackTrace():,否则调试就变成了猜测游戏。

答案 1 :(得分:2)

除了EJP指出的错误异常处理(以及你令人震惊的释义......)之外,你的代码总是返回null。这似乎毫无意义。


但真正的问题实际上是由于您的异常处理导致造成

首先:

BufferedReader bufferedReader = null;
try {
    bufferedReader = new BufferedReader(
            new FileReader(new File (url.toURI())));
} catch (Exception e) {
    e.printStackTrace();
}

如果文件打开失败,则会捕获异常AND CONTINUE。那是你的第一个错误。你不应该在那里发现异常,因为你还没有准备好在那里处理它。

接下来:

if (!bufferedReader.equals(null)) {

我希望假定以防止bufferedReader成为null。但实际上,如果bufferedReadernull,则会导致抛出NPE ...因为您将尝试调用方法({{1} })在null目标对象上。

如果您想测试equalsbufferedReader,您应该像这样编码:

null

但如果您此时没有尝试处理上一个异常,那么根本不会需要来测试if (bufferedReader != null) { ...


  

确定。我正在删除.equals条件

叹息。停止攻击代码并尝试理解答案

在不解决第一个问题的情况下删除测试只是移动将要抛出NPE的地方。

答案 2 :(得分:0)

bufferedReader.equals(null)应该NullPointerException检查bufferedReader是否为空,您可以执行bufferedReader != null

答案 3 :(得分:-1)

bufferedReader可能会抛出EoFException,你必须处理它!