@@ -342,18 +342,31 @@ didReadIntoBuffer: (char*)buffer length: (size_t)length exception: (OFException*)exception { if (exception != nil) { + [delegates broadcastSelector: @selector(connection: + didThrowException::) + withObject: self + withObject: exception]; + [self close]; + return NO; + } + + @try { + if (![self XMPP_parseBuffer: buffer + length: length]) + return NO; + } @catch (id e) { + [delegates broadcastSelector: @selector(connection: + didThrowException::) + withObject: self + withObject: e]; [self close]; return NO; } - if (![self XMPP_parseBuffer: buffer - length: length]) - return NO; - if (oldParser != nil || oldElementBuilder != nil) { [oldParser release]; [oldElementBuilder release]; oldParser = nil;