From 8e005452672bda1f1cd7fd2e7957ce6bdff934ee Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 26 Feb 2021 14:52:50 +0100 Subject: global-functions: $ScriptInstallUpdate: validate syntax of changelog and migration code --- global-functions | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/global-functions b/global-functions index aba1cff..7de3d72 100644 --- a/global-functions +++ b/global-functions @@ -730,27 +730,40 @@ :if ($Result->"status" = "finished") do={ :set ChangeLogCode ($Result->"data"); } - :set NotificationMessage ($NotificationMessage . "\n\nChanges:"); - [ :parse $ChangeLogCode ]; - :for I from=($GlobalConfigVersion + 1) to=$ExpectedConfigVersion do={ - :local Migration ($GlobalConfigMigration->[ :tostr $I ]); - :if ([ :typeof $Migration ] = "str") do={ - $LogPrintExit2 info $0 ("Applying migration: " . $Migration) false; - [ :parse $Migration ]; - } - :set NotificationMessage ($NotificationMessage . \ - "\n " . [ $IfThenElse ($NotificationsWithSymbols = true) ("\E2\97\8F") "*" ] . " " . \ - $GlobalConfigChanges->[ :tostr $I ]); - $LogPrintExit2 info $0 ("Change: " . $GlobalConfigChanges->[ :tostr $I ]) false; - } - :set GlobalConfigChanges; - :set GlobalConfigMigration; } on-error={ $LogPrintExit2 warning $0 ("Failed fetching changes!") false; :set NotificationMessage ($NotificationMessage . \ "\n\nChanges are not available."); } + :if ([ :len $ChangeLogCode ] > 0) do={ + :if ([ $ValidateSyntax $ChangeLogCode ] = true) do={ + :set NotificationMessage ($NotificationMessage . "\n\nChanges:"); + [ :parse $ChangeLogCode ]; + :for I from=($GlobalConfigVersion + 1) to=$ExpectedConfigVersion do={ + :local Migration ($GlobalConfigMigration->[ :tostr $I ]); + :if ([ :typeof $Migration ] = "str") do={ + :if ([ $ValidateSyntax $Migration ] = true) do={ + $LogPrintExit2 info $0 ("Applying migration: " . $Migration) false; + [ :parse $Migration ]; + } else={ + $LogPrintExit2 warning $0 ("Migration code for change " . $I . " failed syntax validation!") false; + } + } + :set NotificationMessage ($NotificationMessage . \ + "\n " . [ $IfThenElse ($NotificationsWithSymbols = true) ("\E2\97\8F") "*" ] . " " . \ + $GlobalConfigChanges->[ :tostr $I ]); + $LogPrintExit2 info $0 ("Change: " . $GlobalConfigChanges->[ :tostr $I ]) false; + } + :set GlobalConfigChanges; + :set GlobalConfigMigration; + } else={ + $LogPrintExit2 warning $0 ("The changelog failed syntax validation!") false; + :set NotificationMessage ($NotificationMessage . \ + "\n\nChanges are not available."); + } + } + :local Link; :if ($IDonate != true) do={ :set NotificationMessage ($NotificationMessage . \ -- cgit v1.2.3-54-g00ecf