From fff93f62ed64a2bd04c9b0941d0c7b989ffb8ec9 Mon Sep 17 00:00:00 2001 From: garbb Date: Fri, 9 Sep 2022 00:27:52 -0700 Subject: [PATCH] fix freerdp_assistance_parse_address_list parsing (#8147) * fix remote assistance connection string1 parsing Fails to parse when connection string only has one host:port because there is no ";" character. Also when multiple host:port;host:port it skip first host:port and parses remaining host:port as ";host:port...end" of connection string: eg: ;192.168.93.138:49626;192.168.93.139:49627;192.168.93.140:49628 ;192.168.93.139:49627;192.168.93.140:49628 ;192.168.93.140:49628 * Update assistance.c * Update assistance.c * Update assistance.c --- libfreerdp/common/assistance.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/libfreerdp/common/assistance.c b/libfreerdp/common/assistance.c index 334f46ea2..3a0dcacdc 100644 --- a/libfreerdp/common/assistance.c +++ b/libfreerdp/common/assistance.c @@ -180,30 +180,32 @@ static BOOL append_address(rdpAssistanceFile* file, const char* host, const char static BOOL freerdp_assistance_parse_address_list(rdpAssistanceFile* file, char* list) { + WLog_DBG(TAG, "freerdp_assistance_parse_address_list list=%s", list); + BOOL rc = FALSE; - char* p; if (!file || !list) return FALSE; - p = list; + char* strp = list; + char* s = ";"; + char* token; - while ((p = strchr(p, ';')) != NULL) + // get the first token + token = strtok(strp, s); + + // walk through other tokens + while (token != NULL) { - char* q = strchr(p, ':'); + char* port = strchr(token, ':'); + *port = '\0'; + port++; - if (!q) + if (!append_address(file, token, port)) goto out; - *q = '\0'; - q++; - - if (!append_address(file, p, q)) - goto out; - - p = q; + token = strtok(NULL, s); } - rc = TRUE; out: return rc;