为什么Fortify将此标记为未发布的资源?

时间:2018-05-01 18:25:19

标签: java security synchronization locking fortify

我有一个看起来像这样的课程:

machine account

Fortify使用class Foo { final ReadWriteLock lock = new ReentrantReadWriteLock(); Object read() { lock.readLock().lock(); Object result; try { result = getResource(); } finally { lock.readLock().unlock(); } return result; } } 标记方法read,声称已获得锁定,然后在不释放锁定的情况下立即退出该方法。

我的预感是,由于Unreleased Resource: Synchronization字段属于接口类型lock,因此Fortify无法确保ReadWriteLock保证返回相同的lock.readLock()两个调用的对象。因此,Fortify发现我们锁定的Lock并未存储在本地变量中,并且它认为Lock因此丢失并泄露。这是对的吗?

1 个答案:

答案 0 :(得分:0)

我的预感是正确的。 Fortify无法判断lock.readLock()为两个调用返回了相同的Lock对象,并将锁存储在final局部变量中解决了问题。