Commit 2a07ee72 authored by unknown's avatar unknown

Bug#19191 Repeated crashes on OpenBSD for ssl test cases

 - Import patch from yaSSL


extra/yassl/src/handshake.cpp:
  Import patch yassl.diff
extra/yassl/src/socket_wrapper.cpp:
  Import patch yassl.diff
parent 9aed96ce
...@@ -880,7 +880,7 @@ int sendData(SSL& ssl, const void* buffer, int sz) ...@@ -880,7 +880,7 @@ int sendData(SSL& ssl, const void* buffer, int sz)
ssl.SetError(no_error); ssl.SetError(no_error);
ssl.verfiyHandShakeComplete(); ssl.verfiyHandShakeComplete();
if (ssl.GetError()) return 0; if (ssl.GetError()) return -1;
int sent = 0; int sent = 0;
for (;;) { for (;;) {
...@@ -891,7 +891,7 @@ int sendData(SSL& ssl, const void* buffer, int sz) ...@@ -891,7 +891,7 @@ int sendData(SSL& ssl, const void* buffer, int sz)
buildMessage(ssl, out, data); buildMessage(ssl, out, data);
ssl.Send(out.get_buffer(), out.get_size()); ssl.Send(out.get_buffer(), out.get_size());
if (ssl.GetError()) return 0; if (ssl.GetError()) return -1;
sent += len; sent += len;
if (sent == sz) break; if (sent == sz) break;
} }
...@@ -918,14 +918,14 @@ int receiveData(SSL& ssl, Data& data) ...@@ -918,14 +918,14 @@ int receiveData(SSL& ssl, Data& data)
ssl.SetError(no_error); ssl.SetError(no_error);
ssl.verfiyHandShakeComplete(); ssl.verfiyHandShakeComplete();
if (ssl.GetError()) return 0; if (ssl.GetError()) return -1;
if (!ssl.bufferedData()) if (!ssl.bufferedData())
processReply(ssl); processReply(ssl);
ssl.fillData(data); ssl.fillData(data);
ssl.useLog().ShowData(data.get_length()); ssl.useLog().ShowData(data.get_length());
if (ssl.GetError()) return 0; if (ssl.GetError()) return -1;
if (data.get_length() == 0 && ssl.getSocket().WouldBlock()) { if (data.get_length() == 0 && ssl.getSocket().WouldBlock()) {
ssl.SetError(YasslError(SSL_ERROR_WANT_READ)); ssl.SetError(YasslError(SSL_ERROR_WANT_READ));
......
...@@ -113,13 +113,22 @@ uint Socket::get_ready() const ...@@ -113,13 +113,22 @@ uint Socket::get_ready() const
uint Socket::send(const byte* buf, unsigned int sz, int flags) const uint Socket::send(const byte* buf, unsigned int sz, int flags) const
{ {
const byte* pos = buf;
const byte* end = pos + sz;
assert(socket_ != INVALID_SOCKET); assert(socket_ != INVALID_SOCKET);
int sent = ::send(socket_, reinterpret_cast<const char *>(buf), sz, flags);
while (pos != end) {
int sent = ::send(socket_, reinterpret_cast<const char *>(pos),
static_cast<int>(end - pos), flags);
if (sent == -1) if (sent == -1)
return 0; return 0;
return sent; pos += sent;
}
return sz;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment