From 7c87528bb6168e1e0a862e794859c9e5e32d7868 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Wed, 1 Jun 2016 08:05:07 +0000 Subject: [PATCH] The changes for using AccessController/SecurityManager also added a log which now spams a lot if log is enabled in integration-tests, reduce it a bit by not trying to call "cleaner()" on HeapByteBuffer which does not have it for sure git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746411 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/poifs/nio/FileBackedDataSource.java | 39 +++++++++++-------- .../apache/poi/poifs/nio/TestDataSource.java | 33 ++++++++-------- .../org/apache/poi/util/TestHexDump.java | 23 +++++++---- 3 files changed, 54 insertions(+), 41 deletions(-) diff --git a/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java b/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java index 1ed02168d6..6a661af625 100644 --- a/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java +++ b/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java @@ -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() { - @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() { + @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 + } + }); } } diff --git a/src/testcases/org/apache/poi/poifs/nio/TestDataSource.java b/src/testcases/org/apache/poi/poifs/nio/TestDataSource.java index a7242662ff..198ed7e752 100644 --- a/src/testcases/org/apache/poi/poifs/nio/TestDataSource.java +++ b/src/testcases/org/apache/poi/poifs/nio/TestDataSource.java @@ -19,20 +19,14 @@ 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 diff --git a/src/testcases/org/apache/poi/util/TestHexDump.java b/src/testcases/org/apache/poi/util/TestHexDump.java index a4bba37257..a9d55ae619 100644 --- a/src/testcases/org/apache/poi/util/TestHexDump.java +++ b/src/testcases/org/apache/poi/util/TestHexDump.java @@ -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 {