diff --git a/src/main/java/com/evimetry/aff4/struct/BevvyIndex.java b/src/main/java/com/evimetry/aff4/struct/BevvyIndex.java
index d834115..d4d064c 100644
--- a/src/main/java/com/evimetry/aff4/struct/BevvyIndex.java
+++ b/src/main/java/com/evimetry/aff4/struct/BevvyIndex.java
@@ -62,15 +62,30 @@ public BevvyIndex(String resource, int bevvyID, AFF4ZipContainer parent, ZipFile
this.bevvyID = bevvyID;
// Get the offset of the bevvy segment into the primary channel.
- String bevvyChunkName = NameCodec.encode(String.format("%s/%08d", resource, bevvyID));
+ String resourceID = String.format("%s/%08d", resource, bevvyID);
+ String bevvyChunkName = NameCodec.encode(resourceID);
ZipArchiveEntry entry = zipContainer.getEntry(bevvyChunkName);
+ if (entry == null) {
+ bevvyChunkName = NameCodec.SanitizeResource(resourceID, parent.getResourceID());
+ entry = zipContainer.getEntry(bevvyChunkName);
+ // Some AFF4 tools strip leading '/' characters from the
+ // entity name, others leave it in. Same goes for trailing
+ // '/' characters on ARNs.
+ if (entry == null) {
+ entry = zipContainer.getEntry("/" + bevvyChunkName);
+ }
+ }
if (entry == null)
throw new IOException("Missing bevvy segment");
this.offset = entry.getDataOffset();
// Load the indices
- String bevvyIndexName = NameCodec.encode(String.format("%s/%08d.index", resource, bevvyID));
+ String bevvyIndexID = String.format("%s/%08d.index", resource, bevvyID);
+ String bevvyIndexName = NameCodec.encode(bevvyIndexID);
IAFF4ImageStream stream = parent.getSegment(bevvyIndexName);
+ if (stream == null) {
+ stream = parent.getSegment(bevvyIndexID);
+ }
try (SeekableByteChannel channel = stream.getChannel()) {
ByteBuffer buffer = ByteBuffer.allocateDirect((int) channel.size()).order(ByteOrder.LITTLE_ENDIAN);
Streams.readFull(channel, 0, buffer);
diff --git a/src/test/java/com/evimetry/aff4/container/TestImageMaterialisation.java b/src/test/java/com/evimetry/aff4/container/TestImageMaterialisation.java
index 813b72d..ae0de49 100644
--- a/src/test/java/com/evimetry/aff4/container/TestImageMaterialisation.java
+++ b/src/test/java/com/evimetry/aff4/container/TestImageMaterialisation.java
@@ -63,7 +63,7 @@ public class TestImageMaterialisation {
private final static String linearSHA1 = "7d3d27f667f95f7ec5b9d32121622c0f4b60b48d";
private final static String allocatedSHA1 = "e8650e89b262cf0b4b73c025312488d5a6317a26";
private final static String readErrorSHA1 = "67e245a640e2784ead30c1ff1a3f8d237b58310f";
- private final static String blankSHA1 = "e68329455580cb50fb1debc88cecf2e9aaf3f7fe";
+ private final static String blankSHA1 = "5e3ba42e404c04f85ac8f0d09b85635fb5e88243";
/**
* The size of the read to perform.
*/
@@ -212,7 +212,7 @@ public void testContainerBlank() throws UnsupportedOperationException, IOExcepti
IAFF4Map map = image.getMap();
assertEquals("aff4://223fb1d7-7826-4631-a35b-df14ad7bf75e", map.getResourceID());
try (SeekableByteChannel channel = map.getChannel()) {
- assertEquals(99983360, channel.size());
+ assertEquals(268435456, channel.size());
assertEquals(blankSHA1, getDigest(channel, readSize));
}
}
@@ -232,7 +232,7 @@ public void testContainerBlank5() throws UnsupportedOperationException, IOExcept
IAFF4Map map = image.getMap();
assertEquals("aff4://6e3c59b5-e660-4adf-8eb6-472cef961c2d", map.getResourceID());
try (SeekableByteChannel channel = map.getChannel()) {
- assertEquals(99983360, channel.size());
+ assertEquals(268435456, channel.size());
assertEquals(blankSHA1, getDigest(channel, readSize));
}
}
diff --git a/src/test/java/com/evimetry/aff4/examples/Information.java b/src/test/java/com/evimetry/aff4/examples/Information.java
index c2a103d..92a5bad 100644
--- a/src/test/java/com/evimetry/aff4/examples/Information.java
+++ b/src/test/java/com/evimetry/aff4/examples/Information.java
@@ -51,45 +51,47 @@ public static void main(String[] args) {
return;
}
String filename = args[0];
- File file = new File(filename);
+
/*
* Open the container.
*/
- try (IAFF4Container container = Containers.open(file)) {
-
+ try (IAFF4Container container = Containers.open(new File(filename))) {
exportProperties("Container: ", container.getResourceID(), container.getProperties());
+
/*
- * Get an iterator to all images available in this container.
+ * Iterate over the available images in the container.
*/
Iterator