Repository: qpid-proton
Updated Branches:
  refs/heads/master 5f06462f3 -> fe3290be1


reproducer and fix for sasl infinite event loop


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/fe3290be
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/fe3290be
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/fe3290be

Branch: refs/heads/master
Commit: fe3290be1d12b6f3731333fc35311ffde37d4ce0
Parents: 5f06462
Author: Rafael Schloming <[email protected]>
Authored: Wed Apr 29 11:48:51 2015 -0400
Committer: Rafael Schloming <[email protected]>
Committed: Wed Apr 29 14:21:44 2015 -0400

----------------------------------------------------------------------
 proton-c/src/sasl/cyrus_sasl.c      |  6 +++++-
 tests/python/proton_tests/engine.py | 21 +++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/fe3290be/proton-c/src/sasl/cyrus_sasl.c
----------------------------------------------------------------------
diff --git a/proton-c/src/sasl/cyrus_sasl.c b/proton-c/src/sasl/cyrus_sasl.c
index 8738507..58d6c9b 100644
--- a/proton-c/src/sasl/cyrus_sasl.c
+++ b/proton-c/src/sasl/cyrus_sasl.c
@@ -241,6 +241,7 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
     case SASL_POSTED_INIT:
       pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[sz]", SASL_INIT, 
sasl->selected_mechanism,
                     out.size, out.start);
+      pni_emit(transport);
       break;
     case SASL_PRETEND_OUTCOME:
       if (sasl->last_state < SASL_POSTED_INIT) {
@@ -267,10 +268,12 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
       }
       pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[@T[*s]]", 
SASL_MECHANISMS, PN_SYMBOL, count, mechs);
       free(mechlist);
+      pni_emit(transport);
       break;
     }
     case SASL_POSTED_RESPONSE:
       pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[z]", SASL_RESPONSE, 
out.size, out.start);
+      pni_emit(transport);
       break;
     case SASL_POSTED_CHALLENGE:
       if (sasl->last_state < SASL_POSTED_MECHANISMS) {
@@ -278,6 +281,7 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
         continue;
       }
       pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[z]", SASL_CHALLENGE, 
out.size, out.start);
+      pni_emit(transport);
       break;
     case SASL_POSTED_OUTCOME:
       if (sasl->last_state < SASL_POSTED_MECHANISMS) {
@@ -285,6 +289,7 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
         continue;
       }
       pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[B]", SASL_OUTCOME, 
sasl->outcome);
+      pni_emit(transport);
       break;
     case SASL_NONE:
     case SASL_RECVED_OUTCOME:
@@ -293,7 +298,6 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
     sasl->last_state = desired_state;
     desired_state = sasl->desired_state;
   }
-  pni_emit(transport);
 }
 
 // Set up callbacks to use interact

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/fe3290be/tests/python/proton_tests/engine.py
----------------------------------------------------------------------
diff --git a/tests/python/proton_tests/engine.py 
b/tests/python/proton_tests/engine.py
index 3944b85..2d2b8cd 100644
--- a/tests/python/proton_tests/engine.py
+++ b/tests/python/proton_tests/engine.py
@@ -2465,3 +2465,24 @@ class DeliverySegFaultTest(Test):
     t.bind(conn)
     t.unbind()
     dlv = snd.delivery("tag")
+
+class SaslEventTest(CollectorTest):
+
+  def testAnonymousNoInitialResponse(self):
+    if "java" in sys.platform:
+      raise Skipped()
+    conn = Connection()
+    conn.collect(self.collector)
+    transport = Transport(Transport.SERVER)
+    transport.bind(conn)
+    self.expect(Event.CONNECTION_INIT, Event.CONNECTION_BOUND)
+
+    transport.push('AMQP\x03\x01\x00\x00\x00\x00\x00 \x02\x01\x00\x00\x00SA'
+                   '\xd0\x00\x00\x00\x10\x00\x00\x00\x02\xa3\tANONYMOUS@'
+                   'AMQP\x00\x01\x00\x00')
+    self.expect(Event.TRANSPORT)
+    for i in range(1024):
+      p = transport.pending()
+      self.drain()
+    p = transport.pending()
+    self.expect()


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to