0

以下のコードで XSS 検証を行うと、この行で問題while((anInt=bufferedReader.read())!=-1)が発生します。Null Dereferencenull でないことを確認するにはこれで十分です。または、これを解決するための他の確認または解決策はありますか。

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()。それが null の場合、それを呼び出すとどのように成功するのでしょうか?bufferedReadernull.equals()

ここでの元のエラーは、構造化されていない例外処理でした。catchブロックの後に、ブロックの成功に依存するコードがありtryます。したがって、ブロックにある必要があります。tryすると、必要なcatchブロックは 1 つだけであることがわかりますが、その中に何かを入れてください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)) {

これは、 であることを防ぐためのものだ思います。しかし実際には、 が の場合、によってNPE がスローされます。これは、null ターゲット オブジェクトで メソッド ( ) を呼び出そうとするためです。bufferedReadernullbufferedReadernullequals

であるかどうかをテストする場合bufferedReadernull、次のようにコーディングする必要があります。

if (bufferedReader != null) {

しかし、その時点で前の例外を処理しようとしていなければ、まったくテストする必要はありません...null


わかった。私はその.equals条件を削除しています

はぁ。コードのハッキングをやめて、 Answersを理解しようとします。

最初の問題を修正せずにテストを削除すると、NPE がスローされる場所が移動するだけです。

于 2014-03-17T10:09:25.367 に答える
0

bufferedReader.equals(null)をスローして、null か NullPointerExceptionどうかを確認する必要があります。bufferedReaderbufferedReader != null

于 2014-03-17T10:11:32.210 に答える