diff --git a/lib/net_mosq.c b/lib/net_mosq.c index 9f357ea9..67c22169 100644 --- a/lib/net_mosq.c +++ b/lib/net_mosq.c @@ -590,9 +590,10 @@ int _mosquitto_read_string(struct _mosquitto_packet *packet, char **str) if(packet->pos+len > packet->remaining_length) return MOSQ_ERR_PROTOCOL; - *str = _mosquitto_calloc(len+1, sizeof(char)); + *str = _mosquitto_malloc(len+1); if(*str){ memcpy(*str, &(packet->payload[packet->pos]), len); + (*str)[len] = '\0'; packet->pos += len; }else{ return MOSQ_ERR_NOMEM; diff --git a/lib/send_mosq.c b/lib/send_mosq.c index e65b0f64..a0986c0b 100644 --- a/lib/send_mosq.c +++ b/lib/send_mosq.c @@ -143,12 +143,13 @@ int _mosquitto_send_publish(struct mosquitto *mosq, uint16_t mid, const char *to if(cur_topic->remote_prefix){ /* This prefix needs adding. */ len = strlen(mapped_topic) + strlen(cur_topic->remote_prefix)+1; - topic_temp = _mosquitto_calloc(len+1, sizeof(char)); + topic_temp = _mosquitto_malloc(len+1); if(!topic_temp){ _mosquitto_free(mapped_topic); return MOSQ_ERR_NOMEM; } snprintf(topic_temp, len, "%s%s", cur_topic->remote_prefix, mapped_topic); + cur_topic->remote_prefix[len] = '\0'; _mosquitto_free(mapped_topic); mapped_topic = topic_temp; } diff --git a/src/read_handle.c b/src/read_handle.c index e65e0dcb..8aae4775 100644 --- a/src/read_handle.c +++ b/src/read_handle.c @@ -191,7 +191,7 @@ int mqtt3_handle_publish(struct mosquitto_db *db, struct mosquitto *context) _mosquitto_log_printf(NULL, MOSQ_LOG_DEBUG, "Dropped too large PUBLISH from %s (d%d, q%d, r%d, m%d, '%s', ... (%ld bytes))", context->id, dup, qos, retain, mid, topic, (long)payloadlen); goto process_bad_message; } - payload = _mosquitto_malloc(payloadlen+1); + payload = _mosquitto_calloc(payloadlen+1, 1); if(!payload){ _mosquitto_free(topic); return 1; @@ -201,7 +201,6 @@ int mqtt3_handle_publish(struct mosquitto_db *db, struct mosquitto *context) _mosquitto_free(payload); return 1; } - payload[payloadlen] = '\0'; } /* Check for topic access */