0

当我对下面的代码进行 XSS 验证时,我while((anInt=bufferedReader.read())!=-1)遇到了问题。Null Dereference因为这足以检查 not 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

4 回答 4

3

我遇到Null Dereference问题

不你不是。没有这样的“问题”。你得到的是一个NullPointerException.请准确。解释错误消息,或者没有正确阅读它们,或者导致你这个错误的任何原因,都没有任何优点。

这里表面上的错误是bufferedReader.equals()用来作为一个测试,看看是否bufferedReadernull.片刻的想法应该说服你这样做是徒劳的。如果它为空,那么调用equals()它怎么会成功?

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

于 2014-03-17T10:05:26.043 回答
2

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


但真正的问题实际上由您糟糕的异常处理引起的。

首先这个:

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

如果文件打开失败,您将捕获异常并继续。那是你的第一个错误。你不应该在那里捕获异常,因为你还没有准备好在那里处理它。

接下来这个:

if (!bufferedReader.equals(null)) {

我希望这应该是为了防止bufferedReader存在null。但实际上,如果bufferedReaderis null,那么 将导致NPE 被抛出......因为您将尝试equals在空目标对象上调用方法 ()。

如果你想测试 if bufferedReaderis null,你应该这样编码:

if (bufferedReader != null) {

但是,如果您当时没有尝试处理先前的异常,则根本不需要测试...null


好的。我正在删除 .equals 条件

叹。停止破解代码并尝试理解答案

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

于 2014-03-17T10:09:25.367 回答
0

bufferedReader.equals(null)应该抛出一个NullPointerException来检查是否bufferedReader为空,你可以这样做 bufferedReader != null

于 2014-03-17T10:11:32.210 回答
-1

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

于 2014-03-17T10:17:25.983 回答