#include "ssl_locl.h"
static int ssl_write(BIO *h, const char *buf, int num);
-static int ssl_read(BIO *h, char *buf, int size);
+static int ssl_read(BIO *b, char *out, size_t outl, size_t *read);
static int ssl_puts(BIO *h, const char *str);
static long ssl_ctrl(BIO *h, int cmd, long arg1, void *arg2);
static int ssl_new(BIO *h);
BIO_TYPE_SSL, "ssl",
ssl_write,
ssl_read,
+ NULL,
ssl_puts,
NULL, /* ssl_gets, */
ssl_ctrl,
return 1;
}
-static int ssl_read(BIO *b, char *out, int outl)
+static int ssl_read(BIO *b, char *out, size_t outl, size_t *read)
{
int ret = 1;
BIO_SSL *sb;
BIO_clear_retry_flags(b);
+ if (outl > INT_MAX)
+ return -1;
+
ret = SSL_read(ssl, out, outl);
switch (SSL_get_error(ssl, ret)) {
}
BIO_set_retry_reason(b, retry_reason);
- return (ret);
+
+ if (ret < 0)
+ return ret;
+
+ *read = (size_t)ret;
+
+ return 1;
}
static int ssl_write(BIO *b, const char *out, int outl)