Skip to content

Commit

Permalink
Merge pull request #1384 from akpaevj/bugfix/1383
Browse files Browse the repository at this point in the history
Добавлена проверка на null в методах работы с base64/двоичными данными
  • Loading branch information
EvilBeaver authored Dec 22, 2023
2 parents ce7dee8 + e3c7b92 commit 759c51c
Showing 1 changed file with 51 additions and 11 deletions.
62 changes: 51 additions & 11 deletions src/OneScript.StandardLibrary/Binary/GlobalBinaryData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace OneScript.StandardLibrary.Binary
[GlobalContext(Category = "Процедуры и функции работы с двоичными данными")]
public sealed class GlobalBinaryData : GlobalContextBase<GlobalBinaryData>
{
private static byte[] HexStringToByteArray(String hex)
private static byte[] HexStringToByteArray(string hex)
{
var newHex = System.Text.RegularExpressions.Regex.Replace(hex, @"[^0-9A-Fa-f]", "");
int numberChars = newHex.Length;
Expand Down Expand Up @@ -130,6 +130,17 @@ private static string GetStringFromByteBuffer(byte[] buf, Encoding enc)
return enc.GetString(buf, startPos, buf.Length - startPos);
}

private static void CheckAndThrowIfNull<T>(AutoContext<T> obj) where T : AutoContext<T>
{
if (obj == null)
throw RuntimeException.InvalidArgumentType();
}

private static void CheckAndThrowIfNull<T>(AutoContext<T> obj, int argNumber, string argName) where T : AutoContext<T>
{
if (obj == null)
throw RuntimeException.InvalidArgumentType(argNumber, argName);
}

public static IAttachableContext CreateInstance()
{
Expand All @@ -150,19 +161,19 @@ public static IAttachableContext CreateInstance()
[ContextMethod("СоединитьДвоичныеДанные")]
public BinaryDataContext ConcatenateBinaryData(ArrayImpl array)
{
CheckAndThrowIfNull(array);

// Сделано на int т.к. BinaryContext.Size имеет тип int;
using var stream = new System.IO.MemoryStream();

using (var stream = new System.IO.MemoryStream())
foreach (var cbd in array)
{

foreach (var cbd in array)
{
byte[] buffer = ((BinaryDataContext) cbd.AsObject()).Buffer;
stream.Write(buffer, 0, buffer.Length);
}
stream.Position = 0;
return new BinaryDataContext(stream);
byte[] buffer = ((BinaryDataContext)cbd.AsObject()).Buffer;
stream.Write(buffer, 0, buffer.Length);
}
stream.Position = 0;

return new BinaryDataContext(stream);
}

/// <summary>
Expand All @@ -174,6 +185,8 @@ public BinaryDataContext ConcatenateBinaryData(ArrayImpl array)
[ContextMethod("РазделитьДвоичныеДанные")]
public ArrayImpl SplitBinaryData(BinaryDataContext data, long size)
{
CheckAndThrowIfNull(data, 1, nameof(data));

if (size <= 0 || size > Int32.MaxValue)
throw RuntimeException.InvalidNthArgumentValue(2);

Expand Down Expand Up @@ -257,9 +270,10 @@ public BinaryDataBuffer GetBinaryDataBufferFromString(string str, IValue encodin
[ContextMethod("ПолучитьСтрокуИзДвоичныхДанных")]
public string GetStringFromBinaryData(BinaryDataContext data, IValue encoding = null)
{
CheckAndThrowIfNull(data, 1, nameof(data));

// Получаем кодировку
// Из синтаксис помощника если кодировка не задана используем UTF8

var enc = (encoding != null) ? TextEncodingEnum.GetEncoding(encoding) : Encoding.UTF8;

return GetStringFromByteBuffer(data.Buffer, enc);
Expand All @@ -274,6 +288,8 @@ public string GetStringFromBinaryData(BinaryDataContext data, IValue encoding =
[ContextMethod("ПолучитьСтрокуИзБуфераДвоичныхДанных")]
public string GetStringFromBinaryDataBuffer(BinaryDataBuffer buffer, IValue encoding = null)
{
CheckAndThrowIfNull(buffer, 1, nameof(buffer));

var enc = (encoding != null) ? TextEncodingEnum.GetEncoding(encoding) : Encoding.UTF8;

return GetStringFromByteBuffer(buffer.Bytes, enc);
Expand Down Expand Up @@ -325,6 +341,8 @@ public BinaryDataBuffer GetBinaryDataBufferFromBase64String(string str)
[ContextMethod("ПолучитьBase64СтрокуИзДвоичныхДанных")]
public string GetBase64StringFromBinaryData(BinaryDataContext data)
{
CheckAndThrowIfNull(data, 1, nameof(data));

return Convert.ToBase64String(data.Buffer, Base64FormattingOptions.InsertLineBreaks);
}

Expand All @@ -338,6 +356,8 @@ public string GetBase64StringFromBinaryData(BinaryDataContext data)
[ContextMethod("ПолучитьBase64СтрокуИзБуфераДвоичныхДанных")]
public string GetBase64StringFromBinaryDataBuffer(BinaryDataBuffer buffer)
{
CheckAndThrowIfNull(buffer);

return Convert.ToBase64String(buffer.Bytes, Base64FormattingOptions.InsertLineBreaks);
}

Expand All @@ -349,6 +369,8 @@ public string GetBase64StringFromBinaryDataBuffer(BinaryDataBuffer buffer)
[ContextMethod("ПолучитьДвоичныеДанныеИзBase64ДвоичныхДанных")]
public BinaryDataContext GetBinaryDataFromBase64BinaryData(BinaryDataContext data)
{
CheckAndThrowIfNull(data);

try
{
var enc = new UTF8Encoding(false,true);
Expand All @@ -369,6 +391,8 @@ public BinaryDataContext GetBinaryDataFromBase64BinaryData(BinaryDataContext dat
[ContextMethod("ПолучитьБуферДвоичныхДанныхИзBase64БуфераДвоичныхДанных")]
public BinaryDataBuffer GetBinaryDataBufferFromBase64BinaryDataBuffer(BinaryDataBuffer buffer)
{
CheckAndThrowIfNull(buffer);

try
{
var enc = new UTF8Encoding(false, true);
Expand All @@ -391,6 +415,8 @@ public BinaryDataBuffer GetBinaryDataBufferFromBase64BinaryDataBuffer(BinaryData
[ContextMethod("ПолучитьBase64ДвоичныеДанныеИзДвоичныхДанных")]
public BinaryDataContext GetBase64BinaryDataFromBinaryData(BinaryDataContext data)
{
CheckAndThrowIfNull(data);

var base64str = Convert.ToBase64String(data.Buffer, Base64FormattingOptions.InsertLineBreaks);
return new BinaryDataContext(Encoding.ASCII.GetBytes(base64str));
}
Expand All @@ -405,6 +431,8 @@ public BinaryDataContext GetBase64BinaryDataFromBinaryData(BinaryDataContext dat
[ContextMethod("ПолучитьBase64БуферДвоичныхДанныхИзБуфераДвоичныхДанных")]
public BinaryDataBuffer GetBase64BinaryDataBufferFromBinaryDataBuffer(BinaryDataBuffer buffer)
{
CheckAndThrowIfNull(buffer);

var base64str = Convert.ToBase64String(buffer.Bytes, Base64FormattingOptions.InsertLineBreaks);
return new BinaryDataBuffer(Encoding.ASCII.GetBytes(base64str));
}
Expand Down Expand Up @@ -439,6 +467,8 @@ public BinaryDataBuffer GetBinaryDataBufferFromHexString(string hex)
[ContextMethod("ПолучитьHexСтрокуИзДвоичныхДанных")]
public string GetHexStringFromBinaryData(BinaryDataContext data)
{
CheckAndThrowIfNull(data);

return BitConverter.ToString(data.Buffer).Replace("-","");
}

Expand All @@ -450,6 +480,8 @@ public string GetHexStringFromBinaryData(BinaryDataContext data)
[ContextMethod("ПолучитьHexСтрокуИзБуфераДвоичныхДанных")]
public string GetHexStringFromBinaryDataBuffer(BinaryDataBuffer buffer)
{
CheckAndThrowIfNull(buffer);

return BitConverter.ToString(buffer.Bytes).Replace("-","");
}

Expand All @@ -461,6 +493,8 @@ public string GetHexStringFromBinaryDataBuffer(BinaryDataBuffer buffer)
[ContextMethod("ПолучитьДвоичныеДанныеИзHexДвоичныхДанных")]
public BinaryDataContext GetBinaryDataFromHexBinaryData(BinaryDataContext data)
{
CheckAndThrowIfNull(data);

return new BinaryDataContext(HexArrayToByteArray(data.Buffer));
}

Expand All @@ -472,6 +506,8 @@ public BinaryDataContext GetBinaryDataFromHexBinaryData(BinaryDataContext data)
[ContextMethod("ПолучитьБуферДвоичныхДанныхИзHexБуфераДвоичныхДанных")]
public BinaryDataBuffer GetBinaryDataBufferFromHexBinaryDataBuffer(BinaryDataBuffer buffer)
{
CheckAndThrowIfNull(buffer);

return new BinaryDataBuffer(HexArrayToByteArray(buffer.Bytes));
}

Expand Down Expand Up @@ -507,6 +543,8 @@ public BinaryDataBuffer GetHexBinaryDataBufferFromBinaryDataBuffer(BinaryDataBuf
[ContextMethod("ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных")]
public BinaryDataBuffer GetBinaryDataBufferFromBinaryData(BinaryDataContext data)
{
CheckAndThrowIfNull(data);

return new BinaryDataBuffer(data.Buffer);
}

Expand All @@ -518,6 +556,8 @@ public BinaryDataBuffer GetBinaryDataBufferFromBinaryData(BinaryDataContext data
[ContextMethod("ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных")]
public BinaryDataContext GetBinaryDataFromBinaryDataBuffer(BinaryDataBuffer buffer)
{
CheckAndThrowIfNull(buffer);

return new BinaryDataContext(buffer.Bytes);
}

Expand Down

0 comments on commit 759c51c

Please sign in to comment.