summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2023-11-12 00:32:21 +0000
committermidipix <writeonce@midipix.org>2023-11-12 00:32:21 +0000
commit5e729b21c0a1e14bf64f00cdfcdcfb7cdaff5219 (patch)
treee3a81592638d446ecb58034cde81cc30e3d4db56
parent8e4ae6eed6cb86138a7726cc450091cec81c5fd4 (diff)
downloadslibtool-5e729b21c0a1e14bf64f00cdfcdcfb7cdaff5219.tar.bz2
slibtool-5e729b21c0a1e14bf64f00cdfcdcfb7cdaff5219.tar.xz
driver: -version-info suport: strictly verify the version info argument.
-rw-r--r--src/driver/slbt_driver_ctx.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c
index fe5f19e..e4f18eb 100644
--- a/src/driver/slbt_driver_ctx.c
+++ b/src/driver/slbt_driver_ctx.c
@@ -1216,6 +1216,9 @@ static int slbt_init_version_info(
int current;
int revision;
int age;
+ int colons;
+ int fmtcnt;
+ const char * ch;
if (!verinfo->verinfo && !verinfo->vernumber)
return 0;
@@ -1230,9 +1233,21 @@ static int slbt_init_version_info(
current = revision = age = 0;
- sscanf(verinfo->verinfo,"%d:%d:%d",
+ for (colons=0, ch=verinfo->verinfo; *ch; ch++)
+ if (*ch == ':')
+ colons++;
+
+ fmtcnt = sscanf(verinfo->verinfo,"%d:%d:%d",
&current,&revision,&age);
+ if (!fmtcnt || (fmtcnt > 3) || (fmtcnt != colons + 1)) {
+ slbt_dprintf(ictx->fdctx.fderr,
+ "%s: error: invalid version info: "
+ "supported argument format is %%d[:%%d[:%%d]].\n",
+ argv_program_name(ictx->cctx.targv[0]));
+ return -1;
+ }
+
if (current < age) {
if (ictx->cctx.drvflags & SLBT_DRIVER_VERBOSITY_ERRORS)
slbt_dprintf(ictx->fdctx.fderr,