From 5ba739f05d688d081a7c0559437bf872dcfce055 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Mon, 18 Nov 2024 13:25:43 +0700 Subject: [PATCH 1/4] Do not throw exceptions for empty model number --- backend/LexBoxApi/Services/HgService.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/LexBoxApi/Services/HgService.cs b/backend/LexBoxApi/Services/HgService.cs index 7155108c1..d6785ecbb 100644 --- a/backend/LexBoxApi/Services/HgService.cs +++ b/backend/LexBoxApi/Services/HgService.cs @@ -271,8 +271,17 @@ private string[] GetWsList(System.Xml.XmlElement root, string tagName) { var result = await ExecuteHgCommandServerCommand(code, "flexmodelversion", token); var text = await result.ReadAsStringAsync(token); - var json = JsonDocument.Parse(text); - return json.RootElement.GetProperty("modelversion").GetInt32(); + if (string.IsNullOrEmpty(text)) return null; + try + { + var json = JsonDocument.Parse(text); + return json.RootElement.GetProperty("modelversion").GetInt32(); + } + catch (JsonException e) + { + _logger.LogError("Malformed JSON {text} in GetModelVersionOfFlexProject: {error}", text, e.ToString()); + return null; + } } public Task RevertRepo(ProjectCode code, string revHash) From 69ef260b7a9a97f82c7263497856138f5142ec48 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Mon, 18 Nov 2024 13:32:12 +0700 Subject: [PATCH 2/4] Also don't throw on int parsing errors --- backend/LexBoxApi/Services/HgService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/LexBoxApi/Services/HgService.cs b/backend/LexBoxApi/Services/HgService.cs index d6785ecbb..19836bf37 100644 --- a/backend/LexBoxApi/Services/HgService.cs +++ b/backend/LexBoxApi/Services/HgService.cs @@ -275,7 +275,9 @@ private string[] GetWsList(System.Xml.XmlElement root, string tagName) try { var json = JsonDocument.Parse(text); - return json.RootElement.GetProperty("modelversion").GetInt32(); + if (json.RootElement.GetProperty("modelversion").TryGetInt32(out int version)) return version; + _logger.LogError("Invalid model version in GetModelVersionOfFlexProject, should be a number but got {modelversion}", json.RootElement.GetProperty("modelversion").ToString()); + return null; } catch (JsonException e) { From 075cd6302d391b4f7125c72d505fb33a5a5969d0 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Tue, 19 Nov 2024 08:00:43 +0700 Subject: [PATCH 3/4] Also don't throw exception if JSON has wrong prop --- backend/LexBoxApi/Services/HgService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/LexBoxApi/Services/HgService.cs b/backend/LexBoxApi/Services/HgService.cs index 19836bf37..80601914a 100644 --- a/backend/LexBoxApi/Services/HgService.cs +++ b/backend/LexBoxApi/Services/HgService.cs @@ -275,8 +275,8 @@ private string[] GetWsList(System.Xml.XmlElement root, string tagName) try { var json = JsonDocument.Parse(text); - if (json.RootElement.GetProperty("modelversion").TryGetInt32(out int version)) return version; - _logger.LogError("Invalid model version in GetModelVersionOfFlexProject, should be a number but got {modelversion}", json.RootElement.GetProperty("modelversion").ToString()); + if (json.RootElement.TryGetProperty("modelversion", out var modelversion) && modelversion.TryGetInt32(out int version)) return version; + _logger.LogError("Invalid JSON {text} in GetModelVersionOfFlexProject, should have one property \"modelversion\" that's a number", text); return null; } catch (JsonException e) From fd3d21742d21023c8f6cc92d19eda6a82ad64e47 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Tue, 19 Nov 2024 08:01:35 +0700 Subject: [PATCH 4/4] Minor improvment if "\n" gets returned --- backend/LexBoxApi/Services/HgService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/LexBoxApi/Services/HgService.cs b/backend/LexBoxApi/Services/HgService.cs index 80601914a..32e328943 100644 --- a/backend/LexBoxApi/Services/HgService.cs +++ b/backend/LexBoxApi/Services/HgService.cs @@ -271,7 +271,7 @@ private string[] GetWsList(System.Xml.XmlElement root, string tagName) { var result = await ExecuteHgCommandServerCommand(code, "flexmodelversion", token); var text = await result.ReadAsStringAsync(token); - if (string.IsNullOrEmpty(text)) return null; + if (string.IsNullOrWhiteSpace(text)) return null; try { var json = JsonDocument.Parse(text);