2011-07-27 14 views
6

コードレビューツールの可能性ヌルポインタ参照のための修正は、ラインでsaveSafeScan(...)にsafeScanWarningsの可能なヌルポインタ参照を不平を言っている場合(safeScanWarnings!= NULL & safeScanWarnings.size()> 0 )説明と

これはどのように可能ですか?私たちはコレクションを参考に戻しているからですか?

protected void saveSafeScan(final Response response, final Dtec dtec) throws dtecException 
    { 
     Collection<String> safeScanWarnings = dtec.getSafeScanWarnings(); 
     if (safeScanWarnings!=null && safeScanWarnings.size()>0) 
     { 
      Iterator<String> iterator = safeScanWarnings.iterator(); 

      int i = 0; 
      while (iterator.hasNext()) 
      { 
       String safeScanCode = iterator.next(); 
       if (i == 0) 
       { 
        response.setSafeScanCode(safeScanCode); 
        response.setSafeScanCodeText(getMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s", 
          StringUtils.trimToEmpty(safeScanCode)))); 
       } 
       SafeScanWarning safeScan = new SafeScanWarning(); 
       safeScan.setCode(safeScanCode); 
       safeScan.setMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s", StringUtils.trimToEmpty(safeScanCode))); 
       safeScan.setPriority(i); 
       response.getSafeScanWarnings().add(safeScan); 
       i++; 
      } 
     } 
    } 
+5

あなたの例では、コードがある場合は、あなたのエラーで正しいですが、 '&'なし '&&'。したがって、実際のコードではショートサーキット評価であることを確認してください。それがすでにそうであれば、それはツールのバグです。 – Voo

+0

注意:コードサンプルの上のあなたのコメントは 'if(safeScanWarnings!= null&safeScanWarnings.size()> 0)'です。 – MeBigFatGuy

答えて

10

実際にその行を指している場合は、コードレビューツールのバグのようです。

ローカル変数であるため、無効チェックとsize()コールの間で変更されることはありません。したがって、NullPointerExceptionを送信する方法はありません。

0

実行されるとnullの値が参照解除されることが保証されており、コード実行時にNullPointerExceptionが生成されることがあります。もちろん、ブランチやステートメントが実行不可能であり、NullPointerExceptionがスローされないことが問題です。それがFindBugsの能力を超えていると判断します。

0

属性「DTECは」securisedする必要があります。

if (null!=dtec && null!=safeScanWarnings && safeScanWarnings.size()>0) 
    { 
     Collection<String> safeScanWarnings = dtec.getSafeScanWarnings();