@@ -26304,20 +26304,20 @@ int SendData(WOLFSSL* ssl, const void* data, size_t sz)
2630426304
2630526305 if (sent == (word32)sz) break;
2630626306
26307- buffSz = (word32)sz - sent;
26308- {
26309- int maxFrag = wolfSSL_GetMaxFragSize(ssl );
26310- if (maxFrag > 0 && (int)buffSz > maxFrag)
26311- buffSz = (word32)maxFrag ;
26307+ buffSz = (int)(( word32)sz - sent) ;
26308+ if (buffSz <= 0) {
26309+ WOLFSSL_MSG("error: sent size exceeds input size" );
26310+ ssl->error = BAD_FUNC_ARG;
26311+ return WOLFSSL_FATAL_ERROR ;
2631226312 }
26313- outputSz = wolfssl_local_GetRecordSize(ssl, (word32)buffSz, 1);
2631426313#if defined(WOLFSSL_DTLS)
2631526314 if (ssl->options.dtls) {
2631626315#if defined(WOLFSSL_DTLS_MTU)
2631726316 int mtu = ssl->dtlsMtuSz;
2631826317#else
2631926318 int mtu = MAX_MTU;
2632026319#endif
26320+ outputSz = wolfssl_local_GetRecordSize(ssl, (word32)buffSz, 1);
2632126321 if (outputSz > mtu) {
2632226322#if defined(WOLFSSL_NO_DTLS_SIZE_CHECK)
2632326323 /* split instead of error out */
@@ -26331,7 +26331,14 @@ int SendData(WOLFSSL* ssl, const void* data, size_t sz)
2633126331#endif /* WOLFSSL_NO_DTLS_SIZE_CHECK */
2633226332 }
2633326333 }
26334+ else
2633426335#endif /* WOLFSSL_DTLS */
26336+ {
26337+ int maxFrag = wolfSSL_GetMaxFragSize(ssl);
26338+ if (maxFrag > 0)
26339+ buffSz = min((word32)buffSz, (word32)maxFrag);
26340+ outputSz = wolfssl_local_GetRecordSize(ssl, (word32)buffSz, 1);
26341+ }
2633526342
2633626343 /* check for available size, it does also DTLS MTU checks */
2633726344 if ((ret = CheckAvailableSize(ssl, outputSz)) != 0)
0 commit comments