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]
