Сделать валидацию 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 заметно короче).
|
||||
private const int MaxTenantIdLength = 128;
|
||||
|
||||
private static readonly char[] InvalidTenantCharacters = Path.GetInvalidFileNameChars();
|
||||
|
||||
private readonly MlOptions _options;
|
||||
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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user