From 500a57738b149cd1124f2d1cee01ed60f637c53b Mon Sep 17 00:00:00 2001 From: Emilio Perez Date: Tue, 7 Mar 2023 11:23:45 +0000 Subject: [PATCH] Validate target record name when creating an alias This fixes issue #312 by printing an error when a field is specified --- .../database/src/ioc/dbStatic/dbLexRoutines.c | 2 +- modules/database/test/ioc/db/Makefile | 2 ++ modules/database/test/ioc/db/dbStaticTest.c | 20 +++++++++++++++++-- .../test/ioc/db/dbStaticTestAlias1.db | 4 ++++ .../test/ioc/db/dbStaticTestAlias2.db | 4 ++++ 5 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 modules/database/test/ioc/db/dbStaticTestAlias1.db create mode 100644 modules/database/test/ioc/db/dbStaticTestAlias2.db diff --git a/modules/database/src/ioc/dbStatic/dbLexRoutines.c b/modules/database/src/ioc/dbStatic/dbLexRoutines.c index 0fd250826..85af1f110 100644 --- a/modules/database/src/ioc/dbStatic/dbLexRoutines.c +++ b/modules/database/src/ioc/dbStatic/dbLexRoutines.c @@ -1258,7 +1258,7 @@ static void dbAlias(char *name, char *alias) DBENTRY dbEntry; DBENTRY *pdbEntry = &dbEntry; - if(dbRecordNameValidate(alias)) + if(dbRecordNameValidate(alias) || dbRecordNameValidate(name)) return; dbInitEntry(savedPdbbase, pdbEntry); diff --git a/modules/database/test/ioc/db/Makefile b/modules/database/test/ioc/db/Makefile index 11f74f238..ad1d3d9b7 100644 --- a/modules/database/test/ioc/db/Makefile +++ b/modules/database/test/ioc/db/Makefile @@ -181,6 +181,8 @@ dbStaticTest_SRCS += dbStaticTest.c dbStaticTest_SRCS += dbTestIoc_registerRecordDeviceDriver.cpp testHarness_SRCS += dbStaticTest.c TESTFILES += ../dbStaticTest.db +TESTFILES += ../dbStaticTestAlias1.db +TESTFILES += ../dbStaticTestAlias2.db TESTS += dbStaticTest # This runs all the test programs in a known working order: diff --git a/modules/database/test/ioc/db/dbStaticTest.c b/modules/database/test/ioc/db/dbStaticTest.c index 7cba3cec0..d118c790a 100644 --- a/modules/database/test/ioc/db/dbStaticTest.c +++ b/modules/database/test/ioc/db/dbStaticTest.c @@ -291,6 +291,18 @@ static void testDbVerify(const char *record) dbFinishEntry(&entry); } +static void testWrongAliasRecord(const char *filename) +{ + FILE *fp = NULL; + dbPath(pdbbase,"." OSI_PATH_LIST_SEPARATOR ".."); + dbOpenFile(pdbbase, filename, &fp); + if(!fp) { + testAbort("Unable to read %s", filename); + } + testOk(dbReadDatabaseFP(&pdbbase, fp, NULL, NULL) != 0, + "Wrong alias record in %s is expected to fail", filename); +} + void dbTestIoc_registerRecordDeviceDriver(struct dbBase *); MAIN(dbStaticTest) @@ -298,13 +310,14 @@ MAIN(dbStaticTest) const char *ldir; FILE *fp = NULL; - testPlan(310); + testPlan(312); testdbPrepare(); testdbReadDatabase("dbTestIoc.dbd", NULL, NULL); dbTestIoc_registerRecordDeviceDriver(pdbbase); dbPath(pdbbase,"." OSI_PATH_LIST_SEPARATOR ".."); - if(!(ldir = dbOpenFile(pdbbase, "dbStaticTest.db", &fp))) { + ldir = dbOpenFile(pdbbase, "dbStaticTest.db", &fp); + if(!fp) { testAbort("Unable to read dbStaticTest.db"); } if(dbReadDatabaseFP(&pdbbase, fp, NULL, NULL)) { @@ -312,6 +325,9 @@ MAIN(dbStaticTest) ldir, OSI_PATH_LIST_SEPARATOR); } + testWrongAliasRecord("dbStaticTestAlias1.db"); + testWrongAliasRecord("dbStaticTestAlias2.db"); + testEntry("testrec.VAL"); testEntry("testalias.VAL"); testEntry("testalias2.VAL"); diff --git a/modules/database/test/ioc/db/dbStaticTestAlias1.db b/modules/database/test/ioc/db/dbStaticTestAlias1.db new file mode 100644 index 000000000..20dc4e2f1 --- /dev/null +++ b/modules/database/test/ioc/db/dbStaticTestAlias1.db @@ -0,0 +1,4 @@ +record(x, "testrec2alias") { +} + +alias("testrec2alias.NAME", "testalias4") diff --git a/modules/database/test/ioc/db/dbStaticTestAlias2.db b/modules/database/test/ioc/db/dbStaticTestAlias2.db new file mode 100644 index 000000000..f36b66432 --- /dev/null +++ b/modules/database/test/ioc/db/dbStaticTestAlias2.db @@ -0,0 +1,4 @@ +record(x, "testrec2alias2") { +} + +alias("testrec2alias2", "testalias5.NAME")