From 27c4eb19ee32b46e4740f781d9f2470638e9f459 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Fri, 13 Dec 2024 10:39:55 -0600 Subject: [PATCH 01/40] Remove TARGETABLE_MODE from TS590.c as mode command needs VFO swap --- rigs/kenwood/ts590.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/rigs/kenwood/ts590.c b/rigs/kenwood/ts590.c index 95a9779dd..624904517 100644 --- a/rigs/kenwood/ts590.c +++ b/rigs/kenwood/ts590.c @@ -1714,7 +1714,7 @@ struct rig_caps ts590_caps = RIG_MODEL(RIG_MODEL_TS590S), .model_name = "TS-590S", .mfg_name = "Kenwood", - .version = BACKEND_VER ".17", + .version = BACKEND_VER ".18", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1736,7 +1736,9 @@ struct rig_caps ts590_caps = .max_rit = kHz(9.99), .max_xit = kHz(9.99), .max_ifshift = Hz(0), - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, +// .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, +// mode command is not vfo targetable + .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 }, @@ -1932,7 +1934,7 @@ struct rig_caps fx4_caps = RIG_MODEL(RIG_MODEL_FX4), .model_name = "FX4/C/CR/L", .mfg_name = "BG2FX", - .version = BACKEND_VER ".10", + .version = BACKEND_VER ".11", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1954,7 +1956,9 @@ struct rig_caps fx4_caps = .max_rit = kHz(9.99), .max_xit = kHz(9.99), .max_ifshift = Hz(0), - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, +// .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, +// mode command is not vfo targetable + .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 }, @@ -2140,7 +2144,7 @@ struct rig_caps ts590sg_caps = RIG_MODEL(RIG_MODEL_TS590SG), .model_name = "TS-590SG", .mfg_name = "Kenwood", - .version = BACKEND_VER ".11", + .version = BACKEND_VER ".12", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -2162,7 +2166,9 @@ struct rig_caps ts590sg_caps = .max_rit = kHz(9.99), .max_xit = kHz(9.99), .max_ifshift = Hz(0), - .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, +// .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, +// mode command is not vfo targetable + .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 }, From 1364996bd298643a288d79edde45f7fd53cf0816 Mon Sep 17 00:00:00 2001 From: Nate Bargmann Date: Thu, 19 Dec 2024 18:05:40 -0600 Subject: [PATCH 02/40] Advance to 4.7~git --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7cb321c75..c0516aab6 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~git],[hamlib-developer@lists.sourceforge.net],[hamlib],[http://www.hamlib.org]) +AC_INIT([Hamlib],[4.7~git],[hamlib-developer@lists.sourceforge.net],[hamlib],[http://www.hamlib.org]) #AC_INIT([PRODUCT_NAME], [Hamlib]) #AC_DEFINE([Hamlib], [PRODUCT_VERSION_RESOURCE]) From 74876c73ae45ed02b4f0ff45f317e59abb6212a1 Mon Sep 17 00:00:00 2001 From: Brandon Durepo Date: Fri, 20 Dec 2024 22:37:50 -0800 Subject: [PATCH 03/40] Added multi-stage Docker build and hamlib-runtime image --- docker-build/Dockerfile | 30 ++++++++++++++++++------------ docker-build/README.docker | 14 ++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile index 0700fbcac..658a1b7bb 100644 --- a/docker-build/Dockerfile +++ b/docker-build/Dockerfile @@ -1,21 +1,27 @@ -# Idea from https://github.com/ok2cqr/cqrlog +# Base Image +FROM ubuntu:latest AS hamlib-base-image -FROM ubuntu:latest +ENV DEBIAN_FRONTEND="noninteractive" TZ="Etc/UTC" -RUN apt-get update && apt-get -y upgrade +RUN apt-get update && apt-get install -y build-essential automake libtool python3 && rm -rf /var/lib/apt/lists/* -ENV DEBIAN_FRONTEND="noninteractive" TZ="Europe/London" +# Builder Image +FROM hamlib-base-image AS hamlib-builder -RUN apt-get install -y git build-essential automake libtool +COPY . /tmp/build -RUN mkdir -p /usr/local/hamlib-alpha /home/hamlib/build +WORKDIR /tmp/build -# Mount point for the git repository: -VOLUME ["/home/hamlib/build"] +RUN mkdir -p /tmp/local -# Mount point for the result of the build: -VOLUME ["/usr/local/hamlib-alpha"] +RUN ./bootstrap && ./configure --prefix=/tmp/local \ + && make clean && make -j && make install -WORKDIR /home/hamlib/build +# Runtime Image +FROM ubuntu:latest AS hamlib-runtime -ENTRYPOINT rm -rf build && mkdir -p build && cd build && ../bootstrap && ../configure --prefix=/usr/local/hamlib-alpha && make clean && make && make install +COPY --from=hamlib-builder /tmp/local/bin /usr/local/bin +COPY --from=hamlib-builder /tmp/local/lib /usr/local/lib +COPY --from=hamlib-builder /tmp/local/share /usr/local/share + +ENV LD_LIBRARY_PATH="/usr/local/lib" diff --git a/docker-build/README.docker b/docker-build/README.docker index c5ed7822c..9c3cbe693 100644 --- a/docker-build/README.docker +++ b/docker-build/README.docker @@ -1,13 +1,7 @@ -This is all about building hamlib inside docker container - so that you do not need to install dependencies on your local machine. -1. Build docker container +# Build, execute from the repository root +`docker buildx build -t hamlib-runtime -f docker-build/Dockerfile .` -(cd docker-build && docker build --no-cache -t this.registry.is.invalid/hamlib-build .) +# Run the hamlib-runtime +`docker run -it hamlib-runtime bash` -2. Build hamlib - -docker run -ti -u root -v $(pwd):/home/hamlib/build -v /usr/local/hamlib-alpha:/usr/local/hamlib-alpha this.registry.is.invalid/hamlib-build - -3. Execute hamlib - -/usr/local/hamlib-alpha/bin/rigctl From 5028a0c440e7643c25ae459f6150c8313b223a7d Mon Sep 17 00:00:00 2001 From: Brandon Durepo Date: Fri, 20 Dec 2024 23:05:03 -0800 Subject: [PATCH 04/40] Added multi-platform support for linux/arm64 and linux/amd64 --- docker-build/README.docker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-build/README.docker b/docker-build/README.docker index 9c3cbe693..44a031344 100644 --- a/docker-build/README.docker +++ b/docker-build/README.docker @@ -1,6 +1,6 @@ # Build, execute from the repository root -`docker buildx build -t hamlib-runtime -f docker-build/Dockerfile .` +`docker buildx build --platform linux/amd64,linux/arm64 -t hamlib-runtime -f docker-build/Dockerfile .` # Run the hamlib-runtime `docker run -it hamlib-runtime bash` From 50e10f758223e456e1304e7b8ae8d2092d89a914 Mon Sep 17 00:00:00 2001 From: Brandon Durepo Date: Sat, 21 Dec 2024 07:52:54 -0800 Subject: [PATCH 05/40] Add support for the hamlib-base-image and hamlib-runtime targets - support the arm64 and amd64 platforms on both a base-image and runtime --- docker-build/Dockerfile | 19 +++++----- docker-build/README.Docker.md | 71 +++++++++++++++++++++++++++++++++++ docker-build/README.docker | 7 ---- 3 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 docker-build/README.Docker.md delete mode 100644 docker-build/README.docker diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile index 658a1b7bb..d5c490a73 100644 --- a/docker-build/Dockerfile +++ b/docker-build/Dockerfile @@ -3,25 +3,24 @@ FROM ubuntu:latest AS hamlib-base-image ENV DEBIAN_FRONTEND="noninteractive" TZ="Etc/UTC" -RUN apt-get update && apt-get install -y build-essential automake libtool python3 && rm -rf /var/lib/apt/lists/* +RUN apt-get update \ + && apt-get install -y build-essential automake libtool python3.6 \ + && rm -rf /var/lib/apt/lists/* # Builder Image + FROM hamlib-base-image AS hamlib-builder -COPY . /tmp/build +COPY . /wip -WORKDIR /tmp/build +WORKDIR /wip -RUN mkdir -p /tmp/local - -RUN ./bootstrap && ./configure --prefix=/tmp/local \ - && make clean && make -j && make install +RUN ./bootstrap && ./configure --prefix=/usr/local \ + && make clean && make -j${nproc} && make install # Runtime Image FROM ubuntu:latest AS hamlib-runtime -COPY --from=hamlib-builder /tmp/local/bin /usr/local/bin -COPY --from=hamlib-builder /tmp/local/lib /usr/local/lib -COPY --from=hamlib-builder /tmp/local/share /usr/local/share +COPY --from=hamlib-builder /usr/local /usr/local ENV LD_LIBRARY_PATH="/usr/local/lib" diff --git a/docker-build/README.Docker.md b/docker-build/README.Docker.md new file mode 100644 index 000000000..7e2af0a9d --- /dev/null +++ b/docker-build/README.Docker.md @@ -0,0 +1,71 @@ + +# Build the hamlib-runtime from the repository root + +``` +docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --target hamlib-runtime \ + -t hamlib-runtime \ + -f docker-build/Dockerfile \ + . +``` + +# Interactively, develop with the hamlib-base-image + + +## Support the linux/amd64 and linux/arm64 platforms +``` +docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --target hamlib-base-image \ + -t hamlib-base-image \ + -f docker-build/Dockerfile \ + . +``` + +## Develop on the linux/amd64 hamlib-base-image + +``` +docker run \ + -it \ + --rm \ + --platform linux/amd64 \ + -v $(pwd):/wip \ + -w /wip \ + -u $(id -u):$(id -g) \ + hamlib-base-image bash +``` + +...or the linux/arm64 hamlib-base-image + +``` +docker run \ + -it \ + --rm \ + --platform linux/arm64 \ + -v $(pwd):/wip \ + -w /wip \ + -u $(id -u):$(id -g) \ + hamlib-base-image bash +``` + +# Run the linux/amd64 hamlib-runtime + +``` +docker run \ + -it \ + --rm \ + --platform linux/amd64 \ + hamlib-runtime bash +``` + + ...or the linux/arm64 hamlib-runtime + +``` +docker run \ + -it \ + --rm \ + --platform linux/arm64 \ + hamlib-runtime bash +``` + diff --git a/docker-build/README.docker b/docker-build/README.docker deleted file mode 100644 index 44a031344..000000000 --- a/docker-build/README.docker +++ /dev/null @@ -1,7 +0,0 @@ - -# Build, execute from the repository root -`docker buildx build --platform linux/amd64,linux/arm64 -t hamlib-runtime -f docker-build/Dockerfile .` - -# Run the hamlib-runtime -`docker run -it hamlib-runtime bash` - From bef2d13e4a8443ce32bba28116398a3edf156a45 Mon Sep 17 00:00:00 2001 From: Brandon Durepo Date: Sat, 21 Dec 2024 09:25:09 -0800 Subject: [PATCH 06/40] Added git and vim to the hamlib-base-image --- docker-build/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile index d5c490a73..cf3cdfe3e 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 build-essential automake libtool python3.6 \ + && apt-get install -y vim git build-essential automake libtool python3.6 \ && rm -rf /var/lib/apt/lists/* # Builder Image From a2af87068ea6771dc6e298b21e56ec769d6b31b0 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 12:59:49 -0600 Subject: [PATCH 07/40] Fix buffer overflow in rotctld.c --- tests/rotctld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rotctld.c b/tests/rotctld.c index 0f5170850..e68227acf 100644 --- a/tests/rotctld.c +++ b/tests/rotctld.c @@ -259,7 +259,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': From a72aa0cb4171f0039f51c2112b1f523310b66ca7 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 13:00:06 -0600 Subject: [PATCH 08/40] Fix buffer overflow in rotctl.c https://github.com/Hamlib/Hamlib/security/code-scanning/3221 --- tests/rotctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rotctl.c b/tests/rotctl.c index bd2bb9fff..873c9b96e 100644 --- a/tests/rotctl.c +++ b/tests/rotctl.c @@ -231,7 +231,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': From a81c7d90c41ba6911b75d1806343b318141e6e0b Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 13:01:05 -0600 Subject: [PATCH 09/40] Fix bufferoverflow in rigswr.c --- tests/rigswr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rigswr.c b/tests/rigswr.c index e58e6a132..0caf9bb22 100644 --- a/tests/rigswr.c +++ b/tests/rigswr.c @@ -166,7 +166,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 'p': From 5f621c9f5327be25432d0d761204faa434afaee2 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 13:02:33 -0600 Subject: [PATCH 10/40] Fix bufferoverflow in rigsmtr.c https://github.com/Hamlib/Hamlib/security/code-scanning/3219 https://github.com/Hamlib/Hamlib/security/code-scanning/3217 --- tests/rigsmtr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/rigsmtr.c b/tests/rigsmtr.c index 74f8ac5b0..aae17d2ec 100644 --- a/tests/rigsmtr.c +++ b/tests/rigsmtr.c @@ -176,7 +176,7 @@ int main(int argc, char *argv[]) return 1; } - strncat(rig_conf_parms, optarg, MAXCONFLEN - strlen(rig_conf_parms)); + strncat(rig_conf_parms, optarg, MAXCONFLEN - strlen(rig_conf_parms) - 1); break; case 'M': @@ -221,7 +221,7 @@ int main(int argc, char *argv[]) strcat(rot_conf_parms, ","); } - strncat(rot_conf_parms, optarg, MAXCONFLEN - strlen(rot_conf_parms)); + strncat(rot_conf_parms, optarg, MAXCONFLEN - strlen(rot_conf_parms) - 1); break; case 'v': From db00197e6adcddd18a810f619d38ac04c87fbd69 Mon Sep 17 00:00:00 2001 From: Brandon Durepo Date: Sat, 21 Dec 2024 11:55:14 -0800 Subject: [PATCH 11/40] Added Python support --- docker-build/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile index cf3cdfe3e..d92407f18 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 python3.6 \ + && apt-get install -y vim git build-essential automake libtool python-is-python3 \ && rm -rf /var/lib/apt/lists/* # Builder Image From 3d8dbbcc1ada57a8660ccc919c98f40674df4b02 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:38:46 -0600 Subject: [PATCH 12/40] Fix bufferoverflow in rigmem.c https://github.com/Hamlib/Hamlib/security/code-scanning/3217 --- tests/rigmem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rigmem.c b/tests/rigmem.c index 79a647d59..bf73e7102 100644 --- a/tests/rigmem.c +++ b/tests/rigmem.c @@ -191,7 +191,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 'p': From 0690fbc0c532f71d02ed74106191686d31cf13ea Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:39:33 -0600 Subject: [PATCH 13/40] Fix buffer overflow in rigctltcp.c --- tests/rigctltcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rigctltcp.c b/tests/rigctltcp.c index 9d4b4b9eb..cf3a921d4 100644 --- a/tests/rigctltcp.c +++ b/tests/rigctltcp.c @@ -523,7 +523,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': From 9624f06be96bafaafaf12fe8188d7390cf5821a2 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:40:02 -0600 Subject: [PATCH 14/40] Fix buffer overflow in rigctlsync.c https://github.com/Hamlib/Hamlib/security/code-scanning/3215 --- tests/rigctlsync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rigctlsync.c b/tests/rigctlsync.c index c71d99851..a576b3af2 100644 --- a/tests/rigctlsync.c +++ b/tests/rigctlsync.c @@ -455,7 +455,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 'v': From 6cf93934a71a2ed143125a9f3b005ad38a542423 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:40:46 -0600 Subject: [PATCH 15/40] Fix buffer overflow in rigctld.c https://github.com/Hamlib/Hamlib/security/code-scanning/3214 --- tests/rigctld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/rigctld.c b/tests/rigctld.c index a287d5e5e..8ee613cf1 100644 --- a/tests/rigctld.c +++ b/tests/rigctld.c @@ -534,7 +534,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; From 12c453ccd3cbf4455d346f7d4f42fa7061bee0cb Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:41:25 -0600 Subject: [PATCH 16/40] Fix buffer overflow in rigctlcom.c https://github.com/Hamlib/Hamlib/security/code-scanning/3213 --- tests/rigctlcom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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[]) return 1; } - strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms)); + strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms) - 1); break; case 'v': From 72424ac144904dc9c70161fe70c64f8657e89758 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:41:58 -0600 Subject: [PATCH 17/40] Fix buffer overflow in rigctl.c https://github.com/Hamlib/Hamlib/security/code-scanning/3212 --- tests/rigctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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': From e6be427c519ae3228787c728a1bdc5cc5dc31d0c Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:42:46 -0600 Subject: [PATCH 18/40] Fix buffer overflow in ampctld.c --- tests/ampctld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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': From 4b4b1b0d517403f0f460f1a255358b4f1b426e0b Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:43:20 -0600 Subject: [PATCH 19/40] Fix buffer overflow in ft991.c https://github.com/Hamlib/Hamlib/security/code-scanning/3209 --- rigs/yaesu/ft991.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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, From 8842ae7c2920799442bfda812fa56c241dfdeebd Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:46:39 -0600 Subject: [PATCH 20/40] Fix sscanf check in smartsdr.c https://github.com/Hamlib/Hamlib/security/code-scanning/3208 --- rigs/flexradio/smartsdr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); } From ec7103582297545948602bc833cf1883fd94e8d8 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 14:47:43 -0600 Subject: [PATCH 21/40] Fix sscanf check in aclog.c https://github.com/Hamlib/Hamlib/security/code-scanning/3206 --- rigs/dummy/aclog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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, "%31[^<]", modetmp); - if (n) { *mode = modeMapGetHamlib(modetmp); } + if (n == 1) { *mode = modeMapGetHamlib(modetmp); } else { rig_debug(RIG_DEBUG_ERR, "%s: Unable to parse from '%s'\n", __func__, From a7dbebffa9297d3e9afa5c356ab74bfdb2c0243d Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 15:05:14 -0600 Subject: [PATCH 22/40] Fix ts590.c --- rigs/kenwood/ts590.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 }, From 032e530def273825892a6bfe8e4b5eef137ec529 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 15:06:11 -0600 Subject: [PATCH 23/40] Fix the other ts590.c problems --- rigs/kenwood/ts590.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 }, From 2b23051c6ddb266c359ce57008d44deeab3f5bc6 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sat, 21 Dec 2024 15:19:06 -0600 Subject: [PATCH 24/40] Remove display of password from debug https://github.com/Hamlib/Hamlib/security/code-scanning/15 --- tests/rigctl_parse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); From ec3978e5210f6142f33504523168f55b4a4032ac Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 06:37:50 -0600 Subject: [PATCH 25/40] Remove vim from Dockerfile since it is not portable --- docker-build/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 89383a553a5e6b05779479edac2af0134cb10335 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 10:31:17 -0600 Subject: [PATCH 26/40] Fix buffer overrun in ampctl.c --- tests/ampctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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': From 57c5047c3ec662cd102961346ed1d4957ea88b5b Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 10:32:59 -0600 Subject: [PATCH 27/40] Hopefully fix codeql warning about cleartext storage of sensitive information --- tests/ampctl_parse.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From 62b0a25a3ddab25c65de373dd6a83d812af5a9f1 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 10:35:06 -0600 Subject: [PATCH 28/40] Fix sscanf compare in flrig.c --- rigs/dummy/flrig.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 13f7b01d279a14078b485b9af4e999d3d4f8f5c7 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 10:36:05 -0600 Subject: [PATCH 29/40] Fix sscanf compare in trxmanager.c --- rigs/dummy/trxmanager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); From 86518546db30c22a42c5ddc12e68434c4ed3f8ee Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 10:37:15 -0600 Subject: [PATCH 30/40] Fix sscanf compare in gs232b.c --- rotators/gs232a/gs232b.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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", From fe45fa2dfc15f2152d6294e7457ae218df972a0f Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 10:38:07 -0600 Subject: [PATCH 31/40] Fix sscanf compare in rigctl_parse.c --- tests/rigctl_parse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); } From d302b8fabd713cfbebd53679ad5fb685122903cc Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 11:14:14 -0600 Subject: [PATCH 32/40] Fix sscanf in rigctl_parse.c --- tests/rigctl_parse.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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); } From b763761d9e307b4023e8a28d1dcbdc0116a5ff12 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 11:26:18 -0600 Subject: [PATCH 33/40] Fix cleartext warning in rigctl_parse.c and rotctl_parse.c --- tests/rigctl_parse.c | 5 +++-- tests/rotctl_parse.c | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) 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)); } } } From 750adb40b53f89889b802bc64100ce095f114dc2 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 11:30:04 -0600 Subject: [PATCH 34/40] Fix cleartext warning in rigctl_parse.c --- tests/rigctl_parse.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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); From 45cc53a5265677f572f4526d750ee546bb4390c4 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 11:36:45 -0600 Subject: [PATCH 35/40] Fix potential overflow in sprintflst.c --- src/sprintflst.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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) { From d5dd12d50d824d4655f4c3a0e8b3cffdc464df56 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 11:38:27 -0600 Subject: [PATCH 36/40] Fix overrunning write in newcat.c --- rigs/yaesu/newcat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; } From e56f8187614b2702fb584117a006a2e789ceea3f Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 11:39:51 -0600 Subject: [PATCH 37/40] Fix overrunning write in gemeni.c --- amplifiers/gemini/gemini.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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]; }; From e262fb82c262f1b6e279e337f1642a6689256f94 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 12:27:43 -0600 Subject: [PATCH 38/40] Fix several potential overflows in sprintflst.c --- src/sprintflst.c | 250 ++++++++++++++++++++++++++--------------------- 1 file changed, 140 insertions(+), 110 deletions(-) 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; From f9185d1d2469fad84aa925396606c6b752b17e49 Mon Sep 17 00:00:00 2001 From: Michael Black W9MDB Date: Sun, 22 Dec 2024 15:19:38 -0600 Subject: [PATCH 39/40] Print error on bufferoverflow and astyle sprintflst.c --- src/sprintflst.c | 82 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 12 deletions(-) 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; } From 8589d5c6bc24809cae1c8cfbdab589b92641d9db Mon Sep 17 00:00:00 2001 From: George Baltz N3GB Date: Sun, 22 Dec 2024 15:50:56 -0500 Subject: [PATCH 40/40] 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) --- rigs/dummy/aclog.c | 2 +- rigs/dummy/flrig.c | 8 ++++---- rigs/dummy/netrigctl.c | 2 +- rigs/dummy/tci1x.c | 2 +- rigs/icom/frame.c | 11 +++++------ rigs/icom/icom.c | 4 ++-- rigs/kenwood/kenwood.c | 11 +++++------ rigs/yaesu/ft1000mp.c | 4 ++-- rigs/yaesu/newcat.c | 4 ++-- src/rig.c | 14 ++++++-------- 10 files changed, 29 insertions(+), 33 deletions(-) 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));