Есть ли способ исправить это предупреждение FxCop CA2103 в пользовательской реализации System.Security.IPermission? - PullRequest
3 голосов
/ 23 января 2012

У меня есть класс, который реализует IPermission:

public class MySecurityPermission : IPermission
{
    private string[] _demandRoles;
    private string[] _denyRoles;

    public MySecurityPermission(string[] demandRoles, string[] denyRoles)
    {
        this._demandRoles = demandRoles;
        this._denyRoles = denyRoles;
    }
}

Теперь для интерфейса IPermission требуется метод Copy(), который я реализовал как:

public IPermission Copy()
{
    return new MySecurityPermission(this._demandRoles.ToArray(), this._denyRoles.ToArray());
}

Обратите внимание, что вызовы .ToArray() происходят потому, что он закрывает / копирует массив и возвращает новый экземпляр массива, а не передает тот же массив вокруг.

В результате получается FxCop CA2103:

"Просмотрите следующее на предмет возможной уязвимости безопасности: В MySecurityPermission.Copy () возвращаемое значение вызова Enumerable.ToArray (это IEnumerable) 'передается в «MySecurityPermission» конструктор ».

Есть ли способ "исправить" это? Я не совсем уверен, почему FxCop даже жалуется на это. Если бы кто-то мог это объяснить, это было бы здорово.

1 Ответ

3 голосов
/ 23 января 2012

Может показаться, что правило возникает из-за того, где выполняется код. Если вы сначала создадите переменные, правило пройдет:

public IPermission Copy()
{
    var demand = _demandRoles.ToArray();
    var deny = _denyRoles.ToArray();
    return new MySecurityPermission(demand, deny);
}
...