2011-07-27 6 views
6
herramienta de revisión de código

se queja Posible referencia a un puntero nulo de safeScanWarnings en saveSafeScan (...) En la línea desi (safeScanWarnings! = Null & safeScanWarnings.size()> 0)y fijar para una posible referencia a un puntero nulo de

me pregunto cómo es esto posible? ¿Esto es porque estamos devolviendo la colección por referencia?

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

Mientras que en su ejemplo el código es correcto en su error, el si tiene un '&' 'y no' &&. Así que asegúrese de que en el código real es la evaluación de cortocircuito. Si ese es el caso, es un error en la herramienta. – Voo

+0

nota que su comentario sobre el ejemplo de código es 'si (safeScanWarnings! = Null y safeScanWarnings.size()> 0) 'que es incorrecto (con errores) – MeBigFatGuy

Respuesta

10

Si realmente está apuntando a esa línea, parece un error en la herramienta de revisión de código para mí.

Como es una variable local, no hay posibilidad de que la cambie entre la comprobación de nulidad y la llamada size(), por lo que no hay manera de que arroje un NullPointerException.

0

Existe una rama de extracto que, si se ejecuta, garantiza que se eliminará la referencia de un valor null, lo que generaría un NullPointerException cuando se ejecuta el código. Por supuesto, el problema podría ser que la rama o la declaración no es factible y que el NullPointerException no puede ser lanzado. Decidir que está más allá de la capacidad de FindBugs.

0

Atributo "DTEC" debe Securisado:

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