]> source.dussan.org Git - poi.git/commitdiff
[github-103] take latest changes
authorPJ Fanning <fanningpj@apache.org>
Sun, 1 Apr 2018 15:37:14 +0000 (15:37 +0000)
committerPJ Fanning <fanningpj@apache.org>
Sun, 1 Apr 2018 15:37:14 +0000 (15:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1828142 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hsmf/datatypes/PropertiesChunk.java
src/scratchpad/testcases/org/apache/poi/hsmf/TestExtractEmbeddedMSG.java

index 654794692901b5a8a12ed630db1649064f5ea4a3..56aa9bb93c38d59337633b4bb6bfce3bc2c77a34 100644 (file)
@@ -383,12 +383,7 @@ public abstract class PropertiesChunk extends Chunk {
         byte[] bytes = value.getRawValue();
         int length = bytes != null ? bytes.length : 0;
         if (bytes != null) {
-            // Little endian.
-            byte[] reversed = new byte[bytes.length];
-            for (int i = 0; i < bytes.length; ++i) {
-                reversed[bytes.length - i - 1] = bytes[i];
-            }
-            out.write(reversed);
+            out.write(bytes);
         }
         out.write(new byte[8 - length]);
     }
index 7e307e5006bd1f9e6271bdab833da9209ec38018..5d6e2f51b623400dae4f4dcba4a4b933fc613480 100644 (file)
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertNotNull;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.nio.ByteBuffer;
 import java.util.Calendar;
 import java.util.Map;
 import java.util.TimeZone;
@@ -79,19 +78,21 @@ public class TestExtractEmbeddedMSG {
     public void testEmbeddedMSGProperties() throws IOException, ChunkNotFoundException {
         AttachmentChunks[] attachments = pdfMsgAttachments.getAttachmentFiles();
         assertEquals(2, attachments.length);
-        MAPIMessage attachedMsg = attachments[0].getEmbeddedMessage();
-        assertNotNull(attachedMsg);
-        // test properties of embedded message
-        testFixedAndVariableLengthPropertiesOfAttachedMSG(attachedMsg);
-        // rebuild top level message from embedded message
-        try (POIFSFileSystem extractedAttachedMsg = rebuildFromAttached(attachedMsg)) {
-            try (ByteArrayOutputStream extractedAttachedMsgOut = new ByteArrayOutputStream()) {
-                extractedAttachedMsg.writeFilesystem(extractedAttachedMsgOut);
-                byte[] extratedAttachedMsgRaw = extractedAttachedMsgOut.toByteArray();
-                MAPIMessage extractedMsgTopLevel = new MAPIMessage(
-                        new ByteArrayInputStream(extratedAttachedMsgRaw));
-                // test properties of rebuilt embedded message
-                testFixedAndVariableLengthPropertiesOfAttachedMSG(extractedMsgTopLevel);
+        if (attachments.length == 2) {
+            MAPIMessage attachedMsg = attachments[0].getEmbeddedMessage();
+            assertNotNull(attachedMsg);
+            // test properties of embedded message
+            testFixedAndVariableLengthPropertiesOfAttachedMSG(attachedMsg);
+            // rebuild top level message from embedded message
+            try (POIFSFileSystem extractedAttachedMsg = rebuildFromAttached(attachedMsg)) {
+                try (ByteArrayOutputStream extractedAttachedMsgOut = new ByteArrayOutputStream()) {
+                    extractedAttachedMsg.writeFilesystem(extractedAttachedMsgOut);
+                    byte[] extratedAttachedMsgRaw = extractedAttachedMsgOut.toByteArray();
+                    MAPIMessage extractedMsgTopLevel = new MAPIMessage(
+                            new ByteArrayInputStream(extratedAttachedMsgRaw));
+                    // test properties of rebuilt embedded message
+                    testFixedAndVariableLengthPropertiesOfAttachedMSG(extractedMsgTopLevel);
+                }
             }
         }
     }
@@ -115,17 +116,17 @@ public class TestExtractEmbeddedMSG {
         POIFSFileSystem newDoc = new POIFSFileSystem();
         MessagePropertiesChunk topLevelChunk = new MessagePropertiesChunk(null);
         // Copy attachments and recipients.
-        int recipientsCount = 0;
-        int attachmentsCount = 0;
+        int recipientscount = 0;
+        int attachmentscount = 0;
         for (Entry entry : attachedMsg.getDirectory()) {
             if (entry.getName().startsWith(RecipientChunks.PREFIX)) {
-                recipientsCount++;
+                recipientscount++;
                 DirectoryEntry newDir = newDoc.createDirectory(entry.getName());
                 for (Entry e : ((DirectoryEntry) entry)) {
                     EntryUtils.copyNodeRecursively(e, newDir);
                 }
             } else if (entry.getName().startsWith(AttachmentChunks.PREFIX)) {
-                attachmentsCount++;
+                attachmentscount++;
                 DirectoryEntry newDir = newDoc.createDirectory(entry.getName());
                 for (Entry e : ((DirectoryEntry) entry)) {
                     EntryUtils.copyNodeRecursively(e, newDir);
@@ -137,13 +138,6 @@ public class TestExtractEmbeddedMSG {
         for (Map.Entry<MAPIProperty, PropertyValue> p : mpc.getRawProperties().entrySet()) {
             PropertyValue val = p.getValue();
             if (!(val instanceof ChunkBasedPropertyValue)) {
-                // Reverse data.
-                byte[] bytes = val.getRawValue();
-                for (int idx = 0; idx < bytes.length / 2; idx++) {
-                    byte xchg = bytes[bytes.length - 1 - idx];
-                    bytes[bytes.length - 1 - idx] = bytes[idx];
-                    bytes[idx] = xchg;
-                }
                 MAPIType type = val.getActualType();
                 if (type != null && type != Types.UNKNOWN) {
                     topLevelChunk.setProperty(val);
@@ -160,17 +154,20 @@ public class TestExtractEmbeddedMSG {
         nameid.createDocument(PropertiesChunk.DEFAULT_NAME_PREFIX + "00040102", new ByteArrayInputStream(new byte[0]));
         // Base properties.
         // Attachment/Recipient counter.
-        topLevelChunk.setAttachmentCount(attachmentsCount);
-        topLevelChunk.setRecipientCount(recipientsCount);
-        topLevelChunk.setNextAttachmentId(attachmentsCount);
-        topLevelChunk.setNextRecipientId(recipientsCount);
+        topLevelChunk.setAttachmentCount(attachmentscount);
+        topLevelChunk.setRecipientCount(recipientscount);
+        topLevelChunk.setNextAttachmentId(attachmentscount);
+        topLevelChunk.setNextRecipientId(recipientscount);
         // Unicode string format.
-        topLevelChunk.setProperty(new PropertyValue(MAPIProperty.STORE_SUPPORT_MASK,
+        byte[] storeSupportMaskData = new byte[4];
+        PropertyValue.LongPropertyValue storeSupportPropertyValue = new PropertyValue.LongPropertyValue(MAPIProperty.STORE_SUPPORT_MASK,
                 MessagePropertiesChunk.PROPERTIES_FLAG_READABLE | MessagePropertiesChunk.PROPERTIES_FLAG_WRITEABLE,
-                ByteBuffer.allocate(4).putInt(0x00040000).array()));
+                storeSupportMaskData);
+        storeSupportPropertyValue.setValue(0x00040000);
+        topLevelChunk.setProperty(storeSupportPropertyValue);
         topLevelChunk.setProperty(new PropertyValue(MAPIProperty.HASATTACH,
                 MessagePropertiesChunk.PROPERTIES_FLAG_READABLE | MessagePropertiesChunk.PROPERTIES_FLAG_WRITEABLE,
-                attachmentsCount == 0 ? new byte[] { 0 } : new byte[] { 1 }));
+                attachmentscount == 0 ? new byte[] { 0 } : new byte[] { 1 }));
         // Copy properties from MSG file system.
         for (Chunk chunk : attachedMsg.getMainChunks().getChunks()) {
             if (!(chunk instanceof MessagePropertiesChunk)) {