AV в FR 3.19
Периодически при формировании отчета вылетает ошибка Access Violation. Останов происходит на последней строке функции StrToVarType, unit fs_itools.
Появляется она не всегда, примерно один раз из 20, на разных отчетах. Единственная закономерность, которую я заметил - цепочка вызовов в момент ошибки (первые три строки всегда одни и теже):
StrToVarType
ParseMethodSyntax
TfsMethodHelper.Create (первый параметр все время разный)
TfsClassVariable.AddMethod (либо TfsScript.AddMethod)
далее варианты разные...
В предыдущих версиях такого не было. Delphi 6 UpdPack2
Появляется она не всегда, примерно один раз из 20, на разных отчетах. Единственная закономерность, которую я заметил - цепочка вызовов в момент ошибки (первые три строки всегда одни и теже):
StrToVarType
ParseMethodSyntax
TfsMethodHelper.Create (первый параметр все время разный)
TfsClassVariable.AddMethod (либо TfsScript.AddMethod)
далее варианты разные...
В предыдущих версиях такого не было. Delphi 6 UpdPack2
Комментарии
IndexOf(Name) если Name='' возвращает 0, а в FItems.Objects[0] (а может быть и в Objects с другим индексом) не обязательно лежит ссылка на объект TfsCustomVariable, иногда на TFunctions, отсюда и AV.
Вопрос к разработчикам. Какой из двух вариантов if корректнее?
Result := TfsCustomVariable.Create(Name, StrToVarType(TypeName, Script), TypeName);
Параметр TypeName, передаваемый в StrToVarType равен ''. В StrToVarType вызывается Script.Find(TypeName), из него FindLocal(Name), который в этом случае возвращает ссылку на объект TFunctions, приведенную к TfsCustomVariable, а такое приведение некорректно. В результате StrToVarType возвращает либо "мусор" либо появляется AV.