From 7c2e8c1c5d01cdda9005c1ee99cf1ad8c82e59a3 Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Fri, 6 Jan 2023 15:09:55 +0100 Subject: [PATCH] comm: make sure that our version check is reliable Rework the logic of the version check used in the database migration, and make sure that it is full functional to avoid confusion at release time. Changelog-Fixed: comm: make sure that our version check is reliable Reported-by: @urza Signed-off-by: Vincenzo Palazzo --- common/test/Makefile | 7 +++++++ common/test/run-version.c | 16 ++++++++++++++++ common/version.c | 13 +++++++++++++ common/version.h | 5 +++++ wallet/db.c | 8 -------- 5 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 common/test/run-version.c diff --git a/common/test/Makefile b/common/test/Makefile index 3304f2f5f763..2df9e1284cad 100644 --- a/common/test/Makefile +++ b/common/test/Makefile @@ -90,4 +90,11 @@ common/test/run-bolt12_merkle-json: \ common/base32.o \ common/wireaddr.o + +common/test/run-version: \ + common/amount.o \ + wire/fromwire.o \ + wire/towire.o + + check-units: $(COMMON_TEST_PROGRAMS:%=unittest/%) diff --git a/common/test/run-version.c b/common/test/run-version.c new file mode 100644 index 000000000000..0e04b4cb061a --- /dev/null +++ b/common/test/run-version.c @@ -0,0 +1,16 @@ +#include "config.h" +#include "../version.c" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + common_setup(argv[0]); + + assert(cmp_release_version("v22.11")); + assert(cmp_release_version("v22.11.1")); + assert(cmp_release_version("v22.11.1-6-gdf29990-modded") == false); + + common_shutdown(); +} diff --git a/common/version.c b/common/version.c index e64bc2595799..80869b7f20fe 100644 --- a/common/version.c +++ b/common/version.c @@ -1,8 +1,10 @@ #include "config.h" #include +#include #include #include #include +#include /* Only common/version.c can safely include this. */ # include "version_gen.h" @@ -20,3 +22,14 @@ char *version_and_exit(const void *unused UNUSED) } exit(0); } + +static bool cmp_release_version(const char *version) { + const char *regex = "^v\\d{2}.\\d{2}(.\\d{1, 3})?$"; + return tal_strreg(NULL, version, regex); +} + +/* Released versions are of form v[year].[month]?(.patch)* */ +bool is_released_version(void) +{ + return cmp_release_version(version()); +} diff --git a/common/version.h b/common/version.h index b2db426dfd0a..90b7c824d12b 100644 --- a/common/version.h +++ b/common/version.h @@ -1,9 +1,14 @@ #ifndef LIGHTNING_COMMON_VERSION_H #define LIGHTNING_COMMON_VERSION_H #include "config.h" +#include char *version_and_exit(const void *unused); const char *version(void); +/* check if the current version is a release version. + * + * Released versions are of form v[year].[month]?(.patch)* */ +bool is_released_version(void); #define opt_register_version() \ opt_register_early_noarg("--version|-V", version_and_exit, NULL, \ diff --git a/wallet/db.c b/wallet/db.c index 5286d8cc12f0..4a45167f5fda 100644 --- a/wallet/db.c +++ b/wallet/db.c @@ -945,14 +945,6 @@ static struct migration dbmigrations[] = { /* FIXME: Remove payments local_offer_id column! */ }; -/* Released versions are of form v{num}[.{num}]* */ -static bool is_released_version(void) -{ - if (version()[0] != 'v') - return false; - return strcspn(version()+1, ".0123456789") == strlen(version()+1); -} - /** * db_migrate - Apply all remaining migrations from the current version */