Сделать валидацию tenant-id в ModelPool платформонезависимой
ci / build-test (push) Failing after 13m48s
ci / build-test (push) Failing after 13m48s
GetInvalidFileNameChars() на Linux пропускает обратный слеш и точки — GetOrCreate_InvalidTenantId_Throws падал в CI на ubuntu. Заменено на явный белый список: ASCII-буквы/цифры плюс '-' и '_'. CI поймал первый кроссплатформенный баг —mission accomplished.
This commit is contained in:
@@ -13,8 +13,6 @@ public sealed class ModelPool : IDisposable
|
|||||||
// Верхняя граница длины tenant-id (защита пути; реальные id заметно короче).
|
// Верхняя граница длины tenant-id (защита пути; реальные id заметно короче).
|
||||||
private const int MaxTenantIdLength = 128;
|
private const int MaxTenantIdLength = 128;
|
||||||
|
|
||||||
private static readonly char[] InvalidTenantCharacters = Path.GetInvalidFileNameChars();
|
|
||||||
|
|
||||||
private readonly MlOptions _options;
|
private readonly MlOptions _options;
|
||||||
private readonly ConcurrentDictionary<string, TenantModel> _models = new(StringComparer.Ordinal);
|
private readonly ConcurrentDictionary<string, TenantModel> _models = new(StringComparer.Ordinal);
|
||||||
|
|
||||||
@@ -76,8 +74,9 @@ public sealed class ModelPool : IDisposable
|
|||||||
throw new ArgumentException($"tenant-id длиннее {MaxTenantIdLength} символов.", nameof(tenantId));
|
throw new ArgumentException($"tenant-id длиннее {MaxTenantIdLength} символов.", nameof(tenantId));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tenantId.IndexOfAny(InvalidTenantCharacters) >= 0
|
// Имя файла модели должно быть портируемым между ОС: разделители пути («/», «\»)
|
||||||
|| tenantId.Contains("..", StringComparison.Ordinal))
|
// валидны на Linux, поэтому проверяем явный белый список, а не GetInvalidFileNameChars.
|
||||||
|
if (tenantId.Any(c => !char.IsAsciiLetterOrDigit(c) && c is not '-' and not '_'))
|
||||||
{
|
{
|
||||||
throw new ArgumentException("tenant-id содержит недопустимые для имени файла символы.", nameof(tenantId));
|
throw new ArgumentException("tenant-id содержит недопустимые для имени файла символы.", nameof(tenantId));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user