From 87142c65359163e978f613f1b6cf969d8a40a925 Mon Sep 17 00:00:00 2001 From: Richard Frith-MacDonald Date: Sun, 8 Mar 2015 09:22:11 +0000 Subject: [PATCH] Fix looping session startup git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@38386 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 7 +++++++ Source/NSFileHandle.m | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0007c4e8b..97a87b34e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-03-08 Richard Frith-Macdonald + + * Source/NSFileHandle.m: ([-sslHandshakeEstablished:outgoing:]) + If we can't create a session, the handshake should fail rather + than being retried. Fix infinite loop establish session on closed + handle. + 2015-02-28 Richard Frith-Macdonald * Headers/GNUstepBase/NSDebug+GNUstepBase.h: diff --git a/Source/NSFileHandle.m b/Source/NSFileHandle.m index b8293dfd1..53bd1f78d 100644 --- a/Source/NSFileHandle.m +++ b/Source/NSFileHandle.m @@ -1001,12 +1001,14 @@ GSTLSHandlePush(gnutls_transport_ptr_t handle, const void *buffer, size_t len) if (YES == [session active]) { + *result = YES; return YES; /* Already connected. */ } if (YES == isStandardFile) { NSLog(@"Attempt to perform ssl handshake with a standard file"); + *result = NO; return YES; } @@ -1046,6 +1048,11 @@ GSTLSHandlePush(gnutls_transport_ptr_t handle, const void *buffer, size_t len) if (NO == [session handshake]) { + *result = NO; + if (nil == session) + { + return YES; // Unable to create session + } return NO; // Need more. } else