From 8aeca5b433b74a0ea7f0c43a0e5050b833034837 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 24 Jul 2013 14:24:29 +0000
Subject: [PATCH] catch NPE in main when no state table available

---
 router/java/src/net/i2p/router/transport/UPnP.java | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java
index 7030ffcad8..9d38230e1e 100644
--- a/router/java/src/net/i2p/router/transport/UPnP.java
+++ b/router/java/src/net/i2p/router/transport/UPnP.java
@@ -394,7 +394,15 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 	
 	/** debug only */
 	private static void listStateTable(Service serv, StringBuilder sb) {
-		ServiceStateTable table = serv.getServiceStateTable();
+		ServiceStateTable table;
+		try {
+			table = serv.getServiceStateTable();
+		} catch (Exception e) {
+			// getSCPDNode() returns null,
+			// NPE at org.cybergarage.upnp.Service.getServiceStateTable(Service.java:526)
+			sb.append(" : no state");
+			return;
+		}
 		sb.append("<ul><small>");
 		for(int i=0; i<table.size(); i++) {
 			StateVariable current = table.getStateVariable(i);
@@ -928,7 +936,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 		I2PAppContext ctx = new I2PAppContext(props);
 		UPnP upnp = new UPnP(ctx);
 		ControlPoint cp = new ControlPoint();
-		System.out.println("Searching for up&p devices:");
+		System.out.println("Searching for UPnP devices:");
 		cp.start();
 		cp.search();
 		Thread.sleep(10000);
-- 
GitLab