mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
fixes from review
This commit is contained in:
parent
cbd270cec2
commit
99b3404873
3 changed files with 40 additions and 30 deletions
|
@ -191,7 +191,7 @@ public class FileBytes {
|
|||
return getBytes(originalBuffers, offset, b, off, length);
|
||||
}
|
||||
|
||||
synchronized void checkValid() {
|
||||
void checkValid() {
|
||||
if (invalid) {
|
||||
throw new ConcurrentModificationException();
|
||||
}
|
||||
|
@ -362,19 +362,25 @@ public class FileBytes {
|
|||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
if (this == obj) {
|
||||
return true;
|
||||
if (obj == null)
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
FileBytes other = (FileBytes) obj;
|
||||
if (adapter != other.adapter)
|
||||
if (adapter != other.adapter) {
|
||||
return false;
|
||||
if (id != other.id)
|
||||
}
|
||||
if (id != other.id) {
|
||||
return false;
|
||||
if (invalid != other.invalid)
|
||||
}
|
||||
if (invalid != other.invalid) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -154,18 +154,23 @@ class FileBytesAdapterV0 extends FileBytesAdapter {
|
|||
|
||||
private DBBuffer[] createBuffers(long size, InputStream is) throws IOException {
|
||||
int maxBufSize = getMaxBufferSize();
|
||||
int bufCount = (int) (size + maxBufSize - 1) / maxBufSize;
|
||||
int bufCount = (int) (size / maxBufSize);
|
||||
int sizeLastBuf = (int) (size % maxBufSize);
|
||||
|
||||
// there is a remainder then we have one additional buffer
|
||||
if (sizeLastBuf > 0) {
|
||||
bufCount++;
|
||||
}
|
||||
else {
|
||||
// divides evenly, so sizeLastBuf is full maxBuffSize
|
||||
sizeLastBuf = maxBufSize;
|
||||
}
|
||||
|
||||
DBBuffer[] buffers = new DBBuffer[bufCount];
|
||||
int bufSize = maxBufSize;
|
||||
int lastBufSize = (int) (size % maxBufSize);
|
||||
|
||||
for (int i = 0; i < bufCount; i++) {
|
||||
if (lastBufSize != 0 && i == (bufCount - 1)) {
|
||||
bufSize = lastBufSize;
|
||||
}
|
||||
buffers[i] = handle.createBuffer(bufSize);
|
||||
for (int i = 0; i < bufCount - 1; i++) {
|
||||
buffers[i] = handle.createBuffer(maxBufSize);
|
||||
}
|
||||
buffers[bufCount - 1] = handle.createBuffer(sizeLastBuf);
|
||||
|
||||
try {
|
||||
for (DBBuffer buffer : buffers) {
|
||||
|
|
|
@ -45,10 +45,7 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
private Program program;
|
||||
private Memory mem;
|
||||
private int transactionID;
|
||||
|
||||
public FileBytesTest() {
|
||||
super();
|
||||
}
|
||||
private File tempDir;
|
||||
|
||||
@Test
|
||||
public void testStoreAndRetrieveFileBytes() throws Exception {
|
||||
|
@ -73,7 +70,7 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
|
||||
byte[] outBytes = new byte[200];
|
||||
|
||||
saveAndRestoreProgram();
|
||||
saveAndRestoreProgram("A");
|
||||
|
||||
List<FileBytes> list = program.getMemory().getAllFileBytes();
|
||||
fileBytes = list.get(0);
|
||||
|
@ -93,7 +90,7 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
int dataSize = MAX_BUFFER_SIZE_FOR_TESTING + MAX_BUFFER_SIZE_FOR_TESTING / 2;
|
||||
FileBytes fileBytes = createFileBytes("testFile", dataSize);
|
||||
|
||||
saveAndRestoreProgram();
|
||||
saveAndRestoreProgram("A");
|
||||
|
||||
byte[] outBytes = new byte[400];
|
||||
List<FileBytes> list = program.getMemory().getAllFileBytes();
|
||||
|
@ -118,7 +115,7 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
createFileBytes("file2", 20);
|
||||
createFileBytes("file3", 30);
|
||||
|
||||
saveAndRestoreProgram();
|
||||
saveAndRestoreProgram("A");
|
||||
List<FileBytes> fileBytesList = mem.getAllFileBytes();
|
||||
assertEquals(3, fileBytesList.size());
|
||||
assertEquals("file1", fileBytesList.get(0).getFilename());
|
||||
|
@ -135,12 +132,12 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
createFileBytes("file2", 20);
|
||||
createFileBytes("file3", 30);
|
||||
|
||||
saveAndRestoreProgram();
|
||||
saveAndRestoreProgram("A");
|
||||
List<FileBytes> fileBytes = mem.getAllFileBytes();
|
||||
|
||||
mem.deleteFileBytes(fileBytes.get(1));
|
||||
|
||||
saveAndRestoreProgram();
|
||||
saveAndRestoreProgram("B");
|
||||
List<FileBytes> fileBytesList = mem.getAllFileBytes();
|
||||
assertEquals(2, fileBytesList.size());
|
||||
assertEquals("file1", fileBytesList.get(0).getFilename());
|
||||
|
@ -253,17 +250,18 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
}
|
||||
}
|
||||
|
||||
private void saveAndRestoreProgram() throws Exception {
|
||||
private void saveAndRestoreProgram(String dbName) throws Exception {
|
||||
program.endTransaction(transactionID, true);
|
||||
PrivateDatabase privateDatabase = saveProgram(program);
|
||||
PrivateDatabase privateDatabase = saveProgram(program, dbName);
|
||||
program.release(this);
|
||||
program = restoreProgram(privateDatabase);
|
||||
|
||||
mem = program.getMemory();
|
||||
transactionID = program.startTransaction("test");
|
||||
}
|
||||
|
||||
private PrivateDatabase saveProgram(Program program) throws Exception {
|
||||
File dir = createTempDirectory("program");
|
||||
File dbDir = new File(dir, "program.db");
|
||||
private PrivateDatabase saveProgram(Program program, String dbName) throws Exception {
|
||||
File dbDir = new File(tempDir, dbName);
|
||||
|
||||
DBHandle dbh = ((ProgramDB) program).getDBHandle();
|
||||
BufferFile bfile = PrivateDatabase.createDatabase(dbDir, null, dbh.getBufferSize());
|
||||
|
@ -278,6 +276,7 @@ public class FileBytesTest extends AbstractGenericTest {
|
|||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
tempDir = createTempDirectory("FileBytesTest");
|
||||
FileBytesAdapter.setMaxBufferSize(MAX_BUFFER_SIZE_FOR_TESTING);
|
||||
Language language = getLanguage("Toy:BE:64:default");
|
||||
CompilerSpec compilerSpec = language.getDefaultCompilerSpec();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue