Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1745633062, "reponame":"libwebsockets", "desc":"libwebsockets lightweight C networking library", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets", "f":3, "items": [ {"schema":"libjg2-1", "cid":"418ab0d8a2bec86070097d0221ebe260", "commit": {"type":"commit", "time": 1635350112, "time_ofs": 60, "oid_tree": { "oid": "231a59012f040561c83883cf525776edc39efc5a", "alias": []}, "oid":{ "oid": "b843c09dc24a674ec1857e6fdead20693bb0da7a", "alias": []}, "msg": "mqtt: allow indicating username and password are not on heap", "sig_commit": { "git_time": { "time": 1635350112, "offset": 60 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }, "sig_author": { "git_time": { "time": 1635295511, "offset": -420 }, "name": "Chunho Lee", "email": "chunhole@amazon.com", "md5": "8e06306f27e27f1d1c6157968ded88e5" }}, "body": "mqtt: allow indicating username and password are not on heap\n\nFix minimal-mqtt-client and minimal-mqtt-client-multi from crashes\nby allowing indicating username and password are not on heap.\n" , "diff": "diff --git a/include/libwebsockets/lws-mqtt.h b/include/libwebsockets/lws-mqtt.h\nindex eb9dcbb..2286580 100644\n--- a/include/libwebsockets/lws-mqtt.h\n+++ b/include/libwebsockets/lws-mqtt.h\n@@ -74,6 +74,10 @@ typedef struct lws_mqtt_client_connect_param_s {\n \t\t\t\t\t\t\t session */\n \tuint8_t\t\t\t\tclient_id_nofree:1;\n \t/**\u003c do not free the client id */\n+\tuint8_t\t\t\t\tusername_nofree:1;\n+\t/**\u003c do not free the username */\n+\tuint8_t\t\t\t\tpassword_nofree:1;\n+\t/**\u003c do not free the password */\n \tstruct {\n \t\tconst char \t\t*topic;\n \t\tconst char \t\t*message;\n@@ -152,6 +156,8 @@ typedef enum {\n \n /* flags from byte 8 of C_TO_S CONNECT */\n typedef enum {\n+\tLMQCFT_USERNAME_NOFREE\t\t\t\t\t\u003d (1 \u003c\u003c 10),\n+\tLMQCFT_PASSWORD_NOFREE\t\t\t\t\t\u003d (1 \u003c\u003c 9),\n \tLMQCFT_CLIENT_ID_NOFREE\t\t\t\t\t\u003d (1 \u003c\u003c 8),\n \t/* only the low 8 are standardized and go out in the protocol */\n \tLMQCFT_USERNAME\t\t\t\t\t\t\u003d (1 \u003c\u003c 7),\ndiff --git a/lib/roles/mqtt/client/client-mqtt.c b/lib/roles/mqtt/client/client-mqtt.c\nindex 6529fdc..5324286 100644\n--- a/lib/roles/mqtt/client/client-mqtt.c\n+++ b/lib/roles/mqtt/client/client-mqtt.c\n@@ -122,6 +122,10 @@ lws_create_client_mqtt_object(const struct lws_client_connect_info *i,\n \t\tc-\u003econn_flags \u003d LMQCFT_CLEAN_START;\n \tif (cp-\u003eclient_id_nofree)\n \t\tc-\u003econn_flags |\u003d LMQCFT_CLIENT_ID_NOFREE;\n+\tif (cp-\u003eusername_nofree)\n+\t\tc-\u003econn_flags |\u003d LMQCFT_USERNAME_NOFREE;\n+\tif (cp-\u003epassword_nofree)\n+\t\tc-\u003econn_flags |\u003d LMQCFT_PASSWORD_NOFREE;\n \n \tif (!(c-\u003econn_flags \u0026 LMQCFT_CLIENT_ID_NOFREE))\n \t\tlws_free((void *)cp-\u003eclient_id);\n@@ -152,14 +156,16 @@ lws_create_client_mqtt_object(const struct lws_client_connect_info *i,\n \t\tif (!c-\u003eusername)\n \t\t\tgoto oom3;\n \t\tc-\u003econn_flags |\u003d LMQCFT_USERNAME;\n-\t\tlws_free((void *)cp-\u003eusername);\n+\t\tif (!(c-\u003econn_flags \u0026 LMQCFT_USERNAME_NOFREE))\n+\t\t\tlws_free((void *)cp-\u003eusername);\n \t\tif (cp-\u003epassword) {\n \t\t\tc-\u003epassword \u003d\n \t\t\t\tlws_mqtt_str_create_cstr_dup(cp-\u003epassword, 0);\n \t\t\tif (!c-\u003epassword)\n \t\t\t\tgoto oom4;\n \t\t\tc-\u003econn_flags |\u003d LMQCFT_PASSWORD;\n-\t\t\tlws_free((void *)cp-\u003epassword);\n+\t\t\tif (!(c-\u003econn_flags \u0026 LMQCFT_PASSWORD_NOFREE))\n+\t\t\t\tlws_free((void *)cp-\u003epassword);\n \t\t}\n \t}\n \ndiff --git a/minimal-examples/mqtt-client/minimal-mqtt-client-multi/minimal-mqtt-client-multi.c b/minimal-examples/mqtt-client/minimal-mqtt-client-multi/minimal-mqtt-client-multi.c\nindex 31f2aa2..a523e09 100644\n--- a/minimal-examples/mqtt-client/minimal-mqtt-client-multi/minimal-mqtt-client-multi.c\n+++ b/minimal-examples/mqtt-client/minimal-mqtt-client-multi/minimal-mqtt-client-multi.c\n@@ -53,6 +53,9 @@ static const lws_mqtt_client_connect_param_t client_connect_param \u003d {\n \t.client_id\t\t\t\u003d NULL,\n \t.keep_alive\t\t\t\u003d 60,\n \t.clean_start\t\t\t\u003d 1,\n+\t.client_id_nofree\t\t\u003d 1,\n+\t.username_nofree\t\t\u003d 1,\n+\t.password_nofree\t\t\u003d 1,\n \t.will_param \u003d {\n \t\t.topic\t\t\t\u003d \u0022good/bye\u0022,\n \t\t.message\t\t\u003d \u0022sign-off\u0022,\ndiff --git a/minimal-examples/mqtt-client/minimal-mqtt-client/minimal-mqtt-client.c b/minimal-examples/mqtt-client/minimal-mqtt-client/minimal-mqtt-client.c\nindex 8eb9542..5ff00c6 100644\n--- a/minimal-examples/mqtt-client/minimal-mqtt-client/minimal-mqtt-client.c\n+++ b/minimal-examples/mqtt-client/minimal-mqtt-client/minimal-mqtt-client.c\n@@ -42,6 +42,8 @@ static const lws_mqtt_client_connect_param_t client_connect_param \u003d {\n \t.keep_alive\t\t\t\u003d 60,\n \t.clean_start\t\t\t\u003d 1,\n \t.client_id_nofree\t\t\u003d 1,\n+\t.username_nofree\t\t\u003d 1,\n+\t.password_nofree\t\t\u003d 1,\n \t.will_param \u003d {\n \t\t.topic\t\t\t\u003d \u0022good/bye\u0022,\n \t\t.message\t\t\u003d \u0022sign-off\u0022,\n@@ -184,6 +186,7 @@ callback_mqtt(struct lws *wsi, enum lws_callback_reasons reason,\n \n \tcase LWS_CALLBACK_MQTT_SUBSCRIBED:\n \t\tlwsl_user(\u0022%s: MQTT_SUBSCRIBED\u005cn\u0022, __func__);\n+\t\tlws_callback_on_writable(wsi);\n \t\tbreak;\n \n \tcase LWS_CALLBACK_MQTT_CLIENT_WRITEABLE:\n@@ -250,8 +253,10 @@ callback_mqtt(struct lws *wsi, enum lws_callback_reasons reason,\n \t\t */\n \n \t\tpss-\u003estate++;\n-\t\tif (pss-\u003estate !\u003d STATE_TEST_FINISH)\n+\t\tif (pss-\u003estate !\u003d STATE_TEST_FINISH) {\n+\t\t\tlws_callback_on_writable(wsi);\n \t\t\tbreak;\n+\t\t}\n \n \t\t/* Oh we are done then */\n \n","s":{"c":1745633062,"u": 8303}} ],"g": 9635,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}