From 1a4a189dbcb972788efade98778ecc9a5705fbab Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Mon, 2 Oct 2023 10:48:26 -0500 Subject: [PATCH] Try to make rigctl(d)/rotctl(d) a little more robust in case of bad data https://github.com/Hamlib/Hamlib/issues/1351 --- tests/rigctl_parse.c | 11 ++++++----- tests/rotctl_parse.c | 12 ++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 6942abe5b..7d148adda 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -550,6 +550,7 @@ static int scanfc(FILE *fin, const char *format, void *p) int ret; *(char *)p = 0; + ret = fscanf(fin, format, p); if (ret < 0) @@ -561,16 +562,16 @@ static int scanfc(FILE *fin, const char *format, void *p) if (!feof(fin)) { - rig_debug(RIG_DEBUG_ERR, - "fscanf: parsing '%s' with '%s'\n", - (char *)p, - format); + rig_debug(RIG_DEBUG_TRACE,"%s fscanf of:", __func__); + dump_hex((unsigned char *)p, strlen(p)); + rig_debug(RIG_DEBUG_TRACE," failed with format '%s'\n", format); + ret = 0x0a; } } if (ret < 1) { rig_debug(RIG_DEBUG_TRACE, "%s: ret=%d\n", __func__, ret); } - if (ferror(fin)) { rig_debug(RIG_DEBUG_TRACE, "%s: errno=%d, %s\n", __func__, errno, strerror(errno)); } + if (ferror(fin)) { rig_debug(RIG_DEBUG_ERR, "%s: errno=%d, %s\n", __func__, errno, strerror(errno)); } return ret; } diff --git a/tests/rotctl_parse.c b/tests/rotctl_parse.c index 0db890683..2bc17829d 100644 --- a/tests/rotctl_parse.c +++ b/tests/rotctl_parse.c @@ -405,10 +405,18 @@ static int scanfc(FILE *fin, const char *format, void *p) continue; } - rig_debug(RIG_DEBUG_ERR, "fscanf: %s\n", strerror(errno)); - rig_debug(RIG_DEBUG_ERR, "fscanf: parsing '%s' with '%s'\n", (char *)p, format); + if (!feof(fin)) + { + rig_debug(RIG_DEBUG_TRACE,"%s fscanf of:", __func__); + dump_hex((unsigned char *)p, strlen(p)); + rig_debug(RIG_DEBUG_TRACE," failed with format '%s'\n", format); + ret = 0x0a; + } + } + if (ferror(fin)) { rig_debug(RIG_DEBUG_ERR, "%s: errno=%d, %s\n", __func__, errno, strerror(errno)); } + return ret; } while (1);