From fddf65730d4796f2d46c6487df9dfe6c6181802a Mon Sep 17 00:00:00 2001
From: gpotter2 <gabriel@potter.fr>
Date: Thu, 23 Mar 2017 21:35:03 +0100
Subject: [PATCH] Fix automaton tests

---
 scapy/automaton.py | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/scapy/automaton.py b/scapy/automaton.py
index 69b28324..b39e08b3 100644
--- a/scapy/automaton.py
+++ b/scapy/automaton.py
@@ -26,14 +26,14 @@ class ObjectPipe:
     def fileno(self):
         return self.rd
     def checkRecv(self):
-        return len(self.queue) != 0
+        return len(self.queue) > 0
     def send(self, obj):
         self.queue.append(obj)
         os.write(self.wr,"X")
     def write(self, obj):
         self.send(obj)
     def recv(self, n=0):
-        os.read(self.rd,1)
+        os.read(self.rd, 1)
         return self.queue.popleft()
     def read(self, n=0):
         return self.recv(n)
@@ -53,7 +53,6 @@ class _instance_state:
         self.im_class = instance.im_class
     def __getattr__(self, attr):
         return getattr(self.im_func, attr)
-
     def __call__(self, *args, **kargs):
         return self.im_func(self.im_self, *args, **kargs)
     def breaks(self):
@@ -328,15 +327,20 @@ class Automaton_metaclass(type):
 def select_objects(inputs, remain):
     if WINDOWS:
         r = []
+        def look_for_select():
+            for fd in inputs:
+                if isinstance(fd, ObjectPipe) or isinstance(fd, Automaton._IO_fdwrapper):
+                    if fd.checkRecv():
+                        r.append(fd)
+                else:
+                    raise OSError("Not supported type of socket:" + str(type(fd)))
+                    break
         def search_select():
             while len(r) == 0:
-                for fd in inputs:
-                    if isinstance(fd, ObjectPipe) or isinstance(fd, Automaton._IO_fdwrapper):
-                        if fd.checkRecv():
-                            r.append(fd)
-                    else:
-                        raise OSError("Not supported type of socket:" + str(type(fd)))
-                        break
+                look_for_select()
+        if remain == 0:
+            look_for_select()
+            return r
         t_select = threading.Thread(target=search_select)
         t_select.start()
         t_select.join(remain)
@@ -750,7 +754,7 @@ class Automaton:
         with self.started:
             # Flush command pipes
             while True:
-                r = select_objects([self.cmdin, self.cmdout],0)
+                r = select_objects([self.cmdin, self.cmdout], 0)
                 if not r:
                     break
                 for fd in r:
-- 
GitLab