2017-02-16 5 views
1

下記のコードで「未リリースのリソースストリーム」を強化しています。セキュリティの問題を強化する「未リリースのリソースストリーム」

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()); 
} 

機能BaseErrorParser.javaloadErrorCode()は時々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(); 
    } 
} 
+0

ObjectInputStream l_objObjInputStream = null; マップl_mapRet = null; try { l_objObjInputStream =新しいObjectInputStream(新しいFileInputStream(p_objFilename)); オブジェクトl_objTemp = l_objObjInputStream.readObject(); l_mapRet =(マップ)l_objTemp; } finally { if(l_objObjInputStream!= null){ l_objObjInputStream.close(); } } 未公開のリソースストリームを強化するためにコードの上にある – purushothaman

+0

BusinessObjectData.javaのloadObjectFromFile()関数は、FileInputStream()によって割り当てられたシステムリソースを解放できないことがあります。 – purushothaman

答えて

2

あなたはコード

l_objResource[i].getInputStream(); 
の行の下で開かれた入力ストリームをクローズされていません

通常、スキャナのレポートを強化します。開いていても使用後に閉じられていない入力ストリームまたは出力ストリームがある場合、リリースされていないリソースストリームの問題です。これらの問題に対処する理想的な方法は、開かれたすべてのストリームを最後にブロックすることで、例外シナリオ中であっても問題が発生しないようにすることです。

try-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(); 
      } 
    } 
} 

ご使用のケースで動作するかどうかを確認してください。