@@ -2970,14 +2970,13 @@ int wolfSSL_GetDhKey_Sz(WOLFSSL* ssl)
29702970#endif /* !NO_DH */
29712971
29722972
2973- WOLFSSL_ABI
2974- int wolfSSL_write(WOLFSSL* ssl, const void* data, int sz)
2973+ static int wolfSSL_write_internal(WOLFSSL* ssl, const void* data, size_t sz)
29752974{
29762975 int ret;
29772976
29782977 WOLFSSL_ENTER("wolfSSL_write");
29792978
2980- if (ssl == NULL || data == NULL || sz < 0 )
2979+ if (ssl == NULL || data == NULL)
29812980 return BAD_FUNC_ARG;
29822981
29832982#ifdef WOLFSSL_QUIC
@@ -3037,6 +3036,17 @@ int wolfSSL_write(WOLFSSL* ssl, const void* data, int sz)
30373036 return ret;
30383037}
30393038
3039+ WOLFSSL_ABI
3040+ int wolfSSL_write(WOLFSSL* ssl, const void* data, int sz)
3041+ {
3042+ WOLFSSL_ENTER("wolfSSL_write");
3043+
3044+ if (sz < 0)
3045+ return BAD_FUNC_ARG;
3046+
3047+ return wolfSSL_write_internal(ssl, data, (size_t)sz);
3048+ }
3049+
30403050int wolfSSL_inject(WOLFSSL* ssl, const void* data, int sz)
30413051{
30423052 int maxLength;
@@ -3074,15 +3084,15 @@ int wolfSSL_inject(WOLFSSL* ssl, const void* data, int sz)
30743084}
30753085
30763086
3077- int wolfSSL_write_ex(WOLFSSL* ssl, const void* data, int sz, size_t* wr)
3087+ int wolfSSL_write_ex(WOLFSSL* ssl, const void* data, size_t sz, size_t* wr)
30783088{
30793089 int ret;
30803090
30813091 if (wr != NULL) {
30823092 *wr = 0;
30833093 }
30843094
3085- ret = wolfSSL_write (ssl, data, sz);
3095+ ret = wolfSSL_write_internal (ssl, data, sz);
30863096 if (ret >= 0) {
30873097 if (wr != NULL) {
30883098 *wr = (size_t)ret;
@@ -3093,7 +3103,7 @@ int wolfSSL_write_ex(WOLFSSL* ssl, const void* data, int sz, size_t* wr)
30933103 if (ret == 0 && ssl->options.partialWrite) {
30943104 ret = 0;
30953105 }
3096- else if (ret < sz && !ssl->options.partialWrite) {
3106+ else if ((size_t) ret < sz && !ssl->options.partialWrite) {
30973107 ret = 0;
30983108 }
30993109 else {
@@ -3110,13 +3120,13 @@ int wolfSSL_write_ex(WOLFSSL* ssl, const void* data, int sz, size_t* wr)
31103120}
31113121
31123122
3113- static int wolfSSL_read_internal(WOLFSSL* ssl, void* data, int sz, int peek)
3123+ static int wolfSSL_read_internal(WOLFSSL* ssl, void* data, size_t sz, int peek)
31143124{
31153125 int ret;
31163126
31173127 WOLFSSL_ENTER("wolfSSL_read_internal");
31183128
3119- if (ssl == NULL || data == NULL || sz < 0 )
3129+ if (ssl == NULL || data == NULL)
31203130 return BAD_FUNC_ARG;
31213131
31223132#ifdef WOLFSSL_QUIC
@@ -3194,7 +3204,10 @@ int wolfSSL_peek(WOLFSSL* ssl, void* data, int sz)
31943204{
31953205 WOLFSSL_ENTER("wolfSSL_peek");
31963206
3197- return wolfSSL_read_internal(ssl, data, sz, TRUE);
3207+ if (sz < 0)
3208+ return BAD_FUNC_ARG;
3209+
3210+ return wolfSSL_read_internal(ssl, data, (size_t)sz, TRUE);
31983211}
31993212
32003213
@@ -3203,6 +3216,9 @@ int wolfSSL_read(WOLFSSL* ssl, void* data, int sz)
32033216{
32043217 WOLFSSL_ENTER("wolfSSL_read");
32053218
3219+ if (sz < 0)
3220+ return BAD_FUNC_ARG;
3221+
32063222 #ifdef OPENSSL_EXTRA
32073223 if (ssl == NULL) {
32083224 return BAD_FUNC_ARG;
@@ -3212,16 +3228,26 @@ int wolfSSL_read(WOLFSSL* ssl, void* data, int sz)
32123228 ssl->cbmode = WOLFSSL_CB_READ;
32133229 }
32143230 #endif
3215- return wolfSSL_read_internal(ssl, data, sz, FALSE);
3231+ return wolfSSL_read_internal(ssl, data, (size_t) sz, FALSE);
32163232}
32173233
32183234
32193235/* returns 0 on failure and on no read */
3220- int wolfSSL_read_ex(WOLFSSL* ssl, void* data, int sz, size_t* rd)
3236+ int wolfSSL_read_ex(WOLFSSL* ssl, void* data, size_t sz, size_t* rd)
32213237{
3222- int ret;
3238+ int ret;
3239+
3240+ #ifdef OPENSSL_EXTRA
3241+ if (ssl == NULL) {
3242+ return BAD_FUNC_ARG;
3243+ }
3244+ if (ssl->CBIS != NULL) {
3245+ ssl->CBIS(ssl, WOLFSSL_CB_READ, WOLFSSL_SUCCESS);
3246+ ssl->cbmode = WOLFSSL_CB_READ;
3247+ }
3248+ #endif
3249+ ret = wolfSSL_read_internal(ssl, data, sz, FALSE);
32233250
3224- ret = wolfSSL_read(ssl, data, sz);
32253251 if (ret > 0 && rd != NULL) {
32263252 *rd = (size_t)ret;
32273253 }
@@ -3238,10 +3264,10 @@ int wolfSSL_mcast_read(WOLFSSL* ssl, word16* id, void* data, int sz)
32383264
32393265 WOLFSSL_ENTER("wolfSSL_mcast_read");
32403266
3241- if (ssl == NULL)
3267+ if (( ssl == NULL) || (sz < 0) )
32423268 return BAD_FUNC_ARG;
32433269
3244- ret = wolfSSL_read_internal(ssl, data, sz, FALSE);
3270+ ret = wolfSSL_read_internal(ssl, data, (size_t) sz, FALSE);
32453271 if (ssl->options.dtls && ssl->options.haveMcast && id != NULL)
32463272 *id = ssl->keys.curPeerId;
32473273 return ret;
@@ -11302,19 +11328,19 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
1130211328 #endif
1130311329 byte* myBuffer = staticBuffer;
1130411330 int dynamic = 0;
11305- int sending = 0;
11331+ word32 sending = 0;
1130611332 int idx = 0;
1130711333 int i;
1130811334 int ret;
1130911335
1131011336 WOLFSSL_ENTER("wolfSSL_writev");
1131111337
1131211338 for (i = 0; i < iovcnt; i++)
11313- sending += (int) iov[i].iov_len;
11339+ sending += iov[i].iov_len;
1131411340
11315- if (sending > (int) sizeof(staticBuffer)) {
11316- myBuffer = (byte*)XMALLOC((size_t) sending, ssl->heap,
11317- DYNAMIC_TYPE_WRITEV);
11341+ if (sending > sizeof(staticBuffer)) {
11342+ myBuffer = (byte*)XMALLOC(sending, ssl->heap,
11343+ DYNAMIC_TYPE_WRITEV);
1131811344 if (!myBuffer)
1131911345 return MEMORY_ERROR;
1132011346
@@ -11331,7 +11357,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
1133111357 */
1133211358 PRAGMA_GCC_DIAG_PUSH
1133311359 PRAGMA_GCC("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
11334- ret = wolfSSL_write (ssl, myBuffer, sending);
11360+ ret = wolfSSL_write_internal (ssl, myBuffer, sending);
1133511361 PRAGMA_GCC_DIAG_POP
1133611362
1133711363 if (dynamic)
0 commit comments