From e7769ec323bbeb90e684307b6a0c55328c6d7212 Mon Sep 17 00:00:00 2001 From: John Maxwell Date: Fri, 2 May 2025 09:19:37 -0700 Subject: [PATCH] Fix LT-22110: Intermittent crash in Segment.get_AnalysesRS --- src/SIL.LCModel/DomainServices/AnalysisGuessServices.cs | 4 ++++ src/SIL.LCModel/DomainServices/AnalysisOccurrence.cs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SIL.LCModel/DomainServices/AnalysisGuessServices.cs b/src/SIL.LCModel/DomainServices/AnalysisGuessServices.cs index 739258f6..b34a90cb 100644 --- a/src/SIL.LCModel/DomainServices/AnalysisGuessServices.cs +++ b/src/SIL.LCModel/DomainServices/AnalysisGuessServices.cs @@ -402,6 +402,7 @@ private IDictionary> GetAnalysis var segs = new HashSet(); foreach (ISegment seg in wordform.OccurrencesInTexts) { + if (!seg.IsValidObject) continue; if (segs.Contains(seg)) continue; segs.Add(seg); for (int i = 0; i < seg.AnalysesRS.Count; i++) @@ -462,6 +463,7 @@ private Dictionary> GetGlossCoun return counts; foreach (ISegment seg in analysis.Wordform.OccurrencesInTexts) { + if (!seg.IsValidObject) continue; if (segs.Contains(seg)) continue; segs.Add(seg); for (int i = 0; i < seg.AnalysesRS.Count; i++) @@ -732,6 +734,8 @@ private IWfiWordform GetLowercaseWordform(AnalysisOccurrence occurrence, int ws, return null; if (onlyIndexZeroLowercaseMatching && occurrence.Index != 0) return null; + if (occurrence.Segment == null || !occurrence.Segment.IsValidObject) + return null; ITsString tssWfBaseline = occurrence.BaselineText; var cf = new CaseFunctions(Cache.ServiceLocator.WritingSystemManager.Get(ws)); string sLower = cf.ToLower(tssWfBaseline.Text); diff --git a/src/SIL.LCModel/DomainServices/AnalysisOccurrence.cs b/src/SIL.LCModel/DomainServices/AnalysisOccurrence.cs index 64b2a8a3..b29ef05c 100644 --- a/src/SIL.LCModel/DomainServices/AnalysisOccurrence.cs +++ b/src/SIL.LCModel/DomainServices/AnalysisOccurrence.cs @@ -56,7 +56,7 @@ public virtual IAnalysis Analysis { get { - if (Segment?.AnalysesRS != null && Index < Segment.AnalysesRS.Count) + if (Segment != null && Segment.IsValidObject && Segment.AnalysesRS != null && Index < Segment.AnalysesRS.Count) return Segment.AnalysesRS[Index]; return null; }