我有一个看起来像这样的课程:
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
因此丢失并泄露。这是对的吗?
答案 0 :(得分:0)
我的预感是正确的。 Fortify无法判断lock.readLock()
为两个调用返回了相同的Lock
对象,并将锁存储在final
局部变量中解决了问题。