@@ -26281,20 +26281,20 @@ int SendData(WOLFSSL* ssl, const void* data, size_t sz)
2628126281
2628226282 if (sent == (word32)sz) break;
2628326283
26284- buffSz = (word32)sz - sent;
26285- {
26286- int maxFrag = wolfSSL_GetMaxFragSize(ssl );
26287- if (maxFrag > 0 && (int)buffSz > maxFrag)
26288- buffSz = (word32)maxFrag ;
26284+ buffSz = (int)(( word32)sz - sent) ;
26285+ if (buffSz <= 0) {
26286+ WOLFSSL_MSG("error: sent size exceeds input size" );
26287+ ssl->error = BAD_FUNC_ARG;
26288+ return WOLFSSL_FATAL_ERROR ;
2628926289 }
26290- outputSz = wolfssl_local_GetRecordSize(ssl, (word32)buffSz, 1);
2629126290#if defined(WOLFSSL_DTLS)
2629226291 if (ssl->options.dtls) {
2629326292#if defined(WOLFSSL_DTLS_MTU)
2629426293 int mtu = ssl->dtlsMtuSz;
2629526294#else
2629626295 int mtu = MAX_MTU;
2629726296#endif
26297+ outputSz = wolfssl_local_GetRecordSize(ssl, (word32)buffSz, 1);
2629826298 if (outputSz > mtu) {
2629926299#if defined(WOLFSSL_NO_DTLS_SIZE_CHECK)
2630026300 /* split instead of error out */
@@ -26308,7 +26308,14 @@ int SendData(WOLFSSL* ssl, const void* data, size_t sz)
2630826308#endif /* WOLFSSL_NO_DTLS_SIZE_CHECK */
2630926309 }
2631026310 }
26311+ else
2631126312#endif /* WOLFSSL_DTLS */
26313+ {
26314+ int maxFrag = wolfSSL_GetMaxFragSize(ssl);
26315+ if (maxFrag > 0)
26316+ buffSz = min((word32)buffSz, (word32)maxFrag);
26317+ outputSz = wolfssl_local_GetRecordSize(ssl, (word32)buffSz, 1);
26318+ }
2631226319
2631326320 /* check for available size, it does also DTLS MTU checks */
2631426321 if ((ret = CheckAvailableSize(ssl, outputSz)) != 0)
0 commit comments