return TRUE;
}
+bool curlx_sotouz_fits(curl_off_t sonum, size_t *puznum)
+{
+ if(sonum < 0) {
+ *puznum = 0;
+ return FALSE;
+ }
+#if SIZEOF_CURL_OFF_T > SIZEOF_SIZE_T
+ if(sonum > SIZE_MAX) {
+ *puznum = 0;
+ return FALSE;
+ }
+#endif
+ *puznum = (size_t)sonum;
+ return TRUE;
+}
+
curl_off_t curlx_uztoso(size_t uznum)
{
#if SIZEOF_SIZE_T >= SIZEOF_CURL_OFF_T
/* Convert a ssize_t to size_t, return FALSE if negative and set 0 */
bool curlx_sztouz(ssize_t sznum, size_t *puznum);
+/* Convert a curl_off_t to size_t, return FALSE if negative or
+ * too large and set 0 */
+bool curlx_sotouz_fits(curl_off_t sonum, size_t *puznum);
+
#ifdef _WIN32
#undef read
#define read(fd, buf, count) (ssize_t)_read(fd, buf, curlx_uztoui(count))
if(result)
return result;
mq->lastTime = curlx_now();
- Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)n);
+ Curl_debug(data, CURLINFO_HEADER_OUT, buf, n);
if(len != n) {
size_t nsend = len - n;
if(curlx_dyn_len(&mq->sendbuf)) {
DEBUGF(infof(data, "mqtt_publish without payload, return bad arg"));
return CURLE_BAD_FUNCTION_ARGUMENT;
}
- if(postfieldsize < 0)
+ if(!curlx_sotouz_fits(postfieldsize, &payloadlen)) {
+ if(postfieldsize > 0) /* off_t does not fit into size_t */
+ return CURLE_BAD_FUNCTION_ARGUMENT;
payloadlen = strlen(payload);
- else
- payloadlen = (size_t)postfieldsize;
+ }
result = mqtt_get_topic(data, &topic, &topiclen);
if(result)