7
votes

Explication et correction pour une éventuelle déréférence du pointeur nulle de

L'outil de révision de code est plaint Pointeur NULL possible Déréférence de SAFESCANWarnings dans Savesafescan (...) em> à la ligne si (SafesScanWarnings! = Null & Safescanwarnings.Size ()> 0)

Je me demande comment est-ce possible? Est-ce parce que nous retournons la collection par référence? P>

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++;
            }
        }
    }


2 commentaires

Dans votre exemple, le code est correct dans votre erreur, le cas échéant est un & et non && . Assurez-vous donc que dans le code réel, c'est l'évaluation de courte durée. Si c'est déjà le cas, c'est un bogue dans l'outil.


Remarquez votre commentaire au-dessus de l'échantillon de code, c'est si (SafesScanWarnings! = NULL & SADRESCANWARNINGS.SIZE ()> 0) Ce qui est faux (buggy)


3 Réponses :


11
votes

Si cela pointe vraiment sur cette ligne, cela ressemble à un bogue dans l'outil de révision du code pour moi.

Comme il s'agit d'une variable locale, il n'y a aucune chance que cela ne soit changé de quoi que ce soit d'autre entre la vérification de la nullité et la taille () appel - donc il n'y a aucun moyen qu'il va jeter un NullpointException .


0 commentaires

0
votes

Il existe une branche de déclaration que, si elle est exécutée, garantit qu'un null sera déréférencé, ce qui générerait un nullpointexception lorsque le code est exécuté. Bien sûr, le problème peut être que la branche ou la déclaration est infaisable et que le nullpointException ne peut jamais être lancé. Décider qui dépasse la capacité de Findbugs .


0 commentaires

0
votes

Attribut "DTEC" doit être sécurisé:

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


0 commentaires