From 572be268e5d6ab1ea77c4dd045db4ea2cf1d3b5e Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 4 Oct 2018 09:53:30 +0100 Subject: [PATCH] Fix signedness of varint reading. --- lib/property_mosq.c | 68 +++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/lib/property_mosq.c b/lib/property_mosq.c index 73450d58..e8d10a42 100644 --- a/lib/property_mosq.c +++ b/lib/property_mosq.c @@ -26,12 +26,14 @@ Contributors: #include "packet_mosq.h" #include "property_mosq.h" -int property__read(struct mosquitto__packet *packet, uint32_t *len) +int property__read(struct mosquitto__packet *packet, int32_t *len) { int rc; uint8_t byte; - uint16_t int16; - uint32_t int32; + int8_t byte_count; + uint16_t uint16; + uint32_t uint32; + int32_t varint; char *str; int slen; *len -= 14; @@ -49,72 +51,72 @@ int property__read(struct mosquitto__packet *packet, uint32_t *len) break; case PROP_MESSAGE_EXPIRY_INTERVAL: - rc = packet__read_uint32(packet, &int32); + rc = packet__read_uint32(packet, &uint32); if(rc) return rc; *len -= 4; /* uint32 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Message expiry: %d", int32); + log__printf(NULL, MOSQ_LOG_DEBUG, "Message expiry: %d", uint32); break; case PROP_CONTENT_TYPE: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Content type: %s", str); break; case PROP_RESPONSE_TOPIC: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Response topic: %s", str); break; case PROP_CORRELATION_DATA: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Correlation data: %s", str); break; case PROP_SUBSCRIPTION_IDENTIFIER: - rc = packet__read_varint(packet, &int32, &byte); - *len -= byte; + rc = packet__read_varint(packet, &varint, &byte_count); if(rc) return rc; - log__printf(NULL, MOSQ_LOG_DEBUG, "Subscription identifier: %d", int32); + *len -= byte_count; + log__printf(NULL, MOSQ_LOG_DEBUG, "Subscription identifier: %d", varint); break; case PROP_SESSION_EXPIRY_INTERVAL: - rc = packet__read_uint32(packet, &int32); + rc = packet__read_uint32(packet, &uint32); if(rc) return rc; *len -= 4; /* uint32 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Session expiry: %d", int32); + log__printf(NULL, MOSQ_LOG_DEBUG, "Session expiry: %d", uint32); break; case PROP_ASSIGNED_CLIENT_IDENTIFIER: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Assigned client identifier: %s", str); break; case PROP_SERVER_KEEP_ALIVE: - rc = packet__read_uint16(packet, &int16); + rc = packet__read_uint16(packet, &uint16); if(rc) return rc; *len -= 2; /* uint16 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Session expiry: %d", int16); + log__printf(NULL, MOSQ_LOG_DEBUG, "Session expiry: %d", uint16); break; case PROP_AUTHENTICATION_METHOD: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Authentication method: %s", str); break; case PROP_AUTHENTICATION_DATA: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Authentication data: %s", str); break; @@ -126,10 +128,10 @@ int property__read(struct mosquitto__packet *packet, uint32_t *len) break; case PROP_WILL_DELAY_INTERVAL: - rc = packet__read_uint32(packet, &int32); + rc = packet__read_uint32(packet, &uint32); if(rc) return rc; *len -= 4; /* uint32 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Will delay interval: %d", int32); + log__printf(NULL, MOSQ_LOG_DEBUG, "Will delay interval: %d", uint32); break; case PROP_REQUEST_RESPONSE_INFO: @@ -142,43 +144,43 @@ int property__read(struct mosquitto__packet *packet, uint32_t *len) case PROP_RESPONSE_INFO: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Response information: %s", str); break; case PROP_SERVER_REFERENCE: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Server reference: %s", str); break; case PROP_REASON_STRING: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "Reason string: %s", str); break; case PROP_RECEIVE_MAXIMUM: - rc = packet__read_uint16(packet, &int16); + rc = packet__read_uint16(packet, &uint16); if(rc) return rc; *len -= 2; /* uint16 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Receive maximum: %d", int16); + log__printf(NULL, MOSQ_LOG_DEBUG, "Receive maximum: %d", uint16); break; case PROP_TOPIC_ALIAS_MAXIMUM: - rc = packet__read_uint16(packet, &int16); + rc = packet__read_uint16(packet, &uint16); if(rc) return rc; *len -= 2; /* uint16 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Topic alias maximum: %d", int16); + log__printf(NULL, MOSQ_LOG_DEBUG, "Topic alias maximum: %d", uint16); break; case PROP_TOPIC_ALIAS: - rc = packet__read_uint16(packet, &int16); + rc = packet__read_uint16(packet, &uint16); if(rc) return rc; *len -= 2; /* uint16 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Topic alias: %d", int16); + log__printf(NULL, MOSQ_LOG_DEBUG, "Topic alias: %d", uint16); break; case PROP_MAXIMUM_QOS: @@ -198,20 +200,20 @@ int property__read(struct mosquitto__packet *packet, uint32_t *len) case PROP_USER_PROPERTY: rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "User property name: %s", str); rc = packet__read_string(packet, &str, &slen); if(rc) return rc; - *len -= 2 - slen; /* int16, string len */ + *len -= 2 - slen; /* uint16, string len */ log__printf(NULL, MOSQ_LOG_DEBUG, "User property value: %s", str); break; case PROP_MAXIMUM_PACKET_SIZE: - rc = packet__read_uint32(packet, &int32); + rc = packet__read_uint32(packet, &uint32); if(rc) return rc; *len -= 4; /* uint32 */ - log__printf(NULL, MOSQ_LOG_DEBUG, "Maximum packet size: %d", int32); + log__printf(NULL, MOSQ_LOG_DEBUG, "Maximum packet size: %d", uint32); break; case PROP_WILDCARD_SUB_AVAILABLE: