[Hamlib-commits] Hamlib -- Ham radio control libraries branch Hamlib-4.6 updated. c9031ca4d7d1b7817
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2024-12-24 08:43:38
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, Hamlib-4.6 has been updated via c9031ca4d7d1b7817f0e461814a740bfeb383f84 (commit) via d66b176d1b848ddf46753d5f3483688028716b23 (commit) via 15d7242d5ad3df90088cc7e1cc49b0484db6a1a0 (commit) via 8589d5c6bc24809cae1c8cfbdab589b92641d9db (commit) via f9185d1d2469fad84aa925396606c6b752b17e49 (commit) via e262fb82c262f1b6e279e337f1642a6689256f94 (commit) via e56f8187614b2702fb584117a006a2e789ceea3f (commit) via d5dd12d50d824d4655f4c3a0e8b3cffdc464df56 (commit) via 45cc53a5265677f572f4526d750ee546bb4390c4 (commit) via 750adb40b53f89889b802bc64100ce095f114dc2 (commit) via b763761d9e307b4023e8a28d1dcbdc0116a5ff12 (commit) via d302b8fabd713cfbebd53679ad5fb685122903cc (commit) via fe45fa2dfc15f2152d6294e7457ae218df972a0f (commit) via 86518546db30c22a42c5ddc12e68434c4ed3f8ee (commit) via 13f7b01d279a14078b485b9af4e999d3d4f8f5c7 (commit) via 62b0a25a3ddab25c65de373dd6a83d812af5a9f1 (commit) via 57c5047c3ec662cd102961346ed1d4957ea88b5b (commit) via 89383a553a5e6b05779479edac2af0134cb10335 (commit) via ec3978e5210f6142f33504523168f55b4a4032ac (commit) via 2b23051c6ddb266c359ce57008d44deeab3f5bc6 (commit) via 032e530def273825892a6bfe8e4b5eef137ec529 (commit) via a7dbebffa9297d3e9afa5c356ab74bfdb2c0243d (commit) via 33293112744fc08f70811af4add9c7dd6f6533fa (commit) via 6bb5c404994308c06bdfd853642b60adb662b78f (commit) via ec7103582297545948602bc833cf1883fd94e8d8 (commit) via 8842ae7c2920799442bfda812fa56c241dfdeebd (commit) via 4b4b1b0d517403f0f460f1a255358b4f1b426e0b (commit) via e6be427c519ae3228787c728a1bdc5cc5dc31d0c (commit) via 72424ac144904dc9c70161fe70c64f8657e89758 (commit) via 12c453ccd3cbf4455d346f7d4f42fa7061bee0cb (commit) via 6cf93934a71a2ed143125a9f3b005ad38a542423 (commit) via 9624f06be96bafaafaf12fe8188d7390cf5821a2 (commit) via 0690fbc0c532f71d02ed74106191686d31cf13ea (commit) via 3d8dbbcc1ada57a8660ccc919c98f40674df4b02 (commit) via db00197e6adcddd18a810f619d38ac04c87fbd69 (commit) via 5f621c9f5327be25432d0d761204faa434afaee2 (commit) via a81c7d90c41ba6911b75d1806343b318141e6e0b (commit) via a72aa0cb4171f0039f51c2112b1f523310b66ca7 (commit) via a2af87068ea6771dc6e298b21e56ec769d6b31b0 (commit) via bef2d13e4a8443ce32bba28116398a3edf156a45 (commit) via 50e10f758223e456e1304e7b8ae8d2092d89a914 (commit) via 5028a0c440e7643c25ae459f6150c8313b223a7d (commit) via 74876c73ae45ed02b4f0ff45f317e59abb6212a1 (commit) via 1364996bd298643a288d79edde45f7fd53cf0816 (commit) via 27c4eb19ee32b46e4740f781d9f2470638e9f459 (commit) from c0542ae864ce6f9cc4b29b0c30b44e273261d114 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c9031ca4d7d1b7817f0e461814a740bfeb383f84 Author: Nate Bargmann <n0...@n0...> Date: Tue Dec 24 02:42:29 2024 -0600 Advance to 4.6 release diff --git a/NEWS b/NEWS index 37ec46881..94c00d634 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 + * 2024-12-24 * send_raw can now take hex digits as colon-separated -- e.g. send_raw icom xfe:xfe:x94:xe0:03:xfd * Add IC7760 * IC7300 Mode filter can now be set by # (i.e. 1,2,3) @@ -86,8 +87,6 @@ static int add_to_list(const struct rig_caps* rc, void*) * Add MDS 4710/9710 rigs * Add FLIR PTU-D48, E46, D100, D300 rotors * Fix FTDX3000 rig split - -Version 4.5.6 * Fix rigctld/rigctltcp information * Fix FT817 get/set_vfo diff --git a/configure.ac b/configure.ac index 4c1c914d2..6e9b48eeb 100644 --- a/configure.ac +++ b/configure.ac @@ -14,7 +14,7 @@ dnl Please do not use '-' in the version number, as package managers will fail, dnl however, the use of '~' should be fine as apt (others?) will treat dnl it as an earlier version than the actual release. TNX KA6MAL dnl PACKAGE_NAME + " " + PACKAGE_VERSION must not exceed 20 chars! -AC_INIT([Hamlib],[4.6~rc1],[ham...@li...],[hamlib],[http://www.hamlib.org]) +AC_INIT([Hamlib],[4.6],[ham...@li...],[hamlib],[http://www.hamlib.org]) #AC_INIT([PRODUCT_NAME], [Hamlib]) #AC_DEFINE([Hamlib], [PRODUCT_VERSION_RESOURCE]) commit d66b176d1b848ddf46753d5f3483688028716b23 Merge: c0542ae86 15d7242d5 Author: Nate Bargmann <n0...@n0...> Date: Tue Dec 24 02:36:30 2024 -0600 Merge branch 'master' of github.com:Hamlib/Hamlib into Hamlib-4.6 commit 15d7242d5ad3df90088cc7e1cc49b0484db6a1a0 Merge: f9185d1d2 8589d5c6b Author: Michael Black <mdb...@ya...> Date: Sun Dec 22 16:23:09 2024 -0600 Merge pull request #1640 from GeoBaltz/fix25 Fix unbalanced ENTERFUNC/RETURNFUNC pairs in icom.c commit 8589d5c6bc24809cae1c8cfbdab589b92641d9db Author: George Baltz N3GB <Geo...@gm...> Date: Sun Dec 22 15:50:56 2024 -0500 Fix unbalanced ENTERFUNC/RETURNFUNC pairs in icom.c Also tweak comments/formats to eliminate false positives in code base (except for the Catch-22 ones in tests/func_chk.c itself) diff --git a/rigs/dummy/aclog.c b/rigs/dummy/aclog.c index b8b8bedd9..3e0f69803 100644 --- a/rigs/dummy/aclog.c +++ b/rigs/dummy/aclog.c @@ -834,7 +834,7 @@ static int aclog_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } rig_debug(RIG_DEBUG_TRACE, - "%s: return modeA=%s, widthA=%d\n,modeB=%s, widthB=%d\n", __func__, + "%s: Return modeA=%s, widthA=%d\n,modeB=%s, widthB=%d\n", __func__, rig_strrmode(priv->curr_modeA), (int)priv->curr_widthA, rig_strrmode(priv->curr_modeB), (int)priv->curr_widthB); RETURNFUNC(RIG_OK); diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 811ce04d7..b56f87453 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -943,7 +943,7 @@ static int flrig_open(RIG *rig) if (priv->has_get_bwA) { - /* see if get_bwB is available FLRig can return empty value too */ + // see if get_bwB is available FLRig can return empty value too retval = flrig_transaction(rig, "rig.get_bwB", NULL, value, sizeof(value)); if (retval == RIG_ENAVAIL || strlen(value) == 0) // must not have it @@ -1667,7 +1667,7 @@ static int flrig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } rig_debug(RIG_DEBUG_TRACE, - "%s: return modeA=%s, widthA=%d\n,modeB=%s, widthB=%d\n", __func__, + "%s: Return modeA=%s, widthA=%d\n,modeB=%s, widthB=%d\n", __func__, rig_strrmode(priv->curr_modeA), (int)priv->curr_widthA, rig_strrmode(priv->curr_modeB), (int)priv->curr_widthB); RETURNFUNC(RIG_OK); @@ -1792,7 +1792,7 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) if (strlen(value) == 0) // sometimes we get a null reply here -- OK...deal with it { - rig_debug(RIG_DEBUG_WARN, "%s: empty value return cached bandwidth\n", + rig_debug(RIG_DEBUG_WARN, "%s: empty value, returning cached bandwidth\n", __func__); *width = CACHE(rig)->widthMainA; RETURNFUNC(RIG_OK); @@ -1819,7 +1819,7 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) if (strlen(value) == 0) { - rig_debug(RIG_DEBUG_WARN, "%s: empty value return cached bandwidth\n", + rig_debug(RIG_DEBUG_WARN, "%s: empty value, returning cached bandwidth\n", __func__); *width = CACHE(rig)->widthMainA; RETURNFUNC(RIG_OK); diff --git a/rigs/dummy/netrigctl.c b/rigs/dummy/netrigctl.c index e0678653b..69241b448 100644 --- a/rigs/dummy/netrigctl.c +++ b/rigs/dummy/netrigctl.c @@ -280,7 +280,7 @@ static int netrigctl_open(RIG *rig) } else { - rig_debug(RIG_DEBUG_ERR, "%s: unknown return from netrigctl_transaction=%d\n", + rig_debug(RIG_DEBUG_ERR, "%s: unknown value returned from netrigctl_transaction=%d\n", __func__, ret); } diff --git a/rigs/dummy/tci1x.c b/rigs/dummy/tci1x.c index 0cc1cc0b9..779a9a8f3 100644 --- a/rigs/dummy/tci1x.c +++ b/rigs/dummy/tci1x.c @@ -1281,7 +1281,7 @@ static int tci1x_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } rig_debug(RIG_DEBUG_TRACE, - "%s: return modeA=%s, widthA=%d\n,modeB=%s, widthB=%d\n", __func__, + "%s: Return modeA=%s, widthA=%d\n,modeB=%s, widthB=%d\n", __func__, rig_strrmode(priv->curr_modeA), (int)priv->curr_widthA, rig_strrmode(priv->curr_modeB), (int)priv->curr_widthB); RETURNFUNC(RIG_OK); diff --git a/rigs/icom/frame.c b/rigs/icom/frame.c index 06ef16798..09a2faddd 100644 --- a/rigs/icom/frame.c +++ b/rigs/icom/frame.c @@ -150,9 +150,8 @@ int icom_one_transaction(RIG *rig, unsigned char cmd, int subcmd, ctrl_id = priv_caps->serial_full_duplex == 0 ? CTRLID : 0x80; - /* - * should check return code and that write wrote cmd_len chars! - */ + // Should check return code and that write wrote cmd_len chars! + set_transaction_active(rig); collision_retry: @@ -204,7 +203,7 @@ again1: if (retval < 0) { set_transaction_inactive(rig); - /* Other error, return it */ + // Other error, return it RETURNFUNC(retval); } @@ -390,8 +389,8 @@ again2: __func__, priv_caps->re_civ_addr, priv->re_civ_addr); } - /* RIG_TIMEOUT: timeout getting response, return timeout */ - /* other error: return it */ + // RIG_TIMEOUT: timeout getting response, return timeout + // other error: return it RETURNFUNC(frm_len); } diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 0e651af5b..5fd927b17 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1190,7 +1190,7 @@ retry_open: rig_debug(RIG_DEBUG_ERR, "%s: Unable to determine Icom echo status -- is rig on and connected?\n", __func__); - return retval_echo; + RETURNFUNC(retval_echo); } else { @@ -2687,7 +2687,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) if (width <= 3) { rig_debug(RIG_DEBUG_TRACE, "%s: setting filter=%d\n", __func__, (int)width); - return RIG_OK; + RETURNFUNC(RIG_OK); } if (((width != RIG_PASSBAND_NOCHANGE) && (width != current_width)) diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 38a87600a..3cca97103 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -5518,12 +5518,11 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg) RETURNFUNC(retval); } - /* - * If answer is "KY0;", there is space in buffer and we can proceed. - * If answer is "KY1;", we have to wait a while - * If answer is "KY2;", there is space in buffer and we aren't sending so we can proceed. - * If answer is something else, return with error to prevent infinite loops - */ + // If answer is "KY0;", there is space in buffer and we can proceed. + // If answer is "KY1;", we have to wait a while + // If answer is "KY2;", there is space in buffer and we aren't sending so we can proceed. + // If answer is something else, return with error to prevent infinite loops + if (!strncmp(m2, "KY0", 3)) { break; } if (!strncmp(m2, "KY2", 3)) { break; } diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c index fa8dd68a4..86b5b63c0 100644 --- a/rigs/yaesu/ft1000mp.c +++ b/rigs/yaesu/ft1000mp.c @@ -963,7 +963,7 @@ static int ft1000mp_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) f, vfo); - *freq = f; /* return displayed frequency */ + *freq = f; // return displayed frequency RETURNFUNC(RIG_OK); } @@ -1542,7 +1542,7 @@ static int ft1000mp_get_rxit(RIG *rig, vfo_t vfo, shortfreq_t *rit) rig_debug(RIG_DEBUG_TRACE, "%s: freq = %d Hz for VFO [%s]\n", __func__, (int)f, rig_strvfo(vfo)); - *rit = f; /* return displayed frequency */ + *rit = f; // return displayed frequency RETURNFUNC(RIG_OK); } diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 1706f54a1..766297eae 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -11342,7 +11342,7 @@ int newcat_get_cmd(RIG *rig) RETURNFUNC(-RIG_ENAVAIL); case 'O': - /* Too many characters sent without a carriage return */ + // Too many characters sent without a carriage return rig_debug(RIG_DEBUG_VERBOSE, "%s: Overflow for '%s'\n", __func__, priv->cmd_str); rc = -RIG_EPROTO; @@ -11776,7 +11776,7 @@ int newcat_set_cmd(RIG *rig) RETURNFUNC(-RIG_ENAVAIL); case 'O': - /* Too many characters sent without a carriage return */ + // Too many characters sent without a carriage return rig_debug(RIG_DEBUG_VERBOSE, "%s: Overflow for '%s'\n", __func__, priv->cmd_str); rc = -RIG_EPROTO; diff --git a/src/rig.c b/src/rig.c index dc9a7a5de..a73a9df7e 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1697,10 +1697,8 @@ int HAMLIB_API rig_close(RIG *rig) #endif - /* - * Let the backend say 73s to the rig. - * and ignore the return code. - */ + // Let the backend say 73 to the rig. + // and ignore the return code. if (caps->rig_close) { caps->rig_close(rig); @@ -3145,14 +3143,14 @@ pbwidth_t HAMLIB_API rig_passband_normal(RIG *rig, rmode_t mode) { if (rs->filters[i].modes & mode) { - rig_debug(RIG_DEBUG_VERBOSE, "%s: return filter#%d, width=%d\n", __func__, i, + rig_debug(RIG_DEBUG_VERBOSE, "%s: Return filter#%d, width=%d\n", __func__, i, (int)rs->filters[i].width); RETURNFUNC(rs->filters[i].width); } } rig_debug(RIG_DEBUG_VERBOSE, - "%s: filter not found...return %d\n", __func__, + "%s: filter not found...returning %d\n", __func__, 0); RETURNFUNC(0); } @@ -3407,7 +3405,7 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo) rig_set_cache_freq(rig, RIG_VFO_ALL, 0); } - rig_debug(RIG_DEBUG_TRACE, "%s: return %d, vfo=%s, curr_vfo=%s\n", __func__, + rig_debug(RIG_DEBUG_TRACE, "%s: returning %d, vfo=%s, curr_vfo=%s\n", __func__, retcode, rig_strvfo(vfo), rig_strvfo(rs->current_vfo)); ELAPSED2; @@ -3838,7 +3836,7 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) cachep->ptt = ptt; elapsed_ms(&cachep->time_ptt, HAMLIB_ELAPSED_SET); - if (retcode != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: return code=%d\n", __func__, retcode); } + if (retcode != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: Return code=%d\n", __func__, retcode); } memcpy(&rs->pttport_deprecated, pttp, sizeof(rs->pttport_deprecated)); commit f9185d1d2469fad84aa925396606c6b752b17e49 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 15:19:38 2024 -0600 Print error on bufferoverflow and astyle sprintflst.c diff --git a/src/sprintflst.c b/src/sprintflst.c index 978a783d3..06b381316 100644 --- a/src/sprintflst.c +++ b/src/sprintflst.c @@ -72,19 +72,23 @@ int rig_sprintf_vfo(char *str, int nlen, vfo_t vfo) if (sv && sv[0] && (strstr(sv, "None") == 0)) { int written = snprintf(str + len, nlen - len, "%s ", sv); + if (written < 0 || written >= nlen - len) { // Truncate and break if there's no space left + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = nlen - 1; str[len] = '\0'; break; } + len += written; } if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } @@ -143,12 +147,19 @@ int rig_sprintf_ant(char *str, int str_len, ant_t ant) switch (i) { case 0: ant_name = "ANT1"; break; + case 1: ant_name = "ANT2"; break; + case 2: ant_name = "ANT3"; break; + case 3: ant_name = "ANT4"; break; + case 4: ant_name = "ANT5"; break; + case 30: ant_name = "ANT_UNKNOWN"; break; + case 31: ant_name = "ANT_CURR"; break; + default: ant_name = "ANT_UNK"; rig_debug(RIG_DEBUG_ERR, "%s: unknown ant=%d\n", __func__, i); @@ -156,19 +167,23 @@ int rig_sprintf_ant(char *str, int str_len, ant_t ant) } int written = snprintf(str + len, str_len - len, "%s ", ant_name); + if (written < 0 || written >= str_len - len) { // Truncate if buffer is full + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = str_len - 1; str[len] = '\0'; break; } + len += written; } if (len >= str_len) { // Ensure null-termination + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[str_len - 1] = '\0'; break; } @@ -370,7 +385,8 @@ int sprintf_level_ext(char *str, int nlen, const struct confparams *extlevels) return len; } -int rig_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *gran) +int rig_sprintf_level_gran(char *str, int nlen, setting_t level, + const gran_t *gran) { int i, len = 0; @@ -398,22 +414,27 @@ int rig_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *g { rig_debug(RIG_DEBUG_BUG, "unknown level idx %d\n", i); } + continue; } int written; + if (RIG_LEVEL_IS_FLOAT(rig_idx2setting(i))) { - written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, + gran[i].max.f, gran[i].step.f); } else { - written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, + gran[i].max.i, gran[i].step.i); } if (written < 0 || written >= nlen - len) { // Truncate and stop further processing if the buffer is full + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = nlen - 1; str[len] = '\0'; break; @@ -424,6 +445,7 @@ int rig_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *g if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } @@ -432,11 +454,13 @@ int rig_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *g return len; } -int rot_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *gran) +int rot_sprintf_level_gran(char *str, int nlen, setting_t level, + const gran_t *gran) { int i, len = 0; *str = '\0'; + if (level == ROT_LEVEL_NONE) { return 0; @@ -459,23 +483,28 @@ int rot_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *g { rig_debug(RIG_DEBUG_BUG, "unknown level idx %d\n", i); } + continue; } int written; + if (ROT_LEVEL_IS_FLOAT(rig_idx2setting(i))) { - written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, + gran[i].max.f, gran[i].step.f); } else { - written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, + gran[i].max.i, gran[i].step.i); } if (written < 0 || written >= nlen - len) { // Truncate and stop further processing if the buffer is full len = nlen - 1; + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[len] = '\0'; break; } @@ -485,6 +514,7 @@ int rot_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *g if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } @@ -547,6 +577,7 @@ int rot_sprintf_parm(char *str, int nlen, setting_t parm) if (written < 0 || written >= nlen - len) { // Truncate and stop further processing if the buffer is full + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = nlen - 1; str[len] = '\0'; break; @@ -557,6 +588,7 @@ int rot_sprintf_parm(char *str, int nlen, setting_t parm) if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } @@ -565,7 +597,8 @@ int rot_sprintf_parm(char *str, int nlen, setting_t parm) return len; } -int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gran) +int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, + const gran_t *gran) { int i, len = 0; *str = '\0'; @@ -578,24 +611,30 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gra for (i = 0; i < RIG_SETTING_MAX; i++) { const char *ms; + if (!(parm & rig_idx2setting(i))) { continue; } + ms = rig_strparm(parm & rig_idx2setting(i)); + if (!ms || !ms[0]) { if (parm != DUMMY_ALL && parm != RIG_PARM_SET(DUMMY_ALL)) { rig_debug(RIG_DEBUG_BUG, "unknown parm idx %d\n", i); } + continue; } int written; + if (RIG_PARM_IS_FLOAT(rig_idx2setting(i))) { - written = snprintf(str + len, nlen - len, "%s(%.g..%.g/%.g) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%.g..%.g/%.g) ", ms, + gran[i].min.f, gran[i].max.f, gran[i].step.f); } else if (RIG_PARM_IS_STRING(rig_idx2setting(i))) { @@ -610,21 +649,25 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gra } else { - written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, + gran[i].max.i, gran[i].step.i); } if (written < 0 || written >= nlen - len) { // Truncate and stop further processing if the buffer is full + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = nlen - 1; str[len] = '\0'; break; } + len += written; if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } @@ -633,7 +676,8 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gra return len; } -int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gran) +int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm, + const gran_t *gran) { int i, len = 0; *str = '\0'; @@ -646,42 +690,52 @@ int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gra for (i = 0; i < RIG_SETTING_MAX; i++) { const char *ms; + if (!(parm & rig_idx2setting(i))) { continue; } + ms = rot_strparm(parm & rig_idx2setting(i)); + if (!ms || !ms[0]) { if (parm != DUMMY_ALL && parm != ROT_PARM_SET(DUMMY_ALL)) { rig_debug(RIG_DEBUG_BUG, "unknown parm idx %d\n", i); } + continue; } int written; + if (ROT_PARM_IS_FLOAT(rig_idx2setting(i))) { - written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, + gran[i].max.f, gran[i].step.f); } else { - written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, + gran[i].max.i, gran[i].step.i); } if (written < 0 || written >= nlen - len) { // Truncate and stop further processing if the buffer is full + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = nlen - 1; str[len] = '\0'; break; } + len += written; if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } @@ -769,19 +823,23 @@ int rot_sprintf_status(char *str, int nlen, rot_status_t status) if (sv && sv[0] && (strstr(sv, "None") == 0)) { int written = snprintf(str + len, nlen - len, "%s ", sv); + if (written < 0 || written >= nlen - len) { // Truncate and break if there's no space left + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); len = nlen - 1; str[len] = '\0'; break; } + len += written; } if (len >= nlen) { // Ensure null-termination and avoid overflow + rig_debug(RIG_DEBUG_ERR, "%s: buffer overflow\n", __func__); str[nlen - 1] = '\0'; break; } commit e262fb82c262f1b6e279e337f1642a6689256f94 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 12:27:43 2024 -0600 Fix several potential overflows in sprintflst.c diff --git a/src/sprintflst.c b/src/sprintflst.c index 800f0a80d..978a783d3 100644 --- a/src/sprintflst.c +++ b/src/sprintflst.c @@ -52,10 +52,10 @@ int check_buffer_overflow(char *str, int len, int nlen) return RIG_OK; } - int rig_sprintf_vfo(char *str, int nlen, vfo_t vfo) { - unsigned int i, len = 0; + unsigned int i; + int len = 0; rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s\n", __func__, rig_strvfo(vfo)); *str = '\0'; @@ -67,20 +67,32 @@ int rig_sprintf_vfo(char *str, int nlen, vfo_t vfo) for (i = 0; i < HAMLIB_MAX_VFOS; i++) { - const char *sv; - sv = rig_strvfo(vfo & RIG_VFO_N(i)); + const char *sv = rig_strvfo(vfo & RIG_VFO_N(i)); if (sv && sv[0] && (strstr(sv, "None") == 0)) { - len += snprintf(str + len, nlen - len, "%s ", sv); - check_buffer_overflow(str, len, nlen); + int written = snprintf(str + len, nlen - len, "%s ", sv); + if (written < 0 || written >= nlen - len) + { + // Truncate and break if there's no space left + len = nlen - 1; + str[len] = '\0'; + break; + } + len += written; + } + + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; } } return len; } - int rig_sprintf_mode(char *str, int nlen, rmode_t mode) { unsigned int i, len = 0; @@ -111,18 +123,17 @@ int rig_sprintf_mode(char *str, int nlen, rmode_t mode) return len; } - int rig_sprintf_ant(char *str, int str_len, ant_t ant) { int i, len = 0; - char *ant_name; + const char *ant_name; *str = '\0'; if (ant == RIG_ANT_NONE) { - SNPRINTF(str, str_len, "ANT_NONE"); - return 0; + snprintf(str, str_len, "ANT_NONE"); + return (int)strlen(str); // Return length of "ANT_NONE" } for (i = 0; i < RIG_ANT_MAX; i++) @@ -132,34 +143,40 @@ int rig_sprintf_ant(char *str, int str_len, ant_t ant) switch (i) { case 0: ant_name = "ANT1"; break; - case 1: ant_name = "ANT2"; break; - case 2: ant_name = "ANT3"; break; - case 3: ant_name = "ANT4"; break; - case 4: ant_name = "ANT5"; break; - case 30: ant_name = "ANT_UNKNOWN"; break; - case 31: ant_name = "ANT_CURR"; break; - default: ant_name = "ANT_UNK"; rig_debug(RIG_DEBUG_ERR, "%s: unknown ant=%d\n", __func__, i); break; } - len += snprintf(str + len, str_len - len, "%s ", ant_name); - check_buffer_overflow(str, len, str_len); + int written = snprintf(str + len, str_len - len, "%s ", ant_name); + if (written < 0 || written >= str_len - len) + { + // Truncate if buffer is full + len = str_len - 1; + str[len] = '\0'; + break; + } + len += written; + } + + if (len >= str_len) + { + // Ensure null-termination + str[str_len - 1] = '\0'; + break; } } return len; } - int rig_sprintf_func(char *str, int nlen, setting_t func) { unsigned int i, len = 0; @@ -353,9 +370,7 @@ int sprintf_level_ext(char *str, int nlen, const struct confparams *extlevels) return len; } - -int rig_sprintf_level_gran(char *str, int nlen, setting_t level, - const gran_t *gran) +int rig_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *gran) { int i, len = 0; @@ -383,43 +398,45 @@ int rig_sprintf_level_gran(char *str, int nlen, setting_t level, { rig_debug(RIG_DEBUG_BUG, "unknown level idx %d\n", i); } - continue; } + int written; if (RIG_LEVEL_IS_FLOAT(rig_idx2setting(i))) { - len += snprintf(str + len, nlen - len, - "%s(%f..%f/%f) ", - ms, - gran[i].min.f, - gran[i].max.f, - gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); } else { - len += snprintf(str + len, nlen - len, - "%s(%d..%d/%d) ", - ms, - gran[i].min.i, - gran[i].max.i, - gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); } - check_buffer_overflow(str, len, nlen); + if (written < 0 || written >= nlen - len) + { + // Truncate and stop further processing if the buffer is full + len = nlen - 1; + str[len] = '\0'; + break; + } + + len += written; + + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; + } } return len; } - -int rot_sprintf_level_gran(char *str, int nlen, setting_t level, - const gran_t *gran) +int rot_sprintf_level_gran(char *str, int nlen, setting_t level, const gran_t *gran) { int i, len = 0; *str = '\0'; - if (level == ROT_LEVEL_NONE) { return 0; @@ -442,36 +459,40 @@ int rot_sprintf_level_gran(char *str, int nlen, setting_t level, { rig_debug(RIG_DEBUG_BUG, "unknown level idx %d\n", i); } - continue; } + int written; if (ROT_LEVEL_IS_FLOAT(rig_idx2setting(i))) { - len += snprintf(str + len, nlen - len, - "%s(%f..%f/%f) ", - ms, - gran[i].min.f, - gran[i].max.f, - gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); } else { - len += snprintf(str + len, nlen - len, - "%s(%d..%d/%d) ", - ms, - gran[i].min.i, - gran[i].max.i, - gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); } - check_buffer_overflow(str, len, nlen); + if (written < 0 || written >= nlen - len) + { + // Truncate and stop further processing if the buffer is full + len = nlen - 1; + str[len] = '\0'; + break; + } + + len += written; + + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; + } } return len; } - int rig_sprintf_parm(char *str, int nlen, setting_t parm) { int i, len = 0; @@ -501,7 +522,6 @@ int rig_sprintf_parm(char *str, int nlen, setting_t parm) return len; } - int rot_sprintf_parm(char *str, int nlen, setting_t parm) { int i, len = 0; @@ -519,24 +539,35 @@ int rot_sprintf_parm(char *str, int nlen, setting_t parm) if (!ms || !ms[0]) { - continue; /* unknown, FIXME! */ + continue; /* unknown, FIXME! */ } - strcat(str, ms); - strcat(str, " "); - len += strlen(ms) + 1; - check_buffer_overflow(str, len, nlen); + int written = snprintf(str + len, nlen - len, "%s ", ms); + + if (written < 0 || written >= nlen - len) + { + // Truncate and stop further processing if the buffer is full + len = nlen - 1; + str[len] = '\0'; + break; + } + + len += written; + + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; + } } return len; } - -int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, - const gran_t *gran) +int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gran) { int i, len = 0; - *str = '\0'; if (parm == RIG_PARM_NONE) @@ -547,65 +578,64 @@ int rig_sprintf_parm_gran(char *str, int nlen, setting_t parm, for (i = 0; i < RIG_SETTING_MAX; i++) { const char *ms; - if (!(parm & rig_idx2setting(i))) { continue; } - ms = rig_strparm(parm & rig_idx2setting(i)); - if (!ms || !ms[0]) { if (parm != DUMMY_ALL && parm != RIG_PARM_SET(DUMMY_ALL)) { rig_debug(RIG_DEBUG_BUG, "unknown parm idx %d\n", i); } - continue; } + int written; if (RIG_PARM_IS_FLOAT(rig_idx2setting(i))) { - len += snprintf(str + len, nlen - len, - "%s(%.g..%.g/%.g) ", - ms, - gran[i].min.f, - gran[i].max.f, - gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%.g..%.g/%.g) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); } else if (RIG_PARM_IS_STRING(rig_idx2setting(i))) { if (gran[i].step.s) { - len += snprintf(str + len, nlen - len, - "%s(%s) ", - ms, - gran[i].step.s); + written = snprintf(str + len, nlen - len, "%s(%s) ", ms, gran[i].step.s); + } + else + { + continue; } } else { - len += snprintf(str + len, nlen - len, - "%s(%d..%d/%d) ", - ms, - gran[i].min.i, - gran[i].max.i, - gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); } - check_buffer_overflow(str, len, nlen); + if (written < 0 || written >= nlen - len) + { + // Truncate and stop further processing if the buffer is full + len = nlen - 1; + str[len] = '\0'; + break; + } + len += written; + + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; + } } return len; } - -int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm, - const gran_t *gran) +int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm, const gran_t *gran) { int i, len = 0; - *str = '\0'; if (parm == ROT_PARM_NONE) @@ -616,50 +646,50 @@ int rot_sprintf_parm_gran(char *str, int nlen, setting_t parm, for (i = 0; i < RIG_SETTING_MAX; i++) { const char *ms; - if (!(parm & rig_idx2setting(i))) { continue; } - ms = rot_strparm(parm & rig_idx2setting(i)); - if (!ms || !ms[0]) { if (parm != DUMMY_ALL && parm != ROT_PARM_SET(DUMMY_ALL)) { rig_debug(RIG_DEBUG_BUG, "unknown parm idx %d\n", i); } - continue; } + int written; if (ROT_PARM_IS_FLOAT(rig_idx2setting(i))) { - len += snprintf(str + len, nlen - len, - "%s(%f..%f/%f) ", - ms, - gran[i].min.f, - gran[i].max.f, - gran[i].step.f); + written = snprintf(str + len, nlen - len, "%s(%f..%f/%f) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); } else { - len += snprintf(str + len, nlen - len, - "%s(%d..%d/%d) ", - ms, - gran[i].min.i, - gran[i].max.i, - gran[i].step.i); + written = snprintf(str + len, nlen - len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); } - check_buffer_overflow(str, len, nlen); + if (written < 0 || written >= nlen - len) + { + // Truncate and stop further processing if the buffer is full + len = nlen - 1; + str[len] = '\0'; + break; + } + len += written; + + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; + } } return len; } - int rig_sprintf_vfop(char *str, int nlen, vfo_op_t op) { int i, len = 0; commit e56f8187614b2702fb584117a006a2e789ceea3f Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 11:39:51 2024 -0600 Fix overrunning write in gemeni.c diff --git a/amplifiers/gemini/gemini.h b/amplifiers/gemini/gemini.h index 94ecc26c1..d32d1db0c 100644 --- a/amplifiers/gemini/gemini.h +++ b/amplifiers/gemini/gemini.h @@ -47,7 +47,7 @@ struct gemini_priv_data double vswr; int current; // Amps int temperature; // Centigrade - char state[5]; + char state[8]; int ptt; char trip[256]; }; commit d5dd12d50d824d4655f4c3a0e8b3cffdc464df56 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 11:38:27 2024 -0600 Fix overrunning write in newcat.c diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 8549048b9..1706f54a1 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -8096,7 +8096,7 @@ int newcat_get_channel(RIG *rig, vfo_t vfo, channel_t *chan, int read_only) if (priv->ret_data[28] != ';') // must have TAG data? { // get the TAG data - sscanf(&priv->ret_data[28], "%32s", chan->tag); + sscanf(&priv->ret_data[28], "%31s", chan->tag); char *p = strchr(chan->tag, ';'); if (p) { *p = 0; } commit 45cc53a5265677f572f4526d750ee546bb4390c4 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 11:36:45 2024 -0600 Fix potential overflow in sprintflst.c diff --git a/src/sprintflst.c b/src/sprintflst.c index eada0d7b6..800f0a80d 100644 --- a/src/sprintflst.c +++ b/src/sprintflst.c @@ -719,7 +719,6 @@ int rig_sprintf_scan(char *str, int nlen, scan_t rscan) return len; } - int rot_sprintf_status(char *str, int nlen, rot_status_t status) { int len = 0; @@ -735,20 +734,33 @@ int rot_sprintf_status(char *str, int nlen, rot_status_t status) for (i = 0; i < HAMLIB_MAX_ROTORS; i++) { - const char *sv; - sv = rot_strstatus(status & ROT_STATUS_N(i)); + const char *sv = rot_strstatus(status & ROT_STATUS_N(i)); if (sv && sv[0] && (strstr(sv, "None") == 0)) { - len += snprintf(str + len, nlen - len, "%s ", sv); + int written = snprintf(str + len, nlen - len, "%s ", sv); + if (written < 0 || written >= nlen - len) + { + // Truncate and break if there's no space left + len = nlen - 1; + str[len] = '\0'; + break; + } + len += written; } - check_buffer_overflow(str, len, nlen); + if (len >= nlen) + { + // Ensure null-termination and avoid overflow + str[nlen - 1] = '\0'; + break; + } } return len; } + int rig_sprintf_spectrum_modes(char *str, int nlen, const enum rig_spectrum_mode_e *modes) { commit 750adb40b53f89889b802bc64100ce095f114dc2 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 11:30:04 2024 -0600 Fix cleartext warning in rigctl_parse.c diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 4565f8779..ebe9df723 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -5518,8 +5518,9 @@ declare_proto_rig(password) } else { - rig_debug(RIG_DEBUG_ERR, "%s: password error, '%s'!='%s'\n", __func__, - key, rigctld_password); + //rig_debug(RIG_DEBUG_ERR, "%s: password error, '%s'!='%s'\n", __func__, + // key, rigctld_password); + rig_debug(RIG_DEBUG_ERR, "%s: password error\n", __func__); } RETURNFUNC2(retval); commit b763761d9e307b4023e8a28d1dcbdc0116a5ff12 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 11:26:18 2024 -0600 Fix cleartext warning in rigctl_parse.c and rotctl_parse.c diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index e54c18263..4565f8779 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -1879,8 +1879,9 @@ readline_repeat: else { fprintf(fout, - "%s: error = %s\n", - cmd_entry->name, + //"%s: error = %s\n", + //cmd_entry->name, + "error = %s\n", rigerror(retcode)); } } diff --git a/tests/rotctl_parse.c b/tests/rotctl_parse.c index 08807d6fc..c47457645 100644 --- a/tests/rotctl_parse.c +++ b/tests/rotctl_parse.c @@ -1489,7 +1489,8 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, const char *argv[], { if (cmd_entry->name != NULL) { - fprintf(fout, "%s: error = %s\n", cmd_entry->name, rigerror(retcode)); + //fprintf(fout, "%s: error = %s\n", cmd_entry->name, rigerror(retcode)); + fprintf(fout, "error = %s\n", rigerror(retcode)); } } } commit d302b8fabd713cfbebd53679ad5fb685122903cc Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 11:14:14 2024 -0600 Fix sscanf in rigctl_parse.c diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index d90fdda5a..e54c18263 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -825,7 +825,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc, retcode = fscanf(fin, "%s", ++pcmd); - if (retcode == 0) { rig_debug(RIG_DEBUG_WARN, "%s: unable to scan %c\n", __func__, *(pcmd - 1)); } + if (retcode == 0 || retcode == EOF) { rig_debug(RIG_DEBUG_WARN, "%s: unable to scan %c\n", __func__, *(pcmd - 1)); } while (*++pcmd); @@ -3398,7 +3398,7 @@ declare_proto_rig(set_level) int dummy; - if (level == RIG_LEVEL_METER && sscanf(arg2, "%d", &dummy) == 0) + if (level == RIG_LEVEL_METER && sscanf(arg2, "%d", &dummy) <= 0) { if (strcmp(arg2, "COMP") == 0) { arg2 = "2"; } else if (strcmp(arg2, "ALC") == 0) { arg2 = "4"; } @@ -5932,7 +5932,7 @@ declare_proto_rig(cm108_get_bit) // try GPIO format first int n = sscanf(arg1, "GPIO%d", &gpio); - if (n == 0) + if (n == 0 || n == EOF) { n = sscanf(arg1, "%d", &gpio); } commit fe45fa2dfc15f2152d6294e7457ae218df972a0f Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 10:38:07 2024 -0600 Fix sscanf compare in rigctl_parse.c diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index aeb4313fd..d90fdda5a 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -5967,7 +5967,7 @@ declare_proto_rig(cm108_set_bit) // try GPIO format first int n = sscanf(arg1, "GPIO%d", &gpio); - if (n == 0) + if (n == 0 || n == EOF) { n = sscanf(arg1, "%d", &gpio); } commit 86518546db30c22a42c5ddc12e68434c4ed3f8ee Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 10:37:15 2024 -0600 Fix sscanf compare in gs232b.c diff --git a/rotators/gs232a/gs232b.c b/rotators/gs232a/gs232b.c index 65a900855..461a8491b 100644 --- a/rotators/gs232a/gs232b.c +++ b/rotators/gs232a/gs232b.c @@ -226,7 +226,7 @@ gs232b_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el) * directives, any amount of space is matched, including none in the input. */ // There's a 12PR1A rotor that only returns AZ so we may only get AZ=xxx - if (sscanf(posbuf, "AZ=%d EL=%d", &int_az, &int_el) == 0) + if (sscanf(posbuf, "AZ=%d EL=%d", &int_az, &int_el) <= 0) { // only give error if we didn't parse anything rig_debug(RIG_DEBUG_ERR, "%s: wrong reply '%s', expected AZ=xxx EL=xxx\n", commit 13f7b01d279a14078b485b9af4e999d3d4f8f5c7 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 10:36:05 2024 -0600 Fix sscanf compare in trxmanager.c diff --git a/rigs/dummy/trxmanager.c b/rigs/dummy/trxmanager.c index 9a4dcf50a..e9790e4d2 100644 --- a/rigs/dummy/trxmanager.c +++ b/rigs/dummy/trxmanager.c @@ -1114,7 +1114,7 @@ static int trxmanager_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, *tx_vfo = RIG_VFO_B; n = sscanf(response, "SP%d", &tsplit); - if (n == 0) + if (n == 0 || n == EOF) { rig_debug(RIG_DEBUG_ERR, "%s error getting split from '%s'\n", __func__, response); commit 62b0a25a3ddab25c65de373dd6a83d812af5a9f1 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 10:35:06 2024 -0600 Fix sscanf compare in flrig.c diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index dac27e01e..811ce04d7 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -910,7 +910,7 @@ static int flrig_open(RIG *rig) int dummy; if (retval == RIG_ENAVAIL || value[0] == 0 - || sscanf(value, "%d", &dummy) == 0) // must not have it + || sscanf(value, "%d", &dummy) <= 0) // must not have it { priv->has_get_bwA = 0; priv->has_get_bwB = 0; // if we don't have A then surely we don't have B either commit 57c5047c3ec662cd102961346ed1d4957ea88b5b Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 10:32:59 2024 -0600 Hopefully fix codeql warning about cleartext storage of sensitive information diff --git a/tests/ampctl_parse.c b/tests/ampctl_parse.c index ed45d6f95..62e3ac080 100644 --- a/tests/ampctl_parse.c +++ b/tests/ampctl_parse.c @@ -1406,7 +1406,8 @@ int ampctl_parse(AMP *my_amp, FILE *fin, FILE *fout, char *argv[], int argc) } else { - fprintf(fout, "%s: error = %s\n", cmd_entry->name, rigerror(retcode)); + fprintf(fout, "error = %s\n", rigerror(retcode)); + //fprintf(fout, "%s: error = %s\n", cmd_entry->name, rigerror(retcode)); } } else commit 89383a553a5e6b05779479edac2af0134cb10335 Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 10:31:17 2024 -0600 Fix buffer overrun in ampctl.c diff --git a/tests/ampctl.c b/tests/ampctl.c index 6fc960bb5..6a0cf29b3 100644 --- a/tests/ampctl.c +++ b/tests/ampctl.c @@ -213,7 +213,7 @@ int main(int argc, char *argv[]) return 1; } - strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms)); + strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms) - 1); break; case 't': commit ec3978e5210f6142f33504523168f55b4a4032ac Author: Michael Black W9MDB <mdb...@ya...> Date: Sun Dec 22 06:37:50 2024 -0600 Remove vim from Dockerfile since it is not portable diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile index d92407f18..612034dce 100644 --- a/docker-build/Dockerfile +++ b/docker-build/Dockerfile @@ -4,7 +4,7 @@ FROM ubuntu:latest AS hamlib-base-image ENV DEBIAN_FRONTEND="noninteractive" TZ="Etc/UTC" RUN apt-get update \ - && apt-get install -y vim git build-essential automake libtool python-is-python3 \ + && apt-get install -y git build-essential automake libtool python-is-python3 \ && rm -rf /var/lib/apt/lists/* # Builder Image commit 2b23051c6ddb266c359ce57008d44deeab3f5bc6 Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 15:19:06 2024 -0600 Remove display of password from debug https://github.com/Hamlib/Hamlib/security/code-scanning/15 diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 5c52ad408..aeb4313fd 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -5478,7 +5478,7 @@ int rigctld_password_check(RIG *rig, const char *md5) { int retval = -RIG_EINVAL; //fprintf(fout, "password %s\n", password); - rig_debug(RIG_DEBUG_TRACE, "%s: %s == %s\n", __func__, md5, rigctld_password); + //rig_debug(RIG_DEBUG_TRACE, "%s: %s == %s\n", __func__, md5, rigctld_password); is_passwordOK = 0; char *mymd5 = rig_make_md5(rigctld_password); commit 032e530def273825892a6bfe8e4b5eef137ec529 Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 15:06:11 2024 -0600 Fix the other ts590.c problems diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 66ecd38a4..bbe80b940 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -1958,7 +1958,7 @@ struct rig_caps fx4_caps = .max_ifshift = Hz(0), // .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, // mode command is not vfo targetable - .targetable_vfo = RIG_TARGETABLE_FREQ + .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_RIG, .agc_level_count = 6, .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST, RIG_AGC_ON }, @@ -2168,7 +2168,7 @@ struct rig_caps ts590sg_caps = .max_ifshift = Hz(0), // .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, // mode command is not vfo targetable - .targetable_vfo = RIG_TARGETABLE_FREQ + .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_RIG, .agc_level_count = 6, .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST, RIG_AGC_ON }, commit a7dbebffa9297d3e9afa5c356ab74bfdb2c0243d Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 15:05:14 2024 -0600 Fix ts590.c diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 624904517..66ecd38a4 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -1738,7 +1738,7 @@ struct rig_caps ts590_caps = .max_ifshift = Hz(0), // .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, // mode command is not vfo targetable - .targetable_vfo = RIG_TARGETABLE_FREQ + .targetable_vfo = RIG_TARGETABLE_FREQ, .transceive = RIG_TRN_RIG, .agc_level_count = 6, .agc_levels = { RIG_AGC_OFF, RIG_AGC_SLOW, RIG_AGC_MEDIUM, RIG_AGC_FAST, RIG_AGC_SUPERFAST, RIG_AGC_ON }, commit 33293112744fc08f70811af4add9c7dd6f6533fa Merge: ec7103582 6bb5c4049 Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:59:06 2024 -0600 Merge branch 'master' of github.com:Hamlib/Hamlib commit 6bb5c404994308c06bdfd853642b60adb662b78f Merge: 1364996bd db00197e6 Author: Michael Black <mdb...@ya...> Date: Sat Dec 21 14:50:12 2024 -0600 Merge pull request #1639 from 8r4n/feature/multi-stage-docker-build Added multi-stage Docker build and hamlib-runtime image commit ec7103582297545948602bc833cf1883fd94e8d8 Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:47:43 2024 -0600 Fix sscanf check in aclog.c https://github.com/Hamlib/Hamlib/security/code-scanning/3206 diff --git a/rigs/dummy/aclog.c b/rigs/dummy/aclog.c index 6f8183ac0..b8b8bedd9 100644 --- a/rigs/dummy/aclog.c +++ b/rigs/dummy/aclog.c @@ -530,7 +530,7 @@ static int aclog_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) *mode = RIG_MODE_NONE; int n = sscanf(p, "<MODE>%31[^<]", modetmp); - if (n) { *mode = modeMapGetHamlib(modetmp); } + if (n == 1) { *mode = modeMapGetHamlib(modetmp); } else { rig_debug(RIG_DEBUG_ERR, "%s: Unable to parse <MODE> from '%s'\n", __func__, commit 8842ae7c2920799442bfda812fa56c241dfdeebd Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:46:39 2024 -0600 Fix sscanf check in smartsdr.c https://github.com/Hamlib/Hamlib/security/code-scanning/3208 diff --git a/rigs/flexradio/smartsdr.c b/rigs/flexradio/smartsdr.c index 16324b5bc..e91cab9c0 100644 --- a/rigs/flexradio/smartsdr.c +++ b/rigs/flexradio/smartsdr.c @@ -462,7 +462,7 @@ static int smartsdr_parse_S(RIG *rig, char *s) rig_debug(RIG_DEBUG_VERBOSE, "%s: PTT state=%s, ptt=%d\n", __func__, state, priv->ptt); } - else if (sscanf(p, "tx=%d\n", &priv->tx)) + else if (sscanf(p, "tx=%d\n", &priv->tx) == 1) { rig_debug(RIG_DEBUG_VERBOSE, "%s: tx=%d\n", __func__, priv->tx); } commit 4b4b1b0d517403f0f460f1a255358b4f1b426e0b Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:43:20 2024 -0600 Fix buffer overflow in ft991.c https://github.com/Hamlib/Hamlib/security/code-scanning/3209 diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index dfe56fe80..d2c36f37d 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -702,7 +702,7 @@ static int ft991_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, } strncat(restore_commands, priv->ret_data, - NEWCAT_DATA_LEN - strlen(restore_commands)); + NEWCAT_DATA_LEN - strlen(restore_commands) - 1); /* Change mode on VFOA */ if (RIG_OK != (err = newcat_set_mode(rig, RIG_VFO_A, tx_mode, commit e6be427c519ae3228787c728a1bdc5cc5dc31d0c Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:42:46 2024 -0600 Fix buffer overflow in ampctld.c diff --git a/tests/ampctld.c b/tests/ampctld.c index a2e00aa78..079eb068b 100644 --- a/tests/ampctld.c +++ b/tests/ampctld.c @@ -256,7 +256,7 @@ int main(int argc, char *argv[]) return 1; } - strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms)); + strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms) - 1); break; case 't': commit 72424ac144904dc9c70161fe70c64f8657e89758 Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:41:58 2024 -0600 Fix buffer overflow in rigctl.c https://github.com/Hamlib/Hamlib/security/code-scanning/3212 diff --git a/tests/rigctl.c b/tests/rigctl.c index 078d621fd..383c7185b 100644 --- a/tests/rigctl.c +++ b/tests/rigctl.c @@ -475,7 +475,7 @@ int main(int argc, char *argv[]) return 1; } - strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms)); + strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms) - 1); break; case 'o': commit 12c453ccd3cbf4455d346f7d4f42fa7061bee0cb Author: Michael Black W9MDB <mdb...@ya...> Date: Sat Dec 21 14:41:25 2024 -0600 Fix buffer overflow in rigctlcom.c https://github.com/Hamlib/Hamlib/security/code-scanning/3213 diff --git a/tests/rigctlcom.c b/tests/rigctlcom.c index 3938a4027..f81de0ce5 100644 --- a/tests/rigctlcom.c +++ b/tests/rigctlcom.c @@ -439,7 +439,7 @@ int main(int argc, char *argv[]) retur... [truncated message content] |