微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Checkmarx C# - Improper_Resource_Shutdown_or_Release

如何解决Checkmarx C# - Improper_Resource_Shutdown_or_Release

我有一个看起来像这样的代码块:

        StringBuilder csvData = new StringBuilder();
        StreamWriter fileWriter = new StreamWriter(filepath.ToString());
        try
        {
            csvData.Append(Constants.CSVQuote);
            csvData.Append(Constants.Code);
            csvData.Append(Constants.CSVDelimiter);
            csvData.Append(Constants.Description);
            csvData.Append(Constants.CSVDelimiter);
            csvData.Append(Constants.Comments);
            csvData.Append(Constants.CSVQuote);

            fileWriter.WriteLine(csvData);
            csvData.Clear();
            for( int i=0; i<StatusEntities.Count(); i++)
            {
                csvData.Append(Constants.CSVQuote);
                csvData.Append(StatusEntities[i].Code != null ? Common.ToCSVString(StatusEntities[i].Code) : string.Empty);
                csvData.Append(Constants.CSVDelimiter);
                csvData.Append(StatusEntities[i].Description != null ? Common.ToCSVString(StatusEntities[i].Description) : string.Empty);
                csvData.Append(Constants.CSVDelimiter);
                csvData.Append(StatusEntities[i].Comments != null ? Common.ToCSVString(StatusEntities[i].Comments) : string.Empty);
                csvData.Append(Constants.CSVQuote);
                fileWriter.WriteLine(csvData);
                csvData.Clear();
            }
        }
        catch
        {
            throw;
        }
        finally
        {
            fileWriter.Close();
            csvData = null;
        }

我不断找回Improper_Resource_Shutdown_or_Release漏洞。 我曾尝试使用自动使用 try-with-resource 的隐式发布,但这也不起作用。 您能否就如何修复此类漏洞提供一些建议?

解决方法

Checkmarx 正在标记您的代码,因为您没有为 StringBuilder 和 StreamWriter 实例正确处理新的资源分配。您可以将资源分配移动到 Var ind =str.indexof("@") 块,然后在 try { } 块内添加以下代码:

finally { }

您需要将资源分配移动到 cvsData.Dispose(); fileWriter.Dispose(); 块的原因是因为在分配过程中可能会抛出异常。尤其是下面这行:

try { }

例如,如果变量“filepath”无效,可能会引发异常。

或者,您可以将新的资源分配包装在 StreamWriter fileWriter = new StreamWriter(filepath.ToString()); 块中,如下所示:

using(...) { }

这可确保资源在超出范围时(当您使用完它时)被正确处理,而无需您明确处理它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。