From 3b95c723b71d2e7103c59efa86d664ebb334407b Mon Sep 17 00:00:00 2001
From: Fred Gleason <fredg@paravelsystems.com>
Date: Tue, 27 Aug 2019 18:20:36 -0400
Subject: [PATCH] 2019-08-26 Fred Gleason <fredg@paravelsystems.com> 	*
 Fixed a bug in the 'pypad_spottrap.py' PyPAD script that caused 	an
 infinite loop.

---
 ChangeLog                            |  3 +++
 apis/pypad/scripts/pypad_spottrap.py | 29 ++++++++++++++--------------
 2 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e2503568..8d1a9d08 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -19003,3 +19003,6 @@
 2019-08-26 Fred Gleason <fredg@paravelsystems.com>
 	* Fixed a bug in the 'pypad_spinitron.py' PyPAD script that caused
 	an infinite loop.
+2019-08-26 Fred Gleason <fredg@paravelsystems.com>
+	* Fixed a bug in the 'pypad_spottrap.py' PyPAD script that caused
+	an infinite loop.
diff --git a/apis/pypad/scripts/pypad_spottrap.py b/apis/pypad/scripts/pypad_spottrap.py
index d8331848..fee63eda 100755
--- a/apis/pypad/scripts/pypad_spottrap.py
+++ b/apis/pypad/scripts/pypad_spottrap.py
@@ -4,7 +4,7 @@
 #
 # Output Now & Next data on the basis of Group and Length.
 #
-#   (C) Copyright 2018 Fred Gleason <fredg@paravelsystems.com>
+#   (C) Copyright 2018-2019 Fred Gleason <fredg@paravelsystems.com>
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License version 2 as
@@ -38,21 +38,20 @@ def ProcessPad(update):
         last_updates[update.machine()]=None
 
     n=1
-    while(True):
+    section='Rule'+str(n)
+    while(update.config().has_section(section)):
+        if update.shouldBeProcessed(section) and update.hasPadType(pypad.TYPE_NOW) and (last_updates[update.machine()] != update.startDateTimeString(pypad.TYPE_NOW)):
+            last_updates[update.machine()]=update.startDateTimeString(pypad.TYPE_NOW)
+            length=update.padField(pypad.TYPE_NOW,pypad.FIELD_LENGTH)
+            if update.padField(pypad.TYPE_NOW,pypad.FIELD_GROUP_NAME)==update.config().get(section,'GroupName') and length>=int(update.config().get(section,'MinimumLength')) and length<=int(update.config().get(section,'MaximumLength')):
+                msg=update.resolvePadFields(update.config().get(section,'FormatString'),pypad.ESCAPE_NONE)
+            else:
+                msg=update.resolvePadFields(update.config().get(section,'DefaultFormatString'),pypad.ESCAPE_NONE)
+            send_sock.sendto(msg.encode('utf-8'),
+                             (update.config().get(section,'IpAddress'),int(update.config().get(section,'UdpPort'))))
+        n=n+1
         section='Rule'+str(n)
-        try:
-            if update.shouldBeProcessed(section) and update.hasPadType(pypad.TYPE_NOW) and (last_updates[update.machine()] != update.startDateTimeString(pypad.TYPE_NOW)):
-                last_updates[update.machine()]=update.startDateTimeString(pypad.TYPE_NOW)
-                length=update.padField(pypad.TYPE_NOW,pypad.FIELD_LENGTH)
-                if update.padField(pypad.TYPE_NOW,pypad.FIELD_GROUP_NAME)==update.config().get(section,'GroupName') and length>=int(update.config().get(section,'MinimumLength')) and length<=int(update.config().get(section,'MaximumLength')):
-                    msg=update.resolvePadFields(update.config().get(section,'FormatString'),pypad.ESCAPE_NONE)
-                else:
-                    msg=update.resolvePadFields(update.config().get(section,'DefaultFormatString'),pypad.ESCAPE_NONE)
-                send_sock.sendto(msg.encode('utf-8'),
-                                 (update.config().get(section,'IpAddress'),int(update.config().get(section,'UdpPort'))))
-            n=n+1
-        except configparser.NoSectionError:
-            return
+
 
 #
 # 'Main' function