簡體   English   中英

強化安全問題“未發布的資源流”

[英]Fortify security issue “Unreleased resource stream”

我在下面的代碼中找到了“Unreleased resource stream”的強化發現。

Resource[] l_objResource = resourceLoader.getResources(configErrorCode);
Properties l_objProperty = null;
for (int i = 0; i < l_objResource.length; i++) {
    l_objProperty = new Properties();
    l_objProperty.load(l_objResource[i].getInputStream());
}

功能loadErrorCode()BaseErrorParser.java有時無法釋放由分配系統資源getInputStream();

任何人都可以解釋這個發現或幫助解決問題嗎?


從下面的評論,但上下文不明確(JW):

ObjectInputStream l_objObjInputStream = null;
Map l_mapRet = null;
try {
    l_objObjInputStream = new ObjectInputStream(new FileInputStream(p_objFilename));
    Object l_objTemp = l_objObjInputStream.readObject();
    l_mapRet = (Map) l_objTemp;
} finally {
    if (l_objObjInputStream != null) {
        l_objObjInputStream.close();
    }
}

您沒有關閉由下面的代碼行打開的輸入流

l_objResource[i].getInputStream();

通常強化掃描程序報告如果有任何輸入或輸出流在使用后打開但未關閉,則會發布未發布的資源流問題。 處理這些問題的理想方法是關閉finally塊中所有打開的流,這樣即使在異常情況下也不會產生任何問題。

您可以嘗試 - 最后阻止代碼並關閉流,如下所示。

Resource[] l_objResource = resourceLoader.getResources(configErrorCode);
Properties l_objProperty = null;
InputStream is = null;
for (int i = 0; i < l_objResource.length; i++) {
    l_objProperty = new Properties();
    try {
          is = l_objResource[i].getInputStream();
          l_objProperty.load(is);
    } finally {
          if(is!=null) {
              is.close();
          }
    }
}

請檢查它是否適用於您的情況。

您可以在此處使用Try with resource。 這將自動關閉您的信息流。

Map l_mapRet = null;
try (ObjectInputStream l_objObjInputStream = new ObjectInputStream(new FileInputStream(p_objFilename))){
    Object l_objTemp = l_objObjInputStream.readObject();
    l_mapRet = (Map) l_objTemp;
} Catch(IOException E){
// Handle exception
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM