Commit Graph

1788 Commits

Author SHA1 Message Date
Ian Craggs f7799da95e Update version numbers 2022-12-21 11:29:53 +00:00
Ian Craggs 4157a27d39 Merge branch 'develop' 2022-12-21 09:40:14 +00:00
Ian Craggs 4ec20ae224 Correct windows conditional compilation #1275 2022-12-20 09:01:19 +00:00
Ian Craggs 6abae59191 Convert thread name to wide chars #1280 and correct conditional compilation #1275 2022-12-19 20:18:14 +00:00
Ian Craggs 000175a6b0
Merge pull request #1305 from axelsommerfeldt/fix_eyecatcher_check
checkEyecatchers() used to crash if a heap problem was detected
2022-12-06 15:06:22 +00:00
Axel Sommerfeldt 6602a789a8 checkEyecatchers() used to crash if a heap problem was detected
checkEyecatchers() used vsnprintf() with a format specifier "%d" to print the wrong eyecatcher content, but an eyecatcher was defined as 'double'.
Since "%d" expects an 'int' on the stack (which is usually 32 bit in size) but gets a 'double' instead (which is usually 64 bit), the following 'file' argument will be retrieved as wrong pointer value from stack, resulting in a crash in Log() -> vsnprintf() -> strlen().

This was fixed by defining 'eyecatcher' as 'uint64_t' (instead of 'double') and printing an eyecatcher using 'PRIx64' (instead of "d").

Signed-off-by: Axel Sommerfeldt <axel.sommerfeldt@fastmail.de>
2022-12-06 10:19:03 +01:00
Ian Craggs 122d9afc9f Ensure connectionLost/retry etc is invoked after keepalive disconnect #1276 2022-11-30 13:41:08 +00:00
Ian Craggs 76a01f5ae8 Protect data structure alteration when creating sockets #1219 #1290 - part 2 2022-11-29 18:33:51 +00:00
Ian Craggs c3048f90f1 Protect data structure alteration when creating sockets #1219 #1290 2022-11-29 18:24:20 +00:00
Tony Jiang 5a9e2e4070 fix to realloc memory if any queued data should be copied into new buffer #1303
Signed-off-by: Tony Jiang <tony_jansan@aliyun.com>
2022-11-29 14:05:27 +00:00
Neil Horman 911488a9f0 Ensure connection lost callbacks are complte prior to disconnect end
Encountered this valgrind error while testing some code the other day:

