diff --git a/src/ScriptEngine.HostedScript/Library/FixedStructureImpl.cs b/src/ScriptEngine.HostedScript/Library/FixedStructureImpl.cs index 45e601828..c0b55fce7 100644 --- a/src/ScriptEngine.HostedScript/Library/FixedStructureImpl.cs +++ b/src/ScriptEngine.HostedScript/Library/FixedStructureImpl.cs @@ -153,7 +153,10 @@ private static FixedStructureImpl Constructor(StructureImpl structObject) [ScriptConstructor(Name = "По ключам и значениям")] public static FixedStructureImpl Constructor(IValue param1, IValue[] args) { - var rawArgument = param1.GetRawValue(); + var rawArgument = param1?.GetRawValue(); + if (rawArgument == null) + return new FixedStructureImpl(""); + if (rawArgument.DataType == DataType.String) { return new FixedStructureImpl(param1.AsString(), args); diff --git a/src/ScriptEngine.HostedScript/Library/StructureImpl.cs b/src/ScriptEngine.HostedScript/Library/StructureImpl.cs index 432e75c0c..bcdd04edc 100644 --- a/src/ScriptEngine.HostedScript/Library/StructureImpl.cs +++ b/src/ScriptEngine.HostedScript/Library/StructureImpl.cs @@ -245,7 +245,10 @@ private static StructureImpl Constructor(FixedStructureImpl fixedStruct) [ScriptConstructor(Name = "По ключам и значениям")] public static StructureImpl Constructor(IValue param1, IValue[] args) { - var rawArgument = param1.GetRawValue(); + var rawArgument = param1?.GetRawValue(); + if (rawArgument == null) + return new StructureImpl(); + if (rawArgument.DataType == DataType.String) { return new StructureImpl(rawArgument.AsString(), args); diff --git a/src/ScriptEngine.HostedScript/Library/Zip/ZipReader.cs b/src/ScriptEngine.HostedScript/Library/Zip/ZipReader.cs index f297c8fc7..29f06582e 100644 --- a/src/ScriptEngine.HostedScript/Library/Zip/ZipReader.cs +++ b/src/ScriptEngine.HostedScript/Library/Zip/ZipReader.cs @@ -54,7 +54,7 @@ public void Open(IValue filenameOrStream, string password = null, FileNamesEncod { _zip = ZipFile.Read(filenameOrStream.AsString(), new ReadOptions { Encoding = ChooseEncoding(encoding) }); } - else if (filenameOrStream.AsObject() is IStreamWrapper stream) + else if (filenameOrStream.DataType == DataType.Object && filenameOrStream.AsObject() is IStreamWrapper stream) { _zip = ZipFile.Read(stream.GetUnderlyingStream(), new ReadOptions { Encoding = ChooseEncoding(encoding) }); } @@ -157,7 +157,7 @@ public static ZipReader Construct() [ScriptConstructor(Name = "На основании имени файла или потока")] public static ZipReader Constructor(IValue dataSource, IValue password = null) { - var dataSourceRawValue = dataSource.GetRawValue(); + var dataSourceRawValue = dataSource?.GetRawValue() ?? ValueFactory.CreateInvalidValueMarker(); return new ZipReader(dataSourceRawValue, password?.AsString()); }