From f9240d76a2db5fb370bb7fbabdf2293c10b4cb46 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 3 Aug 2022 12:53:03 -0500 Subject: [PATCH] fix(developer): stack overflow when compiling non-web keyboard Fixes #7030. Prevents a stack overflow / loop when the web target is removed from a keyboard and it has already been tested on web, and the user presses the Compile button. --- .../Keyman.Developer.UI.Project.kmnProjectFileUI.pas | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/developer/src/tike/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas b/developer/src/tike/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas index 57481848c2..9b2dd467c5 100644 --- a/developer/src/tike/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas +++ b/developer/src/tike/project/Keyman.Developer.UI.Project.kmnProjectFileUI.pas @@ -67,6 +67,7 @@ uses UfrmKeymanWizard, UfrmKeyboardFonts, UfrmMDIEditor, + UKeymanTargets, UmodWebHttpServer, Keyman.Developer.System.ServerAPI, Keyman.Developer.UI.ServerUI, @@ -133,7 +134,8 @@ begin if Result and TServerDebugAPI.Running and - TServerDebugAPI.IsKeyboardRegistered(ProjectFile.TargetFileName) then + TServerDebugAPI.IsKeyboardRegistered(ProjectFile.TargetFileName) and + (ProjectFile.Targets * KMWKeymanTargets <> []) then TestKeymanWeb(True); end; @@ -235,7 +237,13 @@ begin Exit(False); wizard := editor as TfrmKeymanWizard; + if ProjectFile.Targets * KMWKeymanTargets = [] then + Exit(False); + FCompiledName := ProjectFile.JSTargetFilename; + if FCompiledName = '' then + Exit(False); + if not TestKeyboardState(FCompiledName, FSilent) then Exit(False);