From cf0e7f88099b6e458e89e3b3996a188f2d4db2ea Mon Sep 17 00:00:00 2001
From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr>
Date: Mon, 30 Mar 2020 21:16:13 +0200
Subject: [PATCH] protect SclUtilities.getAnyLN() against NPE

---
 .../edf/riseclipse/iec61850/scl/util/SclUtilities.java      | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/util/SclUtilities.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/util/SclUtilities.java
index d3362b1..b1535d6 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.scl/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/util/SclUtilities.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/util/SclUtilities.java
@@ -21,6 +21,7 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.scl.util;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.tuple.Pair;
@@ -127,11 +128,14 @@ public class SclUtilities {
         if( "LLN0".equals( lnClass )) {
             return Pair.of( lDevice.getLN0(), ( lDevice.getLN0() == null ) ? 0 : 1  );
         }
+        // Null checks must be done as annotation-based null analysis is not enabled (issue #64)
+        if( lnClass == null ) return Pair.of( null, 0 );
+        if( lnInst == null )  return Pair.of( null, 0 );
         List< LN > res =
                 lDevice
                 .getLN()
                 .stream()
-                .filter( ln ->  lnClass.equals( ln.getLnClass() ) && lnInst.equals( ln.getInst() ) && prefix.equals( ln.getPrefix() ))
+                .filter( ln -> lnClass.equals( ln.getLnClass() ) && lnInst.equals( ln.getInst() ) && Objects.equals( prefix, ln.getPrefix() ))
                 .collect( Collectors.toList() );
         if( res.size() != 1 ) {
             return Pair.of( null, res.size() );
-- 
GitLab