==2568== Memcheck, a memory error detector
==2568== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2568== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==2568== Command: ./test
==2568== Parent PID: 2560
==2568==
==2568== Thread 7:
==2568== Invalid read of size 8
==2568==    at 0x4CDA970: connectionLost_call (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x500AEA6: start_thread (pthread_create.c:477)
==2568==    by 0x5121A2E: clone (clone.S:95)
==2568==  Address 0x91e8238 is 40 bytes inside a block of size 176 free'd
==2568==    at 0x48399AB: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==2568==    by 0x4CF8B0F: myfree (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x4CF3947: ListUnlink (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x4CF3A16: ListRemove (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x4CDA612: MQTTClient_destroy (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x142BC0: comms_run (comms_connect.c:436)
==2568==    by 0x500AEA6: start_thread (pthread_create.c:477)
==2568==    by 0x5121A2E: clone (clone.S:95)
==2568==  Block was alloc'd at
==2568==    at 0x483877F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==2568==    by 0x4CF8725: mymalloc (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x4CD9F58: MQTTClient_createWithOptions (in /usr/lib/libpaho-mqtt3cs.so.1.3.9)
==2568==    by 0x1428FB: comms_run (comms_connect.c:404)
==2568==    by 0x500AEA6: start_thread (pthread_create.c:477)
==2568==    by 0x5121A2E: clone (clone.S:95)
==2568==

It indicates a use after free of the MQTTClient data structure in the
connectionLost_call.

A bit of digging revealed that the problem was that my code Called
MQTTClient_disconnect and MQTTClient_destroy in rapid succession.
Because MQTTClient_disconnect does this:

Thread_start(connectionLost_call, m);

Its entirely possible for connectionLost_call to be executed after the
return from MQTTClient_disconnect completes, at which time the Client
may be destroyed/freed, leading to the above valgrind error.

fix is pretty straightforward. We could use a mutex and condition
variable to serialize the two threads, but Windows doesn't have support
for condition variables currently, so just use one time semaphore to
ensure serialization

Signed-off-by: Neil Horman <nhorman@gmail.com>

convert to use of semaphore
2022-11-28 13:00:41 +00:00
Ian Craggs be035e77b5 Add reconnect to paho_cs_pub sample #1294 2022-11-28 12:50:36 +00:00
Ian Craggs a633019b66 Reset reconnect intervals on MQTTAsync_reconnect #1274 2022-11-28 12:06:45 +00:00
Ian Craggs ab26b3cae4 Fix up keep alive processing #1277 #1276 2022-11-27 16:41:23 +00:00
Ian Craggs 5ae44bdc2e Don't call writeContinue if not set #1286 #1293 #1286 2022-11-27 15:23:51 +00:00
Ian Craggs 7c0735a5f0 Update artifact workflows 2022-09-29 14:35:30 +01:00
Ian Craggs 0995176412 Update docs 2022-09-29 11:38:04 +01:00
Ian Craggs 50be7f8045 Merge branch 'develop' 2022-09-29 11:33:10 +01:00
Ian Craggs 4ec7ec3cb2 Update version to 1.3.11 2022-09-29 11:23:27 +01:00
Ian Craggs 697f4008fa Add doc to highlight WebSocket connect option initializers #724 2022-09-29 10:59:42 +01:00
Finlay Morrison 87fc8162d5 fixed error in comment 2022-09-28 16:57:10 +01:00
Ian Craggs 749515ddc7 Add Frank's musl thoughts to README #901 2022-09-28 16:52:00 +01:00
Jonliu1993 7761747083 Add vcpkg installation instructions 2022-09-28 16:35:05 +01:00
Ian Craggs 8419ce091e Merge branch 'fpagliughi-mqtt-protocol-url' into develop 2022-09-28 16:12:16 +01:00
Ian Craggs ee37c780cd Merge branch 'mqtt-protocol-url' of https://github.com/fpagliughi/paho.mqtt.c into fpagliughi-mqtt-protocol-url 2022-09-28 16:11:56 +01:00
Ian Craggs fc8e0d4a2b Merge branch 'chenzhenhua5-develop' into develop 2022-09-28 16:09:55 +01:00
Ian Craggs 951a263dcd Fix up suback count check 2022-09-28 14:19:29 +01:00
Ian Craggs 09ffa867e4 Merge branch 'develop' of https://github.com/chenzhenhua5/paho.mqtt.c into chenzhenhua5-develop 2022-09-28 13:58:40 +01:00
fpagliughi cfc5aaa3bf Added documentation for mqtt:// and mqtts:// protocols. Changed some tests and samples to use them. 2022-09-27 20:26:30 -04:00
Ian Craggs d27fdd82a2 Merge branch 'fpagliughi-readme-updates' into develop 2022-09-27 14:37:48 +01:00
Ian Craggs 86db2e1cdc Merge branch 'readme-updates' of https://github.com/fpagliughi/paho.mqtt.c into fpagliughi-readme-updates 2022-09-27 14:36:24 +01:00
Ian Craggs 0cd1cfe3cd
Merge pull request #1248 from finlaymorrison/comment-fix
fixed error in comment
2022-09-27 14:18:29 +01:00
Ian Craggs 7cfd87223e Fix install list #1260 2022-09-27 14:17:10 +01:00
Ian Craggs 772a83ba1c Add thread names if possible #1100 2022-09-27 13:11:52 +01:00
Ian Craggs 14bc391398 Fix some types to allow USE_SELECT to build on Windows #1271 2022-09-26 12:19:47 +01:00
Ian Craggs 4da5ef65e2 Merge branch 'develop' of github.com:eclipse/paho.mqtt.c into develop 2022-09-24 10:19:21 +01:00
Ian Craggs 9b7ae98783 Allow topic and payload to be returned in publish onSuccess/onFailure callbacks #1133 2022-09-23 18:07:29 +01:00
Ian Craggs 7249106011 Merge branch 'develop' of github.com:eclipse/paho.mqtt.c into develop 2022-09-22 17:39:04 +01:00
fpagliughi 569089e282 Added URI protocol prefixes, 'mqtt://' for TCP, and 'mqtts://' for SSL/TLS. 2022-09-21 00:00:51 -04:00
chenzhenhua5 32c6b58ab9 Fix array out of bound issue when receive invalid suback packet.
WHAT: when call MQTTClient_subscribe interface to subscribe topics,
    the SUBSCRIBE packet would be sent to broker, the according SUBACK
    packet would be returned, if the SUBACK packet returncodes amount
    is not consist with the SUBSCRIBE packet topic amount, the array
    out of bound issue could hanppend.

    WHY: In MQTTClient_subscribeMany5 function, after internal
    MQTTClient_waitfor function called, the SUBACK packet is received,
    traverse the qoss list to get the qos, the qos info would be stored
    in the current function param array "qos", but the array bound is
    not check when accessing, therefore, the out-of-bound issue would
    taken place.

    How: check the size of array "qos" to avoid out-of-bound issue

    Reviewed by: caojianlong <caojianlong@huawei.com>

    Test by: shilei <shilei10@huawei.com>

Signed-off-by: chenzhenhua5 <chenzhenhua5@huawei.com>
2022-08-30 15:02:08 +08:00
Ian Craggs 3e256e60d3 Explain that token in responseOptions is output only #1238 2022-07-15 19:25:28 +01:00
Finlay Morrison 4125eb92a5 fixed error in comment 2022-07-14 16:49:16 +01:00
Ian Craggs 22c39ce878 Don't call unlock if lock fails #1235 2022-07-14 12:49:38 +01:00
Ian Craggs 396d03ff6b Improve automatic reconnect parameter documentation 2022-07-14 11:52:08 +01:00
Ian Craggs 9957c32e6b Free allocated protos field if necessary 2022-07-14 11:51:05 +01:00
Ian Craggs 35d9e411da
Merge pull request #1245 from TonyC-code/develop
Update MQTTAsync.c
2022-07-13 23:53:34 +01:00
Ian Craggs bb7bd8f751 Remove debug from CI tests 2022-07-02 18:20:55 +01:00
Ian Craggs 0465673753 Ping processing when sockets being used by large messages 2022-07-02 13:22:23 +01:00
Ian Craggs 6ef109dbfb Change trace level 2022-07-01 12:03:40 +01:00
Ian Craggs 90ef1087fb Add test trace debug 2022-07-01 11:41:33 +01:00