1
0
mirror of https://github.com/eclipse/mosquitto.git synced 2025-05-09 17:21:09 +08:00

Fix incorrect "out of memory" reporting of client disconnections

Closes #3253. Thanks to Abilio Marques.
This commit is contained in:
Roger A. Light 2025-05-01 13:22:43 +01:00
parent cdf3c5bdca
commit 3b6ff74dd1

View File

@ -295,16 +295,18 @@ int handle__publish(struct mosquitto *context)
switch(stored->data.qos){ switch(stored->data.qos){
case 0: case 0:
rc2 = sub__messages_queue(context->id, stored->data.topic, stored->data.qos, stored->data.retain, &stored); rc2 = sub__messages_queue(context->id, stored->data.topic, stored->data.qos, stored->data.retain, &stored);
if(rc2 > 0) rc = 1; if(rc2 > 0) rc = rc2;
break; break;
case 1: case 1:
util__decrement_receive_quota(context); util__decrement_receive_quota(context);
rc2 = sub__messages_queue(context->id, stored->data.topic, stored->data.qos, stored->data.retain, &stored); rc2 = sub__messages_queue(context->id, stored->data.topic, stored->data.qos, stored->data.retain, &stored);
/* stored may now be free, so don't refer to it */ /* stored may now be free, so don't refer to it */
if(rc2 == MOSQ_ERR_SUCCESS || context->protocol != mosq_p_mqtt5){ if(rc2 == MOSQ_ERR_SUCCESS || context->protocol != mosq_p_mqtt5){
if(send__puback(context, mid, 0, NULL)) rc = 1; rc2 = send__puback(context, mid, 0, NULL);
if(rc2) rc = rc2;
}else if(rc2 == MOSQ_ERR_NO_SUBSCRIBERS){ }else if(rc2 == MOSQ_ERR_NO_SUBSCRIBERS){
if(send__puback(context, mid, MQTT_RC_NO_MATCHING_SUBSCRIBERS, NULL)) rc = 1; rc2 = send__puback(context, mid, MQTT_RC_NO_MATCHING_SUBSCRIBERS, NULL);
if(rc2) rc = rc2;
}else{ }else{
rc = rc2; rc = rc2;
} }
@ -326,8 +328,8 @@ int handle__publish(struct mosquitto *context)
}else{ }else{
return MOSQ_ERR_PROTOCOL; return MOSQ_ERR_PROTOCOL;
} }
}else if(res == 1){ }else{
rc = 1; rc = res;
} }
break; break;
} }
@ -335,7 +337,7 @@ int handle__publish(struct mosquitto *context)
db__message_write_queued_in(context); db__message_write_queued_in(context);
return rc; return rc;
process_bad_message: process_bad_message:
rc = 1; rc = MOSQ_ERR_UNKNOWN;
if(base_msg){ if(base_msg){
switch(base_msg->data.qos){ switch(base_msg->data.qos){
case 0: case 0: