]> source.dussan.org Git - poi.git/commitdiff
The changes for using AccessController/SecurityManager also added a log which now...
authorDominik Stadler <centic@apache.org>
Wed, 1 Jun 2016 08:05:07 +0000 (08:05 +0000)
committerDominik Stadler <centic@apache.org>
Wed, 1 Jun 2016 08:05:07 +0000 (08:05 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746411 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java
src/testcases/org/apache/poi/poifs/nio/TestDataSource.java
src/testcases/org/apache/poi/util/TestHexDump.java

index 1ed02168d6e9476181a113220a68ea065a27d978..6a661af62589fdc3fdd4a269ec0e85e9d736d973 100644 (file)
@@ -162,22 +162,27 @@ public class FileBackedDataSource extends DataSource {
    // unfortunately this might break silently with newer/other Java implementations, 
    // but we at least have unit-tests which will indicate this when run on Windows
    private static void unmap(final ByteBuffer buffer) {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            @Override
-            @SuppressForbidden("Java 9 Jigsaw whitelists access to sun.misc.Cleaner, so setAccessible works")
-            public Void run() {
-                try {
-                    final Method getCleanerMethod = buffer.getClass().getMethod("cleaner");
-                    getCleanerMethod.setAccessible(true);
-                    final Object cleaner = getCleanerMethod.invoke(buffer);
-                    if (cleaner != null) {
-                        cleaner.getClass().getMethod("clean").invoke(cleaner);
-                    }
-                } catch (Exception e) {
-                    logger.log(POILogger.WARN, "Unable to unmap memory mapped ByteBuffer.", e);
-                }
-                return null; // Void
-            }
-        });
+       // not necessary for HeapByteBuffer, avoid lots of log-output on this class
+       if(buffer.getClass().getName().endsWith("HeapByteBuffer")) {
+           return;
+       }
+
+       AccessController.doPrivileged(new PrivilegedAction<Void>() {
+           @Override
+           @SuppressForbidden("Java 9 Jigsaw whitelists access to sun.misc.Cleaner, so setAccessible works")
+           public Void run() {
+               try {
+                   final Method getCleanerMethod = buffer.getClass().getMethod("cleaner");
+                   getCleanerMethod.setAccessible(true);
+                   final Object cleaner = getCleanerMethod.invoke(buffer);
+                   if (cleaner != null) {
+                       cleaner.getClass().getMethod("clean").invoke(cleaner);
+                   }
+               } catch (Exception e) {
+                   logger.log(POILogger.WARN, "Unable to unmap memory mapped ByteBuffer.", e);
+               }
+               return null; // Void
+           }
+       });
     }
 }
index a7242662ff29a041e8f48a1e2a8f8bcc71e7e89b..198ed7e752f86cfcc2db33e6bbc23ddd05dfa0b4 100644 (file)
 
 package org.apache.poi.poifs.nio;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.BufferUnderflowException;
-import java.nio.ByteBuffer;
-
+import junit.framework.TestCase;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.TempFile;
 
-import junit.framework.TestCase;
+import java.io.*;
+import java.nio.BufferUnderflowException;
+import java.nio.ByteBuffer;
 
 /**
  * Tests for the datasource implementations
@@ -121,7 +115,7 @@ public class TestDataSource extends TestCase
        }
     }
 
-    private void writeDataToFile(File temp) throws FileNotFoundException, IOException {
+    private void writeDataToFile(File temp) throws IOException {
         OutputStream str = new FileOutputStream(temp);
            try {
                InputStream in = data.openResourceAsStream("Notes.ole2");
@@ -153,11 +147,11 @@ public class TestDataSource extends TestCase
         assertEquals(0, bs.position());
         assertEquals(0xd0 - 256, bs.get(0));
         assertEquals(0xcf - 256, bs.get(1));
-        assertEquals(0x11 - 000, bs.get(2));
+        assertEquals(0x11, bs.get(2));
         assertEquals(0xe0 - 256, bs.get(3));
         assertEquals(0xd0 - 256, bs.get());
         assertEquals(0xcf - 256, bs.get());
-        assertEquals(0x11 - 000, bs.get());
+        assertEquals(0x11, bs.get());
         assertEquals(0xe0 - 256, bs.get());
 
         // Mid way through
@@ -179,11 +173,12 @@ public class TestDataSource extends TestCase
 
         // Can't go off the end
         try {
-            bs = ds.read(4, 8192);
+            ds.read(4, 8192);
             if(!writeable) {
                 fail("Shouldn't be able to read off the end of the file");
             }
         } catch (IllegalArgumentException e) {
+            // expected here
         }
     }
 
@@ -228,13 +223,17 @@ public class TestDataSource extends TestCase
       try {
          bs.get();
          fail("Shouldn't be able to read off the end");
-      } catch(BufferUnderflowException e) {}
+      } catch(BufferUnderflowException e) {
+          // expected here
+      }
 
       // Past the end
       try {
-         bs = ds.read(4, 256);
+         ds.read(4, 256);
          fail("Shouldn't be able to read off the end");
-      } catch(IndexOutOfBoundsException e) {}
+      } catch(IndexOutOfBoundsException e) {
+          // expected here
+      }
       
       
       // Overwrite
index a4bba37257a849c872a8a5f771dbd839af4aaa05..a9d55ae619fe6510d872346a9d6985839f6fb3d4 100644 (file)
@@ -125,13 +125,12 @@ public class TestHexDump {
                 }
             }
             obj[17] = chrs.toString();
-            format.append("%18$s"+HexDump.EOL);
+            format.append("%18$s").append(HexDump.EOL);
 
             String str = String.format(LocaleUtil.getUserLocale(), format.toString(), obj);
             strExp.append(str);
         }
-        byte bytesExp[] = strExp.toString().getBytes(HexDump.UTF8);
-        return bytesExp;
+        return strExp.toString().getBytes(HexDump.UTF8);
     }
 
     @Test
@@ -157,7 +156,7 @@ public class TestHexDump {
 
         assertEquals("FFFF", HexDump.toHex((short)0xFFFF));
 
-        assertEquals("00000000000004D2", HexDump.toHex(1234l));
+        assertEquals("00000000000004D2", HexDump.toHex(1234L));
 
         assertEquals("0xFE", HexDump.byteToHex(-2));
         assertEquals("0x25", HexDump.byteToHex(37));
@@ -185,18 +184,28 @@ public class TestHexDump {
 
     @Test(expected=ArrayIndexOutOfBoundsException.class)
     public void testDumpToStringOutOfIndex1() throws Exception {
-        HexDump.dump(new byte[ 1 ], 0, -1);
+        HexDump.dump(new byte[1], 0, -1);
     }
 
     @Test(expected=ArrayIndexOutOfBoundsException.class)
     public void testDumpToStringOutOfIndex2() throws Exception {
-        HexDump.dump(new byte[ 1 ], 0, 2);
+        HexDump.dump(new byte[1], 0, 2);
     }
 
+    @Test(expected=ArrayIndexOutOfBoundsException.class)
     public void testDumpToStringOutOfIndex3() throws Exception {
-        HexDump.dump(new byte[ 1 ], 0, 1);
+        HexDump.dump(new byte[1], 0, 1);
+    }
+
+    @Test
+    public void testDumpToStringNoDataEOL1() throws Exception {
+        HexDump.dump(new byte[0], 0, 1);
     }
 
+    @Test
+    public void testDumpToStringNoDataEOL2() throws Exception {
+        HexDump.dump(new byte[0], 0, 0);
+    }
 
     @Test
     public void testDumpToPrintStream() throws IOException {