Fix yet another crash in Translate.Processor - thx fdfg :)

This commit is contained in:
niksedk 2023-08-20 20:14:08 +02:00
parent 55ed086b93
commit a722a141da
2 changed files with 27 additions and 3 deletions

View File

@ -1301,13 +1301,37 @@ namespace Nikse.SubtitleEdit.Core.Common
}
/// <summary>
/// UrlEncodes a string without the requirement for System.Web
/// UrlEncodes a string without the requirement for System.Web.
/// Will crash if text length > 2000.
/// </summary>
public static string UrlEncode(string text)
{
return Uri.EscapeDataString(text);
}
/// <summary>
/// Calculates the length if the text url encoded.
/// </summary>
public static int UrlEncodeLength(string text)
{
var urlEncodeLength = 0;
foreach (var ch in text)
{
if (ch >= 'a' && ch <= 'z' ||
ch >= 'A' && ch <= 'Z' ||
ch >= '0' && ch <= '9')
{
urlEncodeLength++;
}
else
{
urlEncodeLength += 3;
}
}
return urlEncodeLength;
}
/// <summary>
/// UrlDecodes a string without requiring System.Web
/// </summary>

View File

@ -47,7 +47,7 @@ namespace Nikse.SubtitleEdit.Core.Translate.Processor
{
public readonly List<TTranslationBaseUnit> TranslationUnits = new List<TTranslationBaseUnit>();
public int TextSize => TranslationUnits.ConvertAll(e => Utilities.UrlEncode(e.Text).Length).Sum();
public int TextSize => TranslationUnits.ConvertAll(e => Utilities.UrlEncodeLength(e.Text)).Sum();
public int ArrayLength => TranslationUnits.Count;
}
@ -103,7 +103,7 @@ namespace Nikse.SubtitleEdit.Core.Translate.Processor
foreach (var translationUnit in translationUnits)
{
if (currentChunk.TextSize + Utilities.UrlEncode(translationUnit.Text).Length > maxTextSize
if (currentChunk.TextSize + Utilities.UrlEncodeLength(translationUnit.Text) > maxTextSize
|| currentChunk.ArrayLength + 1 > maximumRequestArrayLength)
{
yield return currentChunk;