4

HttpContext を使用して、今後の HTTP リクエストの現在のユーザー名を取得しますが、コベリティ分析を実行すると、リソース リークが報告されます。

    public class UsersController:ApiController
    {
      private string userName;
      public UsersController()
      {
        if (HttpContext.Current != null)
        {
            userName = HttpContext.Current.User.Identity.Name;
        }
    }
    //I defined customized identity
    public class MyIdentity : IIdentity
    {
        private string name;
        public string AuthenticationType
        {
            get { return "Custom"; }
        }

        public bool IsAuthenticated
        {
            get { return true; }

        }

        public string Name { get; set; }

 }

Coverity のレポートでは 2 と表示されています。 alloc_fn: 割り当てメソッド Identity.get から新しいリソースが返されます。(仮想呼び出しは System.Security.Claims.ClaimsPrincipal.Identity.get に解決されます。) 3. noescape: リソース System.Web.HttpContext.Current.User.Identity が閉じられていないか、Name.get に保存されていません。(仮想呼び出しは Org.Abc.HttpModules.MyIdentity.Name.get に解決されます。)

CID 51307: リソース リーク (RESOURCE_LEAK) 4.leaked_resource: System.Web.HttpContext.Current.User.Identity によって作成されたリソースを保存または閉じることができないと、リソースがリークします。

4

1 に答える 1

0

IIdentity はWindowsIdentityによって実装されます。WindowsIdentity も IDisposable を実装しているため、作成後に破棄する必要があります。これを行うには、Dispose メソッドを呼び出します。

ただし、IIdentity の独自の実装を使用しているため、ここでの問題は、Coverity がその ID が使い捨てかどうかわからないため、注意を怠っていることだと思います。

于 2015-11-06T21:35:09.330 に答える