From 8de2f06f56397f4236a0cf3902d87031343db27a Mon Sep 17 00:00:00 2001 From: Mr-Rm Date: Thu, 4 Dec 2025 23:38:41 +0400 Subject: [PATCH 1/3] =?UTF-8?q?fix=20#1626.1:=20=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BA=D0=B0=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D0=BC?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ValueTable/ValueTableColumnCollection.cs | 8 +++++- tests/valuetable.os | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs b/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs index 6375da718..703c97506 100644 --- a/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs +++ b/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs @@ -45,7 +45,10 @@ public ValueTableColumnCollection(ValueTable owner) /// КолонкаТаблицыЗначений [ContextMethod("Добавить", "Add")] public ValueTableColumn Add(string name, TypeDescription type = null, string title = null, int width = 0) - { + { + if (!Utils.IsValidIdentifier(name)) + throw ColumnException.WrongColumnName(name); + if (FindColumnByName(name) != null) throw ColumnException.DuplicatedColumnName(name); @@ -67,6 +70,9 @@ public ValueTableColumn Add(string name, TypeDescription type = null, string tit [ContextMethod("Вставить", "Insert")] public ValueTableColumn Insert(int index, string name, TypeDescription type = null, string title = null, int width = 0) { + if (!Utils.IsValidIdentifier(name)) + throw ColumnException.WrongColumnName(name); + if (FindColumnByName(name) != null) throw ColumnException.DuplicatedColumnName(name); diff --git a/tests/valuetable.os b/tests/valuetable.os index 27fd68d6f..3f0cae945 100644 --- a/tests/valuetable.os +++ b/tests/valuetable.os @@ -78,6 +78,11 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьЗапятуюВИменахКолонок_СПустыми"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИсключениеДляИндекса"); + + ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеПриДобавленииКолонкиСНевернымИменем"); + ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеПриВставкеКолонкиСНевернымИменем"); + + Возврат ВсеТесты; КонецФункции @@ -1234,3 +1239,25 @@ ВызватьИсключение "Ожидали исключение, но его не было"; КонецПроцедуры + +Процедура ТестДолжен_ВызватьИсключениеПриДобавленииКолонкиСНевернымИменем() Экспорт + ТЗ = Новый ТаблицаЗначений(); + Попытка + ТЗ.Колонки.Добавить("!@#"); + Исключение + Возврат; + КонецПопытки; + + ВызватьИсключение "Должно было быть выдано исключение, но его не было"; +КонецПроцедуры + +Процедура ТестДолжен_ВызватьИсключениеПриВставкеКолонкиСНевернымИменем() Экспорт + ТЗ = Новый ТаблицаЗначений(); + Попытка + ТЗ.Колонки.Вставить(0,"!@#"); + Исключение + Возврат; + КонецПопытки; + + ВызватьИсключение "Должно было быть выдано исключение, но его не было"; +КонецПроцедуры From e097ab7762bade4ee6548b8f16762eca8546ec0f Mon Sep 17 00:00:00 2001 From: Mr-Rm Date: Sun, 7 Dec 2025 00:22:17 +0400 Subject: [PATCH 2/3] =?UTF-8?q?fix=20#1626.2:=20=D0=BA=D0=BE=D1=80=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BE=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BE=D1=87=D0=BD=D0=BE=D0=BC=20=D1=82=D0=B8=D0=BF?= =?UTF-8?q?=D0=B5=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contexts/ContextValuesMarshaller.cs | 7 +++-- tests/valuetable.os | 29 ++++++++++++++++++- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs b/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs index f64d2aeea..b6e5b9c7e 100644 --- a/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs +++ b/src/ScriptEngine/Machine/Contexts/ContextValuesMarshaller.cs @@ -242,8 +242,11 @@ private static object ConvertValueType(IValue value, Type type, IBslProcess proc valueObj = value.AsBoolean(); } else if (typeof(IRuntimeContextInstance).IsAssignableFrom(type)) - { - valueObj = value.AsObject(); + { + if (value.GetType().IsAssignableTo(type)) + valueObj = value.AsObject(); + else + throw new InvalidCastException(); } else if (value is EnumerationValue && typeof(EnumerationValue).IsAssignableFrom(type)) { diff --git a/tests/valuetable.os b/tests/valuetable.os index 3f0cae945..bef22a8c9 100644 --- a/tests/valuetable.os +++ b/tests/valuetable.os @@ -78,9 +78,10 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьЗапятуюВИменахКолонок_СПустыми"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИсключениеДляИндекса"); - ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеПриДобавленииКолонкиСНевернымИменем"); ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеПриВставкеКолонкиСНевернымИменем"); + ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеНаПоискеИндексаКолонкиСНевернымПримитивнымТипом"); + ВсеТесты.Добавить("ТестДолжен_ВызватьИсключениеНаПоискеИндексаКолонкиСНевернымОбъектнымТипом"); Возврат ВсеТесты; @@ -1261,3 +1262,29 @@ ВызватьИсключение "Должно было быть выдано исключение, но его не было"; КонецПроцедуры + +Процедура ТестДолжен_ВызватьИсключениеНаПоискеИндексаКолонкиСНевернымПримитивнымТипом() Экспорт + ТЗ = Новый ТаблицаЗначений(); + Попытка + ТЗ.Колонки.Индекс(0); + Исключение + Ошибка = ИнформацияОбОшибке().Описание; + юТест.ПроверитьНеРавенство(Найти(Ошибка,"Неверный тип аргумента"), 0, "Неверный вид ошибки: "+Ошибка); + Возврат; + КонецПопытки; + + ВызватьИсключение "Должно было быть выдано исключение, но его не было"; +КонецПроцедуры + +Процедура ТестДолжен_ВызватьИсключениеНаПоискеИндексаКолонкиСНевернымОбъектнымТипом() Экспорт + ТЗ = Новый ТаблицаЗначений(); + Попытка + ТЗ.Колонки.Индекс(ТЗ); + Исключение + Ошибка = ИнформацияОбОшибке().Описание; + юТест.ПроверитьНеРавенство(Найти(Ошибка,"Неверный тип аргумента"), 0, "Неверный вид ошибки: "+Ошибка); + Возврат; + КонецПопытки; + + ВызватьИсключение "Должно было быть выдано исключение, но его не было"; +КонецПроцедуры From 447af447b939e040141f8558b9ab932ca3365438 Mon Sep 17 00:00:00 2001 From: Mr-Rm Date: Sun, 7 Dec 2025 01:05:27 +0400 Subject: [PATCH 3/3] =?UTF-8?q?=D1=81=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=20=D1=82=D0=B8=D0=BF?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?;=20=D0=BC=D0=B5=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ValueTable/ValueTableColumnCollection.cs | 51 ++++++------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs b/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs index 703c97506..7ba1ae74a 100644 --- a/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs +++ b/src/OneScript.StandardLibrary/Collections/ValueTable/ValueTableColumnCollection.cs @@ -131,7 +131,7 @@ public IValue Find(string name) public void Delete(IValue column) { var vtColumn = GetColumnByIIndex(column); - _owner.ForEach((ValueTableRow x)=> + _owner.ForEach((ValueTableRow x) => { x.OnOwnerColumnRemoval(vtColumn); }); @@ -156,10 +156,7 @@ public ValueTableColumn FindColumnByName(string name) return _columns.Find(column => _namesComparer.Equals(name, column.Name)); } - public ValueTableColumn FindColumnByIndex(int index) - { - return _columns[index]; - } + public ValueTableColumn FindColumnByIndex(int index) => _columns[index]; public IEnumerator GetEnumerator() { @@ -176,10 +173,7 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() public override bool IsIndexed => true; - public override IValue GetIndexedValue(IValue index) - { - return GetColumnByIIndex(index); - } + public override IValue GetIndexedValue(IValue index) => GetColumnByIIndex(index); public override int GetPropertyNumber(string name) { @@ -189,11 +183,8 @@ public override int GetPropertyNumber(string name) return idx; } - public override int GetPropCount() - { - return _columns.Count; - } - + public override int GetPropCount() => _columns.Count; + public override string GetPropName(int propNum) { return FindColumnByIndex(propNum).Name; @@ -204,39 +195,30 @@ public override IValue GetPropValue(int propNum) return FindColumnByIndex(propNum); } - public override bool IsPropWritable(int propNum) - { - return false; - } - - public override bool IsPropReadable(int propNum) - { - return true; - } + public override bool IsPropWritable(int propNum) => false; + + public override bool IsPropReadable(int propNum) => true; public ValueTableColumn GetColumnByIIndex(IValue index) { if (index.SystemType == BasicTypes.String) { - ValueTableColumn Column = FindColumnByName(index.ToString()); - if (Column == null) - throw PropertyAccessException.PropNotFoundException(index.ToString()); - return Column; + return FindColumnByName(index.ToString()) + ?? throw PropertyAccessException.PropNotFoundException(index.ToString()); } if (index.SystemType == BasicTypes.Number) { int i_index = Decimal.ToInt32(index.AsNumber()); if (i_index < 0 || i_index >= Count()) - throw RuntimeException.InvalidArgumentValue(); + throw RuntimeException.IndexOutOfRange(); - ValueTableColumn Column = FindColumnByIndex(i_index); - return Column; + return FindColumnByIndex(i_index); } - if (index is ValueTableColumn) + if (index is ValueTableColumn column) { - return index as ValueTableColumn; + return column; } throw RuntimeException.InvalidArgumentType(); @@ -253,13 +235,12 @@ public int GetColumnNumericIndex(IValue index) { int iIndex = Decimal.ToInt32(index.AsNumber()); if (iIndex < 0 || iIndex >= Count()) - throw RuntimeException.InvalidArgumentValue(); + throw RuntimeException.IndexOutOfRange(); return iIndex; } - var column = index as ValueTableColumn; - if (column != null) + if (index is ValueTableColumn column) { return IndexOf(column); }