# HG changeset patch # User bpb # Date 1590008181 25200 # Node ID 4646d1205c04786d83fbc4a48ca2fba73387ce38 # Parent 754f4b281b027b58a0612b1d725dabde517ebf54 8242695: Enhanced buffer support Reviewed-by: alanb, rhalade diff -r 754f4b281b02 -r 4646d1205c04 src/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java --- a/src/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java Fri Sep 11 16:12:45 2020 +0000 +++ b/src/windows/classes/sun/nio/fs/RegistryFileTypeDetector.java Wed May 20 13:56:21 2020 -0700 @@ -57,10 +57,15 @@ // query HKEY_CLASSES_ROOT\ String key = filename.substring(dot); - NativeBuffer keyBuffer = WindowsNativeDispatcher.asNativeBuffer(key); - NativeBuffer nameBuffer = WindowsNativeDispatcher.asNativeBuffer("Content Type"); + NativeBuffer keyBuffer = null; + NativeBuffer nameBuffer = null; try { + keyBuffer = WindowsNativeDispatcher.asNativeBuffer(key); + nameBuffer = WindowsNativeDispatcher.asNativeBuffer("Content Type"); return queryStringValue(keyBuffer.address(), nameBuffer.address()); + } catch (WindowsException we) { + we.rethrowAsIOException(file.toString()); + return null; // keep compiler happy } finally { nameBuffer.release(); keyBuffer.release(); diff -r 754f4b281b02 -r 4646d1205c04 src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java --- a/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java Fri Sep 11 16:12:45 2020 +0000 +++ b/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java Wed May 20 13:56:21 2020 -0700 @@ -1093,7 +1093,12 @@ private static final Unsafe unsafe = Unsafe.getUnsafe(); - static NativeBuffer asNativeBuffer(String s) { + static NativeBuffer asNativeBuffer(String s) throws WindowsException { + if (s.length() > (Integer.MAX_VALUE - 2)/2) { + throw new WindowsException + ("String too long to convert to native buffer"); + } + int stringLengthInBytes = s.length() << 1; int sizeInBytes = stringLengthInBytes + 2; // char terminator