fix BIO_read and BIO_write return 0

This commit is contained in:
zixun
2019-05-22 16:28:03 +08:00
committed by 云风
parent 194940822e
commit 2d6d2c75a4

View File

@@ -119,19 +119,20 @@ _bio_read(lua_State* L, struct tls_context* tls_p) {
if(pending >0) { if(pending >0) {
luaL_Buffer b; luaL_Buffer b;
luaL_buffinit(L, &b); luaL_buffinit(L, &b);
do { while(pending > 0) {
read = BIO_read(tls_p->out_bio, outbuff, sizeof(outbuff)); read = BIO_read(tls_p->out_bio, outbuff, sizeof(outbuff));
// printf("_bio_read:%d pending:%d\n", read, pending); // printf("BIO_read read:%d pending:%d\n", read, pending);
if(read > sizeof(outbuff)) { if(read <= 0) {
luaL_error(L, "invalid BIO_read:%d", read); luaL_error(L, "BIO_read error:%d", read);
}else if(read == -2) { }else if(read <= sizeof(outbuff)) {
luaL_error(L, "BIO_read not implemented in the specific BIO type");
}else if (read > 0) {
all_read += read; all_read += read;
luaL_addlstring(&b, (const char*)outbuff, read); luaL_addlstring(&b, (const char*)outbuff, read);
}else {
luaL_error(L, "invalid BIO_read:%d", read);
} }
}while(read == sizeof(outbuff)); pending = BIO_ctrl_pending(tls_p->out_bio);
if(all_read>0){ }
if(all_read>0) {
luaL_pushresult(&b); luaL_pushresult(&b);
} }
} }
@@ -145,13 +146,14 @@ _bio_write(lua_State* L, struct tls_context* tls_p, const char* s, size_t len) {
size_t sz = len; size_t sz = len;
while(sz > 0) { while(sz > 0) {
int written = BIO_write(tls_p->in_bio, p, sz); int written = BIO_write(tls_p->in_bio, p, sz);
if(written > sz) { // printf("BIO_write written:%d sz:%zu\n", written, sz);
luaL_error(L, "invalid BIO_write"); if(written <= 0) {
}else if(written > 0) { luaL_error(L, "BIO_write error:%d", written);
}else if (written <= sz) {
p += written; p += written;
sz -= written; sz -= written;
}else if (written == -2) { }else {
luaL_error(L, "BIO_write not implemented in the specific BIO type"); luaL_error(L, "invalid BIO_write:%d", written);
} }
} }
} }
@@ -224,7 +226,7 @@ _ltls_context_read(lua_State* L) {
}else if(read <= sizeof(outbuff)) { }else if(read <= sizeof(outbuff)) {
luaL_addlstring(&b, outbuff, read); luaL_addlstring(&b, outbuff, read);
}else { }else {
luaL_error(L, "invalid SSL_read"); luaL_error(L, "invalid SSL_read:%d", read);
} }
}while(true); }while(true);
luaL_pushresult(&b); luaL_pushresult(&b);
@@ -247,7 +249,7 @@ _ltls_context_write(lua_State* L) {
unencrypted_data += written; unencrypted_data += written;
slen -= written; slen -= written;
}else { }else {
luaL_error(L, "invalid SSL_write"); luaL_error(L, "invalid SSL_write:%d", written);
} }
} }