提交 d1b8f9e1 编写于 作者: L lana

Merge

...@@ -57,7 +57,7 @@ public class AquaImageFactory { ...@@ -57,7 +57,7 @@ public class AquaImageFactory {
return new IconUIResource(new AquaIcon.CachingScalingIcon(kAlertIconSize, kAlertIconSize) { return new IconUIResource(new AquaIcon.CachingScalingIcon(kAlertIconSize, kAlertIconSize) {
Image createImage() { Image createImage() {
return getThisApplicationsIcon(kAlertIconSize, kAlertIconSize); return getGenericJavaIcon();
} }
}); });
} }
...@@ -83,24 +83,6 @@ public class AquaImageFactory { ...@@ -83,24 +83,6 @@ public class AquaImageFactory {
return getAppIconCompositedOn(lockIcon); return getAppIconCompositedOn(lockIcon);
} }
static Image getThisApplicationsIcon(final int width, final int height) {
final String path = getPathToThisApplication();
if (path == null) {
return getGenericJavaIcon();
}
if (path.endsWith("/Home/bin")) {
return getGenericJavaIcon();
}
if (path.startsWith("/usr/bin")) {
return getGenericJavaIcon();
}
return AquaUtils.getCImageCreator().createImageOfFile(path, height, width);
}
static Image getGenericJavaIcon() { static Image getGenericJavaIcon() {
return java.security.AccessController.doPrivileged(new PrivilegedAction<Image>() { return java.security.AccessController.doPrivileged(new PrivilegedAction<Image>() {
public Image run() { public Image run() {
...@@ -144,7 +126,7 @@ public class AquaImageFactory { ...@@ -144,7 +126,7 @@ public class AquaImageFactory {
final Icon smallAppIconScaled = new AquaIcon.CachingScalingIcon( final Icon smallAppIconScaled = new AquaIcon.CachingScalingIcon(
kAlertSubIconSize, kAlertSubIconSize) { kAlertSubIconSize, kAlertSubIconSize) {
Image createImage() { Image createImage() {
return getThisApplicationsIcon(kAlertSubIconSize, kAlertSubIconSize); return getGenericJavaIcon();
} }
}; };
...@@ -528,4 +510,4 @@ public class AquaImageFactory { ...@@ -528,4 +510,4 @@ public class AquaImageFactory {
public static Color getSelectionInactiveForegroundColorUIResource() { public static Color getSelectionInactiveForegroundColorUIResource() {
return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.INACTIVE_SELECTION_FOREGROUND_COLOR)); return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.INACTIVE_SELECTION_FOREGROUND_COLOR));
} }
} }
\ No newline at end of file
...@@ -261,7 +261,8 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -261,7 +261,8 @@ AWT_ASSERT_APPKIT_THREAD;
// returns id for the topmost window under mouse // returns id for the topmost window under mouse
+ (NSInteger) getTopmostWindowUnderMouseID { + (NSInteger) getTopmostWindowUnderMouseID {
NSInteger result = -1;
NSRect screenRect = [[NSScreen mainScreen] frame]; NSRect screenRect = [[NSScreen mainScreen] frame];
NSPoint nsMouseLocation = [NSEvent mouseLocation]; NSPoint nsMouseLocation = [NSEvent mouseLocation];
CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y); CGPoint cgMouseLocation = CGPointMake(nsMouseLocation.x, screenRect.size.height - nsMouseLocation.y);
...@@ -274,11 +275,13 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -274,11 +275,13 @@ AWT_ASSERT_APPKIT_THREAD;
CGRect rect; CGRect rect;
CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect); CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[window objectForKey:(id)kCGWindowBounds], &rect);
if (CGRectContainsPoint(rect, cgMouseLocation)) { if (CGRectContainsPoint(rect, cgMouseLocation)) {
return [[window objectForKey:(id)kCGWindowNumber] integerValue]; result = [[window objectForKey:(id)kCGWindowNumber] integerValue];
break;
} }
} }
} }
return -1; [windows release];
return result;
} }
// checks that this window is under the mouse cursor and this point is not overlapped by others windows // checks that this window is under the mouse cursor and this point is not overlapped by others windows
......
...@@ -66,7 +66,8 @@ static CFMutableArrayRef getAllValidDisplayModes(jint displayID){ ...@@ -66,7 +66,8 @@ static CFMutableArrayRef getAllValidDisplayModes(jint displayID){
CFArrayAppendValue(validModes, cRef); CFArrayAppendValue(validModes, cRef);
} }
} }
CFRelease(allModes);
CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(displayID); CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(displayID);
BOOL containsCurrentMode = NO; BOOL containsCurrentMode = NO;
...@@ -81,6 +82,7 @@ static CFMutableArrayRef getAllValidDisplayModes(jint displayID){ ...@@ -81,6 +82,7 @@ static CFMutableArrayRef getAllValidDisplayModes(jint displayID){
if (!containsCurrentMode) { if (!containsCurrentMode) {
CFArrayAppendValue(validModes, currentMode); CFArrayAppendValue(validModes, currentMode);
} }
CGDisplayModeRelease(currentMode);
return validModes; return validModes;
} }
...@@ -235,17 +237,19 @@ Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode ...@@ -235,17 +237,19 @@ Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
CFArrayRef allModes = getAllValidDisplayModes(displayID); CFArrayRef allModes = getAllValidDisplayModes(displayID);
CGDisplayModeRef closestMatch = getBestModeForParameters(allModes, (int)w, (int)h, (int)bpp, (int)refrate); CGDisplayModeRef closestMatch = getBestModeForParameters(allModes, (int)w, (int)h, (int)bpp, (int)refrate);
__block CGError retCode = kCGErrorSuccess; __block CGError retCode = kCGErrorSuccess;
if (closestMatch != NULL) { if (closestMatch != NULL) {
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ CGDisplayModeRetain(closestMatch);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
CGDisplayConfigRef config; CGDisplayConfigRef config;
retCode = CGBeginDisplayConfiguration(&config); retCode = CGBeginDisplayConfiguration(&config);
if (retCode == kCGErrorSuccess) { if (retCode == kCGErrorSuccess) {
CGConfigureDisplayWithDisplayMode(config, displayID, closestMatch, NULL); CGConfigureDisplayWithDisplayMode(config, displayID, closestMatch, NULL);
retCode = CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly); retCode = CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly);
} }
CGDisplayModeRelease(closestMatch);
}]; }];
} else { } else {
[JNFException raise:env as:kIllegalArgumentException reason:"Invalid display mode"]; [JNFException raise:env as:kIllegalArgumentException reason:"Invalid display mode"];
...@@ -253,8 +257,7 @@ Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode ...@@ -253,8 +257,7 @@ Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode
if (retCode != kCGErrorSuccess){ if (retCode != kCGErrorSuccess){
[JNFException raise:env as:kIllegalArgumentException reason:"Unable to set display mode!"]; [JNFException raise:env as:kIllegalArgumentException reason:"Unable to set display mode!"];
} }
CFRelease(allModes); CFRelease(allModes);
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
......
...@@ -17,7 +17,7 @@ alert=Alert ...@@ -17,7 +17,7 @@ alert=Alert
awtcomponent=AWT-Komponente awtcomponent=AWT-Komponente
checkbox=Kontrollk\u00E4stchen checkbox=Kontrollk\u00E4stchen
colorchooser=Farbauswahl colorchooser=Farbauswahl
columnheader=Spalten-Header columnheader=Spaltenheader
combobox=Kombinationsfeld combobox=Kombinationsfeld
canvas=Leinwand canvas=Leinwand
desktopicon=Desktopsymbol desktopicon=Desktopsymbol
...@@ -46,7 +46,7 @@ progressbar=Fortschrittsbalken ...@@ -46,7 +46,7 @@ progressbar=Fortschrittsbalken
pushbutton=Schaltfl\u00E4che pushbutton=Schaltfl\u00E4che
radiobutton=Optionsfeld radiobutton=Optionsfeld
rootpane=Root-Bereich rootpane=Root-Bereich
rowheader=Zeilen-Header rowheader=Zeilenheader
scrollbar=Bildlaufleiste scrollbar=Bildlaufleiste
scrollpane=Bildlaufbereich scrollpane=Bildlaufbereich
separator=Trennzeichen separator=Trennzeichen
......
/* /*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -39,6 +39,8 @@ import javax.crypto.spec.OAEPParameterSpec; ...@@ -39,6 +39,8 @@ import javax.crypto.spec.OAEPParameterSpec;
import sun.security.rsa.*; import sun.security.rsa.*;
import sun.security.jca.Providers; import sun.security.jca.Providers;
import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec;
import sun.security.util.KeyUtil;
/** /**
* RSA cipher implementation. Supports RSA en/decryption and signing/verifying * RSA cipher implementation. Supports RSA en/decryption and signing/verifying
...@@ -91,8 +93,8 @@ public final class RSACipher extends CipherSpi { ...@@ -91,8 +93,8 @@ public final class RSACipher extends CipherSpi {
// padding object // padding object
private RSAPadding padding; private RSAPadding padding;
// cipher parameter for OAEP padding // cipher parameter for OAEP padding and TLS RSA premaster secret
private OAEPParameterSpec spec = null; private AlgorithmParameterSpec spec = null;
// buffer for the data // buffer for the data
private byte[] buffer; private byte[] buffer;
...@@ -110,6 +112,9 @@ public final class RSACipher extends CipherSpi { ...@@ -110,6 +112,9 @@ public final class RSACipher extends CipherSpi {
// hash algorithm for OAEP // hash algorithm for OAEP
private String oaepHashAlgorithm = "SHA-1"; private String oaepHashAlgorithm = "SHA-1";
// the source of randomness
private SecureRandom random;
public RSACipher() { public RSACipher() {
paddingType = PAD_PKCS1; paddingType = PAD_PKCS1;
} }
...@@ -175,7 +180,7 @@ public final class RSACipher extends CipherSpi { ...@@ -175,7 +180,7 @@ public final class RSACipher extends CipherSpi {
// see JCE spec // see JCE spec
protected AlgorithmParameters engineGetParameters() { protected AlgorithmParameters engineGetParameters() {
if (spec != null) { if (spec != null && spec instanceof OAEPParameterSpec) {
try { try {
AlgorithmParameters params = AlgorithmParameters params =
AlgorithmParameters.getInstance("OAEP", AlgorithmParameters.getInstance("OAEP",
...@@ -276,8 +281,13 @@ public final class RSACipher extends CipherSpi { ...@@ -276,8 +281,13 @@ public final class RSACipher extends CipherSpi {
buffer = new byte[n]; buffer = new byte[n];
} else if (paddingType == PAD_PKCS1) { } else if (paddingType == PAD_PKCS1) {
if (params != null) { if (params != null) {
throw new InvalidAlgorithmParameterException if (!(params instanceof TlsRsaPremasterSecretParameterSpec)) {
("Parameters not supported"); throw new InvalidAlgorithmParameterException(
"Parameters not supported");
}
spec = params;
this.random = random; // for TLS RSA premaster secret
} }
int blockType = (mode <= MODE_DECRYPT) ? RSAPadding.PAD_BLOCKTYPE_2 int blockType = (mode <= MODE_DECRYPT) ? RSAPadding.PAD_BLOCKTYPE_2
: RSAPadding.PAD_BLOCKTYPE_1; : RSAPadding.PAD_BLOCKTYPE_1;
...@@ -293,19 +303,18 @@ public final class RSACipher extends CipherSpi { ...@@ -293,19 +303,18 @@ public final class RSACipher extends CipherSpi {
throw new InvalidKeyException throw new InvalidKeyException
("OAEP cannot be used to sign or verify signatures"); ("OAEP cannot be used to sign or verify signatures");
} }
OAEPParameterSpec myParams;
if (params != null) { if (params != null) {
if (!(params instanceof OAEPParameterSpec)) { if (!(params instanceof OAEPParameterSpec)) {
throw new InvalidAlgorithmParameterException throw new InvalidAlgorithmParameterException
("Wrong Parameters for OAEP Padding"); ("Wrong Parameters for OAEP Padding");
} }
myParams = (OAEPParameterSpec) params; spec = params;
} else { } else {
myParams = new OAEPParameterSpec(oaepHashAlgorithm, "MGF1", spec = new OAEPParameterSpec(oaepHashAlgorithm, "MGF1",
MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT); MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT);
} }
padding = RSAPadding.getInstance(RSAPadding.PAD_OAEP_MGF1, n, padding = RSAPadding.getInstance(RSAPadding.PAD_OAEP_MGF1, n,
random, myParams); random, (OAEPParameterSpec)spec);
if (encrypt) { if (encrypt) {
int k = padding.getMaxDataSize(); int k = padding.getMaxDataSize();
buffer = new byte[k]; buffer = new byte[k];
...@@ -420,17 +429,40 @@ public final class RSACipher extends CipherSpi { ...@@ -420,17 +429,40 @@ public final class RSACipher extends CipherSpi {
if (wrappedKey.length > buffer.length) { if (wrappedKey.length > buffer.length) {
throw new InvalidKeyException("Key is too long for unwrapping"); throw new InvalidKeyException("Key is too long for unwrapping");
} }
boolean isTlsRsaPremasterSecret =
algorithm.equals("TlsRsaPremasterSecret");
Exception failover = null;
byte[] encoded = null;
update(wrappedKey, 0, wrappedKey.length); update(wrappedKey, 0, wrappedKey.length);
try { try {
byte[] encoded = doFinal(); encoded = doFinal();
return ConstructKeys.constructKey(encoded, algorithm, type);
} catch (BadPaddingException e) { } catch (BadPaddingException e) {
// should not occur if (isTlsRsaPremasterSecret) {
throw new InvalidKeyException("Unwrapping failed", e); failover = e;
} else {
throw new InvalidKeyException("Unwrapping failed", e);
}
} catch (IllegalBlockSizeException e) { } catch (IllegalBlockSizeException e) {
// should not occur, handled with length check above // should not occur, handled with length check above
throw new InvalidKeyException("Unwrapping failed", e); throw new InvalidKeyException("Unwrapping failed", e);
} }
if (isTlsRsaPremasterSecret) {
if (!(spec instanceof TlsRsaPremasterSecretParameterSpec)) {
throw new IllegalStateException(
"No TlsRsaPremasterSecretParameterSpec specified");
}
// polish the TLS premaster secret
encoded = KeyUtil.checkTlsPreMasterSecretKey(
((TlsRsaPremasterSecretParameterSpec)spec).getClientVersion(),
((TlsRsaPremasterSecretParameterSpec)spec).getServerVersion(),
random, encoded, (failover != null));
}
return ConstructKeys.constructKey(encoded, algorithm, type);
} }
// see JCE spec // see JCE spec
...@@ -438,5 +470,4 @@ public final class RSACipher extends CipherSpi { ...@@ -438,5 +470,4 @@ public final class RSACipher extends CipherSpi {
RSAKey rsaKey = RSAKeyFactory.toRSAKey(key); RSAKey rsaKey = RSAKeyFactory.toRSAKey(key);
return rsaKey.getModulus().bitLength(); return rsaKey.getModulus().bitLength();
} }
} }
/* /*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -56,7 +56,7 @@ public final class TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi { ...@@ -56,7 +56,7 @@ public final class TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi {
protected void engineInit(AlgorithmParameterSpec params, protected void engineInit(AlgorithmParameterSpec params,
SecureRandom random) throws InvalidAlgorithmParameterException { SecureRandom random) throws InvalidAlgorithmParameterException {
if (params instanceof TlsRsaPremasterSecretParameterSpec == false) { if (!(params instanceof TlsRsaPremasterSecretParameterSpec)) {
throw new InvalidAlgorithmParameterException(MSG); throw new InvalidAlgorithmParameterException(MSG);
} }
this.spec = (TlsRsaPremasterSecretParameterSpec)params; this.spec = (TlsRsaPremasterSecretParameterSpec)params;
...@@ -67,21 +67,20 @@ public final class TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi { ...@@ -67,21 +67,20 @@ public final class TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi {
throw new InvalidParameterException(MSG); throw new InvalidParameterException(MSG);
} }
// Only can be used in client side to generate TLS RSA premaster secret.
protected SecretKey engineGenerateKey() { protected SecretKey engineGenerateKey() {
if (spec == null) { if (spec == null) {
throw new IllegalStateException( throw new IllegalStateException(
"TlsRsaPremasterSecretGenerator must be initialized"); "TlsRsaPremasterSecretGenerator must be initialized");
} }
byte[] b = spec.getEncodedSecret();
if (b == null) { if (random == null) {
if (random == null) { random = new SecureRandom();
random = new SecureRandom();
}
b = new byte[48];
random.nextBytes(b);
b[0] = (byte)spec.getMajorVersion();
b[1] = (byte)spec.getMinorVersion();
} }
byte[] b = new byte[48];
random.nextBytes(b);
b[0] = (byte)spec.getMajorVersion();
b[1] = (byte)spec.getMinorVersion();
return new SecretKeySpec(b, "TlsRsaPremasterSecret"); return new SecretKeySpec(b, "TlsRsaPremasterSecret");
} }
......
...@@ -25,8 +25,8 @@ FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier : ...@@ -25,8 +25,8 @@ FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier :
FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier : FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau. FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
FileChooser.upFolderAccessibleName=Monter FileChooser.upFolderAccessibleName=Monter
FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire de base
FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine FileChooser.homeFolderAccessibleName=R\u00E9pertoire de base
FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier. FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
FileChooser.newFolderAccessibleName=Nouveau dossier FileChooser.newFolderAccessibleName=Nouveau dossier
FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
......
...@@ -22,7 +22,7 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i: ...@@ -22,7 +22,7 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i:
FileChooser.saveInLabel.textAndMnemonic=Spara i: FileChooser.saveInLabel.textAndMnemonic=Spara i:
FileChooser.fileNameLabel.textAndMnemonic=Fil&namn: FileChooser.fileNameLabel.textAndMnemonic=Fil&namn:
FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn: FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn:
FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typ: FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typen:
FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5 FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
FileChooser.upFolderAccessibleName=Upp FileChooser.upFolderAccessibleName=Upp
FileChooser.homeFolderToolTip.textAndMnemonic=Hem FileChooser.homeFolderToolTip.textAndMnemonic=Hem
......
/* /*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -48,7 +48,7 @@ public class DriverResource_zh_CN extends ListResourceBundle { ...@@ -48,7 +48,7 @@ public class DriverResource_zh_CN extends ListResourceBundle {
* Do not translate command arguments and words with a prefix of '-' or '--'. * Do not translate command arguments and words with a prefix of '-' or '--'.
*/ */
private static final Object[][] resource = { private static final Object[][] resource = {
{VERSION, "{0}\u7248\u672C{1}"}, // parameter 0:class name;parameter 1: version value {VERSION, "{0}\u7248\u672C {1}"}, // parameter 0:class name;parameter 1: version value
{BAD_ARGUMENT, "\u9519\u8BEF\u53C2\u6570: {0}"}, {BAD_ARGUMENT, "\u9519\u8BEF\u53C2\u6570: {0}"},
{BAD_OPTION, "\u9519\u8BEF\u9009\u9879: {0}={1}"}, // parameter 0:option name;parameter 1:option value {BAD_OPTION, "\u9519\u8BEF\u9009\u9879: {0}={1}"}, // parameter 0:option name;parameter 1:option value
{BAD_REPACK_OUTPUT, "--repack \u8F93\u51FA\u9519\u8BEF: {0}"}, // parameter 0:filename {BAD_REPACK_OUTPUT, "--repack \u8F93\u51FA\u9519\u8BEF: {0}"}, // parameter 0:filename
......
# #
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -140,7 +140,7 @@ syncrsimpl.valtores = Aufzul\u00F6sender Wert kann sich entweder in der Datenban ...@@ -140,7 +140,7 @@ syncrsimpl.valtores = Aufzul\u00F6sender Wert kann sich entweder in der Datenban
#WebRowSetXmlReader exception #WebRowSetXmlReader exception
wrsxmlreader.invalidcp = Ende von RowSet wurde erreicht. Ung\u00FCltige Cursorposition wrsxmlreader.invalidcp = Ende von RowSet wurde erreicht. Ung\u00FCltige Cursorposition
wrsxmlreader.readxml = readXML: {0} wrsxmlreader.readxml = readXML: {0}
wrsxmlreader.parseerr = ** Parsing-Fehler: {0}, Zeile: {1} , URI: {2} wrsxmlreader.parseerr = ** Parsingfehler: {0}, Zeile: {1} , URI: {2}
#WebRowSetXmlWriter exceptions #WebRowSetXmlWriter exceptions
wrsxmlwriter.ioex = IOException: {0} wrsxmlwriter.ioex = IOException: {0}
......
# #
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -51,8 +51,8 @@ cachedrowsetimpl.first = First: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u64CD ...@@ -51,8 +51,8 @@ cachedrowsetimpl.first = First: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u64CD
cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
cachedrowsetimpl.absolute = absolute: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E cachedrowsetimpl.absolute = absolute: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
cachedrowsetimpl.relative = relative: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E cachedrowsetimpl.relative = relative: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
cachedrowsetimpl.asciistream = ascii\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F cachedrowsetimpl.asciistream = ascii\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u304C\u5931\u6557\u3057\u307E\u3057\u305F
cachedrowsetimpl.binstream = \u30D0\u30A4\u30CA\u30EA\u30FB\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F cachedrowsetimpl.binstream = \u30D0\u30A4\u30CA\u30EA\u30FB\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u304C\u5931\u6557\u3057\u307E\u3057\u305F
cachedrowsetimpl.failedins = \u884C\u306E\u633F\u5165\u306B\u5931\u6557 cachedrowsetimpl.failedins = \u884C\u306E\u633F\u5165\u306B\u5931\u6557
cachedrowsetimpl.updateins = \u633F\u5165\u884C\u306B\u304A\u3044\u3066updateRow\u304C\u547C\u3073\u51FA\u3055\u308C\u307E\u3057\u305F cachedrowsetimpl.updateins = \u633F\u5165\u884C\u306B\u304A\u3044\u3066updateRow\u304C\u547C\u3073\u51FA\u3055\u308C\u307E\u3057\u305F
cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
...@@ -101,7 +101,7 @@ joinrowsetimpl.emptyrowset = \u3053\u306EJoinRowSet\u306B\u7A7A\u306E\u884C\u30B ...@@ -101,7 +101,7 @@ joinrowsetimpl.emptyrowset = \u3053\u306EJoinRowSet\u306B\u7A7A\u306E\u884C\u30B
#JdbcRowSetImpl exceptions #JdbcRowSetImpl exceptions
jdbcrowsetimpl.invalstate = \u7121\u52B9\u306A\u72B6\u614B jdbcrowsetimpl.invalstate = \u7121\u52B9\u306A\u72B6\u614B
jdbcrowsetimpl.connect = JdbcRowSet(connect): JNDI\u304C\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093 jdbcrowsetimpl.connect = JdbcRowSet (connect): JNDI\u304C\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093
jdbcrowsetimpl.paramtype = \u30D1\u30E9\u30E1\u30FC\u30BF\u30FB\u30BF\u30A4\u30D7\u3092\u63A8\u5B9A\u3067\u304D\u307E\u305B\u3093 jdbcrowsetimpl.paramtype = \u30D1\u30E9\u30E1\u30FC\u30BF\u30FB\u30BF\u30A4\u30D7\u3092\u63A8\u5B9A\u3067\u304D\u307E\u305B\u3093
jdbcrowsetimpl.matchcols = \u4E00\u81F4\u5217\u304C\u5217\u306E\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093 jdbcrowsetimpl.matchcols = \u4E00\u81F4\u5217\u304C\u5217\u306E\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093
jdbcrowsetimpl.setmatchcols = \u4E00\u81F4\u5217\u3092\u53D6\u5F97\u3059\u308B\u524D\u306B\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 jdbcrowsetimpl.setmatchcols = \u4E00\u81F4\u5217\u3092\u53D6\u5F97\u3059\u308B\u524D\u306B\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
......
# #
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -153,7 +153,7 @@ xmlrch.errmap = Erro ao definir o Mapa : {0} ...@@ -153,7 +153,7 @@ xmlrch.errmap = Erro ao definir o Mapa : {0}
xmlrch.errmetadata = Erro ao definir metadados : {0} xmlrch.errmetadata = Erro ao definir metadados : {0}
xmlrch.errinsertval = Erro ao inserir valores : {0} xmlrch.errinsertval = Erro ao inserir valores : {0}
xmlrch.errconstr = Erro ao construir a linha : {0} xmlrch.errconstr = Erro ao construir a linha : {0}
xmlrch.errdel = Erro ao deletar a linha : {0} xmlrch.errdel = Erro ao excluir a linha : {0}
xmlrch.errinsert = Erro ao construir a linha de inser\u00E7\u00E3o : {0} xmlrch.errinsert = Erro ao construir a linha de inser\u00E7\u00E3o : {0}
xmlrch.errinsdel = Erro ao construir a linha insdel : {0} xmlrch.errinsdel = Erro ao construir a linha insdel : {0}
xmlrch.errupdate = Erro ao construir a linha de atualiza\u00E7\u00E3o : {0} xmlrch.errupdate = Erro ao construir a linha de atualiza\u00E7\u00E3o : {0}
......
# #
# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -29,11 +29,11 @@ cachedrowsetimpl.invalidp = En ogiltig best\u00E4ndig leverant\u00F6r genererade ...@@ -29,11 +29,11 @@ cachedrowsetimpl.invalidp = En ogiltig best\u00E4ndig leverant\u00F6r genererade
cachedrowsetimpl.nullhash = Kan inte instansiera CachedRowSetImpl. Null-hashtabell skickades till konstruktor cachedrowsetimpl.nullhash = Kan inte instansiera CachedRowSetImpl. Null-hashtabell skickades till konstruktor
cachedrowsetimpl.invalidop = En ogiltig \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 infogad rad cachedrowsetimpl.invalidop = En ogiltig \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 infogad rad
cachedrowsetimpl.accfailed = acceptChanges utf\u00F6rdes inte cachedrowsetimpl.accfailed = acceptChanges utf\u00F6rdes inte
cachedrowsetimpl.invalidcp = Mark\u00F6rpositionen \u00E4r ogiltig cachedrowsetimpl.invalidcp = Ogiltigt mark\u00F6rl\u00E4ge
cachedrowsetimpl.illegalop = En otill\u00E5ten \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 en icke infogad rad cachedrowsetimpl.illegalop = En otill\u00E5ten \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 en icke infogad rad
cachedrowsetimpl.clonefail = Kloningen utf\u00F6rdes inte: {0} cachedrowsetimpl.clonefail = Kloningen utf\u00F6rdes inte: {0}
cachedrowsetimpl.invalidcol = Kolumnindexet \u00E4r ogiltigt cachedrowsetimpl.invalidcol = Ogiltigt kolumnindex
cachedrowsetimpl.invalcolnm = Kolumnnamnet \u00E4r ogiltigt cachedrowsetimpl.invalcolnm = Ogiltigt kolumnnamn
cachedrowsetimpl.boolfail = getBoolen utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1} cachedrowsetimpl.boolfail = getBoolen utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
cachedrowsetimpl.bytefail = getByte utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1} cachedrowsetimpl.bytefail = getByte utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
cachedrowsetimpl.shortfail = getShort utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1} cachedrowsetimpl.shortfail = getShort utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
...@@ -60,7 +60,7 @@ cachedrowsetimpl.movetoins1 = moveToInsertRow: inga metadata ...@@ -60,7 +60,7 @@ cachedrowsetimpl.movetoins1 = moveToInsertRow: inga metadata
cachedrowsetimpl.movetoins2 = moveToInsertRow: ogiltigt antal kolumner cachedrowsetimpl.movetoins2 = moveToInsertRow: ogiltigt antal kolumner
cachedrowsetimpl.tablename = Tabellnamnet kan inte vara null cachedrowsetimpl.tablename = Tabellnamnet kan inte vara null
cachedrowsetimpl.keycols = Ogiltiga nyckelkolumner cachedrowsetimpl.keycols = Ogiltiga nyckelkolumner
cachedrowsetimpl.invalidcol = Kolumnindexet \u00E4r ogiltigt cachedrowsetimpl.invalidcol = Ogiltigt kolumnindex
cachedrowsetimpl.opnotsupp = Databasen har inte st\u00F6d f\u00F6r denna \u00E5tg\u00E4rd cachedrowsetimpl.opnotsupp = Databasen har inte st\u00F6d f\u00F6r denna \u00E5tg\u00E4rd
cachedrowsetimpl.matchcols = Matchningskolumnerna \u00E4r inte samma som de som st\u00E4llts in cachedrowsetimpl.matchcols = Matchningskolumnerna \u00E4r inte samma som de som st\u00E4llts in
cachedrowsetimpl.setmatchcols = St\u00E4ll in matchningskolumnerna innan du h\u00E4mtar dem cachedrowsetimpl.setmatchcols = St\u00E4ll in matchningskolumnerna innan du h\u00E4mtar dem
...@@ -81,7 +81,7 @@ cachedrowsetimpl.featnotsupp = Det finns inget st\u00F6d f\u00F6r denna funktion ...@@ -81,7 +81,7 @@ cachedrowsetimpl.featnotsupp = Det finns inget st\u00F6d f\u00F6r denna funktion
# WebRowSetImpl exceptions # WebRowSetImpl exceptions
webrowsetimpl.nullhash = Kan inte instansiera WebRowSetImpl. Null-hashtabell skickades till konstruktor. webrowsetimpl.nullhash = Kan inte instansiera WebRowSetImpl. Null-hashtabell skickades till konstruktor.
webrowsetimpl.invalidwr = Ogiltig f\u00F6rfattare webrowsetimpl.invalidwr = Ogiltig skrivfunktion
webrowsetimpl.invalidrd = Ogiltig l\u00E4sare webrowsetimpl.invalidrd = Ogiltig l\u00E4sare
#FilteredRowSetImpl exceptions #FilteredRowSetImpl exceptions
......
...@@ -25,8 +25,8 @@ FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier : ...@@ -25,8 +25,8 @@ FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier :
FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier : FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau. FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
FileChooser.upFolderAccessibleName=Monter FileChooser.upFolderAccessibleName=Monter
FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire de base
FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine FileChooser.homeFolderAccessibleName=R\u00E9pertoire de base
FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier. FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
FileChooser.newFolderAccessibleName=Nouveau dossier FileChooser.newFolderAccessibleName=Nouveau dossier
FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
......
...@@ -22,7 +22,7 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i: ...@@ -22,7 +22,7 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i:
FileChooser.saveInLabel.textAndMnemonic=Spara i: FileChooser.saveInLabel.textAndMnemonic=Spara i:
FileChooser.fileNameLabel.textAndMnemonic=&Fil: FileChooser.fileNameLabel.textAndMnemonic=&Fil:
FileChooser.folderNameLabel.textAndMnemonic=&Mapp: FileChooser.folderNameLabel.textAndMnemonic=&Mapp:
FileChooser.filesOfTypeLabel.textAndMnemonic=Mapp&namn: FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typen:
FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5 FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
FileChooser.upFolderAccessibleName=Upp FileChooser.upFolderAccessibleName=Upp
FileChooser.homeFolderToolTip.textAndMnemonic=Hem FileChooser.homeFolderToolTip.textAndMnemonic=Hem
......
...@@ -25,8 +25,8 @@ FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier : ...@@ -25,8 +25,8 @@ FileChooser.folderNameLabel.textAndMnemonic=&Nom du dossier :
FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier : FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau. FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
FileChooser.upFolderAccessibleName=Monter FileChooser.upFolderAccessibleName=Monter
FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire de base
FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine FileChooser.homeFolderAccessibleName=R\u00E9pertoire de base
FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier. FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
FileChooser.newFolderAccessibleName=Nouveau dossier FileChooser.newFolderAccessibleName=Nouveau dossier
FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
......
...@@ -22,7 +22,7 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i: ...@@ -22,7 +22,7 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i:
FileChooser.saveInLabel.textAndMnemonic=Spara i: FileChooser.saveInLabel.textAndMnemonic=Spara i:
FileChooser.fileNameLabel.textAndMnemonic=Fil&namn: FileChooser.fileNameLabel.textAndMnemonic=Fil&namn:
FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn: FileChooser.folderNameLabel.textAndMnemonic=Mapp&namn:
FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typ: FileChooser.filesOfTypeLabel.textAndMnemonic=Filer av &typen:
FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5 FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5
FileChooser.upFolderAccessibleName=Upp FileChooser.upFolderAccessibleName=Upp
FileChooser.homeFolderToolTip.textAndMnemonic=Hem FileChooser.homeFolderToolTip.textAndMnemonic=Hem
......
...@@ -47,6 +47,6 @@ memory_attaching.description = \u5171\u6709\u30E1\u30E2\u30EA\u30FC\u3067\u305D\ ...@@ -47,6 +47,6 @@ memory_attaching.description = \u5171\u6709\u30E1\u30E2\u30EA\u30FC\u3067\u305D\
memory_listening.name = VM\u3078\u306E\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u305F\u3081\u306E\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u9818\u57DF\u540D memory_listening.name = VM\u3078\u306E\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u305F\u3081\u306E\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u9818\u57DF\u540D
memory_listening.name.label = \u540D\u524D memory_listening.name.label = \u540D\u524D
memory_listening.description = \u305D\u306E\u4ED6\u306EVM\u306B\u3088\u308A\u958B\u59CB\u3055\u308C\u308B\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u63A5\u7D9A\u3092\u53D7\u3051\u5165\u308C\u307E\u3059 memory_listening.description = \u305D\u306E\u4ED6\u306EVM\u306B\u3088\u308A\u958B\u59CB\u3055\u308C\u308B\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u63A5\u7D9A\u3092\u53D7\u3051\u5165\u308C\u307E\u3059
process_attaching.description = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u30D7\u30ED\u30BB\u30B9ID(pid)\u3092\u4F7F\u7528\u3057\u3066\u63A5\u7D9A\u3057\u307E\u3059 process_attaching.description = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u30D7\u30ED\u30BB\u30B9ID (pid)\u3092\u4F7F\u7528\u3057\u3066\u63A5\u7D9A\u3057\u307E\u3059
process_attaching.pid = pid process_attaching.pid = pid
process_attaching.pid.label = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9ID(pid) process_attaching.pid.label = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9ID (pid)
...@@ -752,9 +752,12 @@ public final class Files { ...@@ -752,9 +752,12 @@ public final class Files {
} }
if (parent == null) { if (parent == null) {
// unable to find existing parent // unable to find existing parent
if (se != null) if (se == null) {
throw new FileSystemException(dir.toString(), null,
"Unable to determine if root directory exists");
} else {
throw se; throw se;
throw new IOException("Root directory does not exist"); }
} }
// create directories // create directories
......
...@@ -2905,8 +2905,8 @@ public final class Locale implements Cloneable, Serializable { ...@@ -2905,8 +2905,8 @@ public final class Locale implements Cloneable, Serializable {
for (int i = 1; i < subtags.length; i++) { for (int i = 1; i < subtags.length; i++) {
if (isSubtagIllFormed(subtags[i], false)) { if (isSubtagIllFormed(subtags[i], false)) {
isIllFormed = true; isIllFormed = true;
break;
} }
break;
} }
} }
if (isIllFormed) { if (isIllFormed) {
......
...@@ -277,17 +277,61 @@ final class SortedOps { ...@@ -277,17 +277,61 @@ final class SortedOps {
} }
} }
/**
* Abstract {@link Sink} for implementing sort on reference streams.
*
* <p>
* Note: documentation below applies to reference and all primitive sinks.
* <p>
* Sorting sinks first accept all elements, buffering then into an array
* or a re-sizable data structure, if the size of the pipeline is known or
* unknown respectively. At the end of the sink protocol those elements are
* sorted and then pushed downstream.
* This class records if {@link #cancellationRequested} is called. If so it
* can be inferred that the source pushing source elements into the pipeline
* knows that the pipeline is short-circuiting. In such cases sub-classes
* pushing elements downstream will preserve the short-circuiting protocol
* by calling {@code downstream.cancellationRequested()} and checking the
* result is {@code false} before an element is pushed.
* <p>
* Note that the above behaviour is an optimization for sorting with
* sequential streams. It is not an error that more elements, than strictly
* required to produce a result, may flow through the pipeline. This can
* occur, in general (not restricted to just sorting), for short-circuiting
* parallel pipelines.
*/
private static abstract class AbstractRefSortingSink<T> extends Sink.ChainedReference<T, T> {
protected final Comparator<? super T> comparator;
// @@@ could be a lazy final value, if/when support is added
protected boolean cancellationWasRequested;
AbstractRefSortingSink(Sink<? super T> downstream, Comparator<? super T> comparator) {
super(downstream);
this.comparator = comparator;
}
/**
* Records is cancellation is requested so short-circuiting behaviour
* can be preserved when the sorted elements are pushed downstream.
*
* @return false, as this sink never short-circuits.
*/
@Override
public final boolean cancellationRequested() {
cancellationWasRequested = true;
return false;
}
}
/** /**
* {@link Sink} for implementing sort on SIZED reference streams. * {@link Sink} for implementing sort on SIZED reference streams.
*/ */
private static final class SizedRefSortingSink<T> extends Sink.ChainedReference<T, T> { private static final class SizedRefSortingSink<T> extends AbstractRefSortingSink<T> {
private final Comparator<? super T> comparator;
private T[] array; private T[] array;
private int offset; private int offset;
SizedRefSortingSink(Sink<? super T> sink, Comparator<? super T> comparator) { SizedRefSortingSink(Sink<? super T> sink, Comparator<? super T> comparator) {
super(sink); super(sink, comparator);
this.comparator = comparator;
} }
@Override @Override
...@@ -301,8 +345,14 @@ final class SortedOps { ...@@ -301,8 +345,14 @@ final class SortedOps {
public void end() { public void end() {
Arrays.sort(array, 0, offset, comparator); Arrays.sort(array, 0, offset, comparator);
downstream.begin(offset); downstream.begin(offset);
for (int i = 0; i < offset; i++) if (!cancellationWasRequested) {
downstream.accept(array[i]); for (int i = 0; i < offset; i++)
downstream.accept(array[i]);
}
else {
for (int i = 0; i < offset && !downstream.cancellationRequested(); i++)
downstream.accept(array[i]);
}
downstream.end(); downstream.end();
array = null; array = null;
} }
...@@ -316,13 +366,11 @@ final class SortedOps { ...@@ -316,13 +366,11 @@ final class SortedOps {
/** /**
* {@link Sink} for implementing sort on reference streams. * {@link Sink} for implementing sort on reference streams.
*/ */
private static final class RefSortingSink<T> extends Sink.ChainedReference<T, T> { private static final class RefSortingSink<T> extends AbstractRefSortingSink<T> {
private final Comparator<? super T> comparator;
private ArrayList<T> list; private ArrayList<T> list;
RefSortingSink(Sink<? super T> sink, Comparator<? super T> comparator) { RefSortingSink(Sink<? super T> sink, Comparator<? super T> comparator) {
super(sink); super(sink, comparator);
this.comparator = comparator;
} }
@Override @Override
...@@ -336,7 +384,15 @@ final class SortedOps { ...@@ -336,7 +384,15 @@ final class SortedOps {
public void end() { public void end() {
list.sort(comparator); list.sort(comparator);
downstream.begin(list.size()); downstream.begin(list.size());
list.forEach(downstream::accept); if (!cancellationWasRequested) {
list.forEach(downstream::accept);
}
else {
for (T t : list) {
if (downstream.cancellationRequested()) break;
downstream.accept(t);
}
}
downstream.end(); downstream.end();
list = null; list = null;
} }
...@@ -347,10 +403,27 @@ final class SortedOps { ...@@ -347,10 +403,27 @@ final class SortedOps {
} }
} }
/**
* Abstract {@link Sink} for implementing sort on int streams.
*/
private static abstract class AbstractIntSortingSink extends Sink.ChainedInt<Integer> {
protected boolean cancellationWasRequested;
AbstractIntSortingSink(Sink<? super Integer> downstream) {
super(downstream);
}
@Override
public final boolean cancellationRequested() {
cancellationWasRequested = true;
return false;
}
}
/** /**
* {@link Sink} for implementing sort on SIZED int streams. * {@link Sink} for implementing sort on SIZED int streams.
*/ */
private static final class SizedIntSortingSink extends Sink.ChainedInt<Integer> { private static final class SizedIntSortingSink extends AbstractIntSortingSink {
private int[] array; private int[] array;
private int offset; private int offset;
...@@ -369,8 +442,14 @@ final class SortedOps { ...@@ -369,8 +442,14 @@ final class SortedOps {
public void end() { public void end() {
Arrays.sort(array, 0, offset); Arrays.sort(array, 0, offset);
downstream.begin(offset); downstream.begin(offset);
for (int i = 0; i < offset; i++) if (!cancellationWasRequested) {
downstream.accept(array[i]); for (int i = 0; i < offset; i++)
downstream.accept(array[i]);
}
else {
for (int i = 0; i < offset && !downstream.cancellationRequested(); i++)
downstream.accept(array[i]);
}
downstream.end(); downstream.end();
array = null; array = null;
} }
...@@ -384,7 +463,7 @@ final class SortedOps { ...@@ -384,7 +463,7 @@ final class SortedOps {
/** /**
* {@link Sink} for implementing sort on int streams. * {@link Sink} for implementing sort on int streams.
*/ */
private static final class IntSortingSink extends Sink.ChainedInt<Integer> { private static final class IntSortingSink extends AbstractIntSortingSink {
private SpinedBuffer.OfInt b; private SpinedBuffer.OfInt b;
IntSortingSink(Sink<? super Integer> sink) { IntSortingSink(Sink<? super Integer> sink) {
...@@ -403,8 +482,16 @@ final class SortedOps { ...@@ -403,8 +482,16 @@ final class SortedOps {
int[] ints = b.asPrimitiveArray(); int[] ints = b.asPrimitiveArray();
Arrays.sort(ints); Arrays.sort(ints);
downstream.begin(ints.length); downstream.begin(ints.length);
for (int anInt : ints) if (!cancellationWasRequested) {
downstream.accept(anInt); for (int anInt : ints)
downstream.accept(anInt);
}
else {
for (int anInt : ints) {
if (downstream.cancellationRequested()) break;
downstream.accept(anInt);
}
}
downstream.end(); downstream.end();
} }
...@@ -414,10 +501,27 @@ final class SortedOps { ...@@ -414,10 +501,27 @@ final class SortedOps {
} }
} }
/**
* Abstract {@link Sink} for implementing sort on long streams.
*/
private static abstract class AbstractLongSortingSink extends Sink.ChainedLong<Long> {
protected boolean cancellationWasRequested;
AbstractLongSortingSink(Sink<? super Long> downstream) {
super(downstream);
}
@Override
public final boolean cancellationRequested() {
cancellationWasRequested = true;
return false;
}
}
/** /**
* {@link Sink} for implementing sort on SIZED long streams. * {@link Sink} for implementing sort on SIZED long streams.
*/ */
private static final class SizedLongSortingSink extends Sink.ChainedLong<Long> { private static final class SizedLongSortingSink extends AbstractLongSortingSink {
private long[] array; private long[] array;
private int offset; private int offset;
...@@ -436,8 +540,14 @@ final class SortedOps { ...@@ -436,8 +540,14 @@ final class SortedOps {
public void end() { public void end() {
Arrays.sort(array, 0, offset); Arrays.sort(array, 0, offset);
downstream.begin(offset); downstream.begin(offset);
for (int i = 0; i < offset; i++) if (!cancellationWasRequested) {
downstream.accept(array[i]); for (int i = 0; i < offset; i++)
downstream.accept(array[i]);
}
else {
for (int i = 0; i < offset && !downstream.cancellationRequested(); i++)
downstream.accept(array[i]);
}
downstream.end(); downstream.end();
array = null; array = null;
} }
...@@ -451,7 +561,7 @@ final class SortedOps { ...@@ -451,7 +561,7 @@ final class SortedOps {
/** /**
* {@link Sink} for implementing sort on long streams. * {@link Sink} for implementing sort on long streams.
*/ */
private static final class LongSortingSink extends Sink.ChainedLong<Long> { private static final class LongSortingSink extends AbstractLongSortingSink {
private SpinedBuffer.OfLong b; private SpinedBuffer.OfLong b;
LongSortingSink(Sink<? super Long> sink) { LongSortingSink(Sink<? super Long> sink) {
...@@ -470,8 +580,16 @@ final class SortedOps { ...@@ -470,8 +580,16 @@ final class SortedOps {
long[] longs = b.asPrimitiveArray(); long[] longs = b.asPrimitiveArray();
Arrays.sort(longs); Arrays.sort(longs);
downstream.begin(longs.length); downstream.begin(longs.length);
for (long aLong : longs) if (!cancellationWasRequested) {
downstream.accept(aLong); for (long aLong : longs)
downstream.accept(aLong);
}
else {
for (long aLong : longs) {
if (downstream.cancellationRequested()) break;
downstream.accept(aLong);
}
}
downstream.end(); downstream.end();
} }
...@@ -481,10 +599,27 @@ final class SortedOps { ...@@ -481,10 +599,27 @@ final class SortedOps {
} }
} }
/**
* Abstract {@link Sink} for implementing sort on long streams.
*/
private static abstract class AbstractDoubleSortingSink extends Sink.ChainedDouble<Double> {
protected boolean cancellationWasRequested;
AbstractDoubleSortingSink(Sink<? super Double> downstream) {
super(downstream);
}
@Override
public final boolean cancellationRequested() {
cancellationWasRequested = true;
return false;
}
}
/** /**
* {@link Sink} for implementing sort on SIZED double streams. * {@link Sink} for implementing sort on SIZED double streams.
*/ */
private static final class SizedDoubleSortingSink extends Sink.ChainedDouble<Double> { private static final class SizedDoubleSortingSink extends AbstractDoubleSortingSink {
private double[] array; private double[] array;
private int offset; private int offset;
...@@ -503,8 +638,14 @@ final class SortedOps { ...@@ -503,8 +638,14 @@ final class SortedOps {
public void end() { public void end() {
Arrays.sort(array, 0, offset); Arrays.sort(array, 0, offset);
downstream.begin(offset); downstream.begin(offset);
for (int i = 0; i < offset; i++) if (!cancellationWasRequested) {
downstream.accept(array[i]); for (int i = 0; i < offset; i++)
downstream.accept(array[i]);
}
else {
for (int i = 0; i < offset && !downstream.cancellationRequested(); i++)
downstream.accept(array[i]);
}
downstream.end(); downstream.end();
array = null; array = null;
} }
...@@ -518,7 +659,7 @@ final class SortedOps { ...@@ -518,7 +659,7 @@ final class SortedOps {
/** /**
* {@link Sink} for implementing sort on double streams. * {@link Sink} for implementing sort on double streams.
*/ */
private static final class DoubleSortingSink extends Sink.ChainedDouble<Double> { private static final class DoubleSortingSink extends AbstractDoubleSortingSink {
private SpinedBuffer.OfDouble b; private SpinedBuffer.OfDouble b;
DoubleSortingSink(Sink<? super Double> sink) { DoubleSortingSink(Sink<? super Double> sink) {
...@@ -537,8 +678,16 @@ final class SortedOps { ...@@ -537,8 +678,16 @@ final class SortedOps {
double[] doubles = b.asPrimitiveArray(); double[] doubles = b.asPrimitiveArray();
Arrays.sort(doubles); Arrays.sort(doubles);
downstream.begin(doubles.length); downstream.begin(doubles.length);
for (double aDouble : doubles) if (!cancellationWasRequested) {
downstream.accept(aDouble); for (double aDouble : doubles)
downstream.accept(aDouble);
}
else {
for (double aDouble : doubles) {
if (downstream.cancellationRequested()) break;
downstream.accept(aDouble);
}
}
downstream.end(); downstream.end();
} }
......
...@@ -3985,6 +3985,17 @@ public abstract class JComponent extends Container implements Serializable, ...@@ -3985,6 +3985,17 @@ public abstract class JComponent extends Container implements Serializable,
* @since 1.4 * @since 1.4
*/ */
public AccessibleKeyBinding getAccessibleKeyBinding() { public AccessibleKeyBinding getAccessibleKeyBinding() {
// Try to get the linked label's mnemonic if it exists
Object o = getClientProperty(JLabel.LABELED_BY_PROPERTY);
if (o instanceof Accessible){
AccessibleContext ac = ((Accessible) o).getAccessibleContext();
if (ac != null){
AccessibleComponent comp = ac.getAccessibleComponent();
if (! (comp instanceof AccessibleExtendedComponent))
return null;
return ((AccessibleExtendedComponent)comp).getAccessibleKeyBinding();
}
}
return null; return null;
} }
} // inner class AccessibleJComponent } // inner class AccessibleJComponent
......
...@@ -133,8 +133,8 @@ public class LineBorder extends AbstractBorder ...@@ -133,8 +133,8 @@ public class LineBorder extends AbstractBorder
int offs = this.thickness; int offs = this.thickness;
int size = offs + offs; int size = offs + offs;
if (this.roundedCorners) { if (this.roundedCorners) {
int arc = offs + size; float arc = .2f * offs;
outer = new RoundRectangle2D.Float(x, y, width, height, arc, arc); outer = new RoundRectangle2D.Float(x, y, width, height, offs, offs);
inner = new RoundRectangle2D.Float(x + offs, y + offs, width - size, height - size, arc, arc); inner = new RoundRectangle2D.Float(x + offs, y + offs, width - size, height - size, arc, arc);
} }
else { else {
......
/* /*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -57,9 +57,9 @@ public class MsgAppletViewer_ja extends ListResourceBundle { ...@@ -57,9 +57,9 @@ public class MsgAppletViewer_ja extends ListResourceBundle {
{"appletviewer.appletinfo.applet", "-- \u30A2\u30D7\u30EC\u30C3\u30C8\u60C5\u5831\u306A\u3057 --"}, {"appletviewer.appletinfo.applet", "-- \u30A2\u30D7\u30EC\u30C3\u30C8\u60C5\u5831\u306A\u3057 --"},
{"appletviewer.appletinfo.param", "-- \u30D1\u30E9\u30E1\u30FC\u30BF\u60C5\u5831\u306A\u3057 --"}, {"appletviewer.appletinfo.param", "-- \u30D1\u30E9\u30E1\u30FC\u30BF\u60C5\u5831\u306A\u3057 --"},
{"appletviewer.appletinfo.textframe", "\u30A2\u30D7\u30EC\u30C3\u30C8\u60C5\u5831"}, {"appletviewer.appletinfo.textframe", "\u30A2\u30D7\u30EC\u30C3\u30C8\u60C5\u5831"},
{"appletviewer.appletprint.fail", "\u5370\u5237\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"}, {"appletviewer.appletprint.fail", "\u5370\u5237\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002"},
{"appletviewer.appletprint.finish", "\u5370\u5237\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002"}, {"appletviewer.appletprint.finish", "\u5370\u5237\u3092\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002"},
{"appletviewer.appletprint.cancel", "\u5370\u5237\u304C\u4E2D\u6B62\u3055\u308C\u307E\u3057\u305F\u3002"}, {"appletviewer.appletprint.cancel", "\u5370\u5237\u304C\u53D6\u308A\u6D88\u3055\u308C\u307E\u3057\u305F\u3002"},
{"appletviewer.appletencoding", "\u6587\u5B57\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0: {0}"}, {"appletviewer.appletencoding", "\u6587\u5B57\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0: {0}"},
{"appletviewer.parse.warning.requiresname", "\u8B66\u544A: <param name=... value=...>\u30BF\u30B0\u306Bname\u5C5E\u6027\u304C\u5FC5\u8981\u3067\u3059\u3002"}, {"appletviewer.parse.warning.requiresname", "\u8B66\u544A: <param name=... value=...>\u30BF\u30B0\u306Bname\u5C5E\u6027\u304C\u5FC5\u8981\u3067\u3059\u3002"},
{"appletviewer.parse.warning.paramoutside", "\u8B66\u544A: <param>\u30BF\u30B0\u304C<applet> ... </applet>\u306E\u5916\u5074\u3067\u3059\u3002"}, {"appletviewer.parse.warning.paramoutside", "\u8B66\u544A: <param>\u30BF\u30B0\u304C<applet> ... </applet>\u306E\u5916\u5074\u3067\u3059\u3002"},
...@@ -98,7 +98,7 @@ public class MsgAppletViewer_ja extends ListResourceBundle { ...@@ -98,7 +98,7 @@ public class MsgAppletViewer_ja extends ListResourceBundle {
{"appletioexception.loadclass.throw.notloaded", "\u30AF\u30E9\u30B9\u304C\u30ED\u30FC\u30C9\u3055\u308C\u307E\u305B\u3093: {0}"}, {"appletioexception.loadclass.throw.notloaded", "\u30AF\u30E9\u30B9\u304C\u30ED\u30FC\u30C9\u3055\u308C\u307E\u305B\u3093: {0}"},
{"appletclassloader.loadcode.verbose", "{1}\u3092\u53D6\u5F97\u3059\u308B\u305F\u3081\u306E{0}\u3078\u306E\u30B9\u30C8\u30EA\u30FC\u30E0\u3092\u958B\u304D\u307E\u3059"}, {"appletclassloader.loadcode.verbose", "{1}\u3092\u53D6\u5F97\u3059\u308B\u305F\u3081\u306E{0}\u3078\u306E\u30B9\u30C8\u30EA\u30FC\u30E0\u3092\u958B\u304D\u307E\u3059"},
{"appletclassloader.filenotfound", "{0}\u306E\u691C\u7D22\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"}, {"appletclassloader.filenotfound", "{0}\u306E\u691C\u7D22\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},
{"appletclassloader.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"}, {"appletclassloader.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
{"appletclassloader.fileioexception", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"}, {"appletclassloader.fileioexception", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
{"appletclassloader.fileexception", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"}, {"appletclassloader.fileexception", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
{"appletclassloader.filedeath", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u304C\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F"}, {"appletclassloader.filedeath", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u304C\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F"},
...@@ -132,7 +132,7 @@ public class MsgAppletViewer_ja extends ListResourceBundle { ...@@ -132,7 +132,7 @@ public class MsgAppletViewer_ja extends ListResourceBundle {
{"appletpanel.notdisposed", "\u30ED\u30FC\u30C9: \u30A2\u30D7\u30EC\u30C3\u30C8\u304C\u7834\u68C4\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"}, {"appletpanel.notdisposed", "\u30ED\u30FC\u30C9: \u30A2\u30D7\u30EC\u30C3\u30C8\u304C\u7834\u68C4\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
{"appletpanel.bail", "\u4E2D\u65AD\u6E08: \u7D42\u4E86\u3057\u3066\u3044\u307E\u3059\u3002"}, {"appletpanel.bail", "\u4E2D\u65AD\u6E08: \u7D42\u4E86\u3057\u3066\u3044\u307E\u3059\u3002"},
{"appletpanel.filenotfound", "{0}\u306E\u691C\u7D22\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"}, {"appletpanel.filenotfound", "{0}\u306E\u691C\u7D22\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},
{"appletpanel.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"}, {"appletpanel.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
{"appletpanel.fileioexception", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"}, {"appletpanel.fileioexception", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
{"appletpanel.fileexception", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"}, {"appletpanel.fileexception", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
{"appletpanel.filedeath", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u304C\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F"}, {"appletpanel.filedeath", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u304C\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F"},
......
/* /*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -93,7 +93,7 @@ public class MsgAppletViewer_pt_BR extends ListResourceBundle { ...@@ -93,7 +93,7 @@ public class MsgAppletViewer_pt_BR extends ListResourceBundle {
{"appletviewer.main.nosecmgr", "Advert\u00EAncia: SecurityManager n\u00E3o instalado!"}, {"appletviewer.main.nosecmgr", "Advert\u00EAncia: SecurityManager n\u00E3o instalado!"},
{"appletviewer.main.warning", "Advert\u00EAncia: Nenhum applet iniciado. Certifique-se de que a entrada contenha uma tag <applet>."}, {"appletviewer.main.warning", "Advert\u00EAncia: Nenhum applet iniciado. Certifique-se de que a entrada contenha uma tag <applet>."},
{"appletviewer.main.warn.prop.overwrite", "Advert\u00EAncia: Substituindo a propriedade do sistema temporariamente a pedido do usu\u00E1rio: chave: {0} valor antigo: {1} valor novo: {2}"}, {"appletviewer.main.warn.prop.overwrite", "Advert\u00EAncia: Substituindo a propriedade do sistema temporariamente a pedido do usu\u00E1rio: chave: {0} valor antigo: {1} valor novo: {2}"},
{"appletviewer.main.warn.cantreadprops", "Advert\u00EAncia: N\u00E3o \u00E9 poss\u00EDvel ler o arquivo de propriedades AppletViewer: {0} Usando defaults."}, {"appletviewer.main.warn.cantreadprops", "Advert\u00EAncia: N\u00E3o \u00E9 poss\u00EDvel ler o arquivo de propriedades AppletViewer: {0} Usando padr\u00F5es."},
{"appletioexception.loadclass.throw.interrupted", "carregamento de classe interrompido: {0}"}, {"appletioexception.loadclass.throw.interrupted", "carregamento de classe interrompido: {0}"},
{"appletioexception.loadclass.throw.notloaded", "classe n\u00E3o carregada: {0}"}, {"appletioexception.loadclass.throw.notloaded", "classe n\u00E3o carregada: {0}"},
{"appletclassloader.loadcode.verbose", "Fluxo de abertura para: {0} para obter {1}"}, {"appletclassloader.loadcode.verbose", "Fluxo de abertura para: {0} para obter {1}"},
......
/* /*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -85,7 +85,7 @@ public class MsgAppletViewer_sv extends ListResourceBundle { ...@@ -85,7 +85,7 @@ public class MsgAppletViewer_sv extends ListResourceBundle {
{"appletviewer.main.prop.store", "Anv\u00E4ndarspecifika egenskaper f\u00F6r AppletViewer"}, {"appletviewer.main.prop.store", "Anv\u00E4ndarspecifika egenskaper f\u00F6r AppletViewer"},
{"appletviewer.main.err.prop.cantread", "Kan inte l\u00E4sa egenskapsfilen: {0}"}, {"appletviewer.main.err.prop.cantread", "Kan inte l\u00E4sa egenskapsfilen: {0}"},
{"appletviewer.main.err.prop.cantsave", "Kan inte spara egenskapsfilen: {0}"}, {"appletviewer.main.err.prop.cantsave", "Kan inte spara egenskapsfilen: {0}"},
{"appletviewer.main.warn.nosecmgr", "Varning: s\u00E4kerheten inaktiveras."}, {"appletviewer.main.warn.nosecmgr", "Varning! S\u00E4kerheten avaktiveras."},
{"appletviewer.main.debug.cantfinddebug", "Hittar inte fels\u00F6kningsprogrammet!"}, {"appletviewer.main.debug.cantfinddebug", "Hittar inte fels\u00F6kningsprogrammet!"},
{"appletviewer.main.debug.cantfindmain", "Hittar inte huvudmetoden i fels\u00F6kningsprogrammet!"}, {"appletviewer.main.debug.cantfindmain", "Hittar inte huvudmetoden i fels\u00F6kningsprogrammet!"},
{"appletviewer.main.debug.exceptionindebug", "Undantag i fels\u00F6kningsprogrammet!"}, {"appletviewer.main.debug.exceptionindebug", "Undantag i fels\u00F6kningsprogrammet!"},
......
...@@ -44,7 +44,7 @@ AWT.separater=Teclado Num\u00E9rico , ...@@ -44,7 +44,7 @@ AWT.separater=Teclado Num\u00E9rico ,
AWT.subtract=Teclado Num\u00E9rico - AWT.subtract=Teclado Num\u00E9rico -
AWT.decimal=Teclado Num\u00E9rico . AWT.decimal=Teclado Num\u00E9rico .
AWT.divide=Teclado Num\u00E9rico / AWT.divide=Teclado Num\u00E9rico /
AWT.delete=Deletar AWT.delete=Excluir
AWT.numLock=Num Lock AWT.numLock=Num Lock
AWT.scrollLock=Scroll Lock AWT.scrollLock=Scroll Lock
AWT.f1=F1 AWT.f1=F1
...@@ -151,7 +151,7 @@ AWT.unknown=Desconhecido ...@@ -151,7 +151,7 @@ AWT.unknown=Desconhecido
AWT.undefined=Indefinido AWT.undefined=Indefinido
# Predefined cursor names # Predefined cursor names
AWT.DefaultCursor=Cursor Default AWT.DefaultCursor=Cursor Padr\u00E3o
AWT.CrosshairCursor=Cursor em Forma de Cruz AWT.CrosshairCursor=Cursor em Forma de Cruz
AWT.TextCursor=Cursor de Texto AWT.TextCursor=Cursor de Texto
AWT.WaitCursor=Cursor em Forma de Ampulheta AWT.WaitCursor=Cursor em Forma de Ampulheta
...@@ -165,9 +165,9 @@ AWT.WResizeCursor=Cursor de Seta Que Aponta \u00E0 Esquerda ...@@ -165,9 +165,9 @@ AWT.WResizeCursor=Cursor de Seta Que Aponta \u00E0 Esquerda
AWT.EResizeCursor=Cursor de Seta Que Aponta \u00E0 Direita AWT.EResizeCursor=Cursor de Seta Que Aponta \u00E0 Direita
AWT.HandCursor=Cursor em Forma de M\u00E3o AWT.HandCursor=Cursor em Forma de M\u00E3o
AWT.MoveCursor=Cursor de Movimento AWT.MoveCursor=Cursor de Movimento
AWT.DefaultDragCursor=Cursor Default de Arrastar AWT.DefaultDragCursor=Cursor Padr\u00E3o de Arrastar
AWT.DefaultNoDropCursor=Cursor Default sem Arrastar AWT.DefaultNoDropCursor=Cursor Padr\u00E3o sem Arrastar
AWT.DefaultDropCursor=Cursor Default de Soltar AWT.DefaultDropCursor=Cursor Padr\u00E3o de Soltar
# Input method related strings # Input method related strings
AWT.CompositionWindowTitle=Janela de Entrada AWT.CompositionWindowTitle=Janela de Entrada
......
# #
# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -37,7 +37,7 @@ java.launcher.ergo.message2 =\ weil die Ausf\u00FChrung auf ei ...@@ -37,7 +37,7 @@ java.launcher.ergo.message2 =\ weil die Ausf\u00FChrung auf ei
java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
# Translators please note do not translate the options themselves # Translators please note do not translate the options themselves
java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Thread-Stackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Threadstackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
# Translators please note do not translate the options themselves # Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\nDie folgenden Optionen sind f\u00FCr Mac OS X spezifisch:\n -XstartOnFirstThread\n f\u00FChrt die main()-Methode f\u00FCr den ersten (AppKit) Thread aus\n -Xdock:name=<Anwendungsname>"\n \u00DCberschreibt den in der Uhr angezeigten Standardanwendungsnamen\n -Xdock:icon=<Pfad zu Symboldatei>\n \u00DCberschreibt das in der Uhr angezeigte Standardsymbol\n\n java.launcher.X.macosx.usage=\nDie folgenden Optionen sind f\u00FCr Mac OS X spezifisch:\n -XstartOnFirstThread\n f\u00FChrt die main()-Methode f\u00FCr den ersten (AppKit) Thread aus\n -Xdock:name=<Anwendungsname>"\n \u00DCberschreibt den in der Uhr angezeigten Standardanwendungsnamen\n -Xdock:icon=<Pfad zu Symboldatei>\n \u00DCberschreibt das in der Uhr angezeigte Standardsymbol\n\n
......
# #
# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -30,17 +30,17 @@ java.launcher.opt.datamodel =\ -d{0}\t usar um modelo de dados de {0} bits, ...@@ -30,17 +30,17 @@ java.launcher.opt.datamodel =\ -d{0}\t usar um modelo de dados de {0} bits,
java.launcher.opt.vmselect =\ {0}\t para selecionar a VM "{1}"\n java.launcher.opt.vmselect =\ {0}\t para selecionar a VM "{1}"\n
java.launcher.opt.hotspot =\ {0}\t \u00E9 um sin\u00F4nimo da VM "{1}" [obsoleto]\n java.launcher.opt.hotspot =\ {0}\t \u00E9 um sin\u00F4nimo da VM "{1}" [obsoleto]\n
java.launcher.ergo.message1 =\ A VM default \u00E9 {0} java.launcher.ergo.message1 =\ A VM padr\u00E3o \u00E9 {0}
java.launcher.ergo.message2 =\ porque a execu\u00E7\u00E3o est\u00E1 sendo feita em uma m\u00E1quina de classe de servidor.\n java.launcher.ergo.message2 =\ porque a execu\u00E7\u00E3o est\u00E1 sendo feita em uma m\u00E1quina de classe de servidor.\n
# Translators please note do not translate the options themselves # Translators please note do not translate the options themselves
java.launcher.opt.footer =\ -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n Uma lista separada por {0} de diret\u00F3rios, archives JAR\n e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n -D<nome>=<valor>\n define uma propriedade do sistema\n -verbose:[class|gc|jni]\n ativa a sa\u00EDda detalhada\n -version imprime a vers\u00E3o do produto e sai do programa\n -version:<valor>\n requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n -showversion imprime a vers\u00E3o do produto e continua\n -jre-restrict-search | -no-jre-restrict-search\n inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n -? -help imprime esta mensagem de ajuda\n -X imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n -ea[:<nome do pacote>...|:<nome da classe>]\n -enableassertions[:<nome do pacote>...|:<nome da classe>]\n ativa asser\u00E7\u00F5es com granularidade especificada\n -da[:<nome do pacote>...|:<nome da classe>]\n -disableassertions[:<nome do pacote>...|:<nome da classe>]\n desativa asser\u00E7\u00F5es com granularidade especificada\n -esa | -enablesystemassertions\n ativa asser\u00E7\u00F5es do sistema\n -dsa | -disablesystemassertions\n desativa asser\u00E7\u00F5es do sistema\n -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa <nome da biblioteca>, por exemplo: -agentlib:hprof\n consulte tamb\u00E9m: -agentlib:jdwp=help e -agentlib:hprof=help\n -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa com base no nome do caminho completo\n -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n -splash:<caminho da imagem>\n mostra a tela de abertura com a imagem especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obter mais detalhes. java.launcher.opt.footer =\ -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n Uma lista separada por {0} de diret\u00F3rios, archives JAR\n e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n -D<nome>=<valor>\n define uma propriedade do sistema\n -verbose:[class|gc|jni]\n ativa a sa\u00EDda detalhada\n -version imprime a vers\u00E3o do produto e sai do programa\n -version:<valor>\n requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n -showversion imprime a vers\u00E3o do produto e continua\n -jre-restrict-search | -no-jre-restrict-search\n inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n -? -help imprime esta mensagem de ajuda\n -X imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n -ea[:<nome do pacote>...|:<nome da classe>]\n -enableassertions[:<nome do pacote>...|:<nome da classe>]\n ativa asser\u00E7\u00F5es com granularidade especificada\n -da[:<nome do pacote>...|:<nome da classe>]\n -disableassertions[:<nome do pacote>...|:<nome da classe>]\n desativa asser\u00E7\u00F5es com granularidade especificada\n -esa | -enablesystemassertions\n ativa asser\u00E7\u00F5es do sistema\n -dsa | -disablesystemassertions\n desativa asser\u00E7\u00F5es do sistema\n -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa <nome da biblioteca>, por exemplo: -agentlib:hprof\n consulte tamb\u00E9m: -agentlib:jdwp=help e -agentlib:hprof=help\n -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa com base no nome do caminho completo\n -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n -splash:<caminho da imagem>\n mostra a tela de abertura com a imagem especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obter mais detalhes.
# Translators please note do not translate the options themselves # Translators please note do not translate the options themselves
java.launcher.X.usage=\ -Xmixed execu\u00E7\u00E3o no modo misto (default)\n -Xint execu\u00E7\u00E3o somente no modo interpretado\n -Xbootclasspath:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n define o caminho de pesquisa para classes e recursos de inicializa\u00E7\u00E3o\n -Xbootclasspath/a:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no final do caminho da classe de inicializa\u00E7\u00E3o\n -Xbootclasspath/p:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no in\u00EDcio do caminho da classe de inicializa\u00E7\u00E3o\n -Xdiag mostra mensagens de diagn\u00F3stico adicionais\n -Xnoclassgc desativa a coleta de lixo da classe\n -Xincgc ativa a coleta de lixo incremental\n -Xloggc:<arquivo> registra o status do GC status em um arquivo com marca\u00E7\u00F5es de data e hor\u00E1rio\n -Xbatch desativa a compila\u00E7\u00E3o em segundo plano\n -Xms<tamanho> define o tamanho inicial do heap Java\n -Xmx<tamanho> define o tamanho m\u00E1ximo do heap Java\n -Xss<tamanho> define o tamanho da pilha de threads java\n -Xprof produz dados de perfil da cpu\n -Xfuture ativa verifica\u00E7\u00F5es de n\u00EDvel m\u00E1ximo de exig\u00EAncia, prevendo o valor default futuro\n -Xrs reduz o uso de sinais do SO pelo(a) Java/VM (consulte a documenta\u00E7\u00E3o)\n -Xcheck:jni executa verifica\u00E7\u00F5es adicionais de fun\u00E7\u00F5es da JNI\n -Xshare:off n\u00E3o tenta usar dados da classe compartilhada\n -Xshare:auto se poss\u00EDvel, usa dados da classe compartilhada (default)\n -Xshare:on requer o uso de dados da classe compartilhada, caso contr\u00E1rio haver\u00E1 falha.\n -XshowSettings mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:all\n mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:vm mostra todas as defini\u00E7\u00F5es relacionadas \u00E0 vm e continua\n -XshowSettings:properties\n mostra todas as defini\u00E7\u00F5es da propriedade e continua\n -XshowSettings:locale\n mostra todas as defini\u00E7\u00F5es relativas \u00E0s configura\u00E7\u00F5es regionais e continua\n\nAs -X options n\u00E3o s\u00E3o padronizadas e est\u00E3o sujeitas a altera\u00E7\u00F5es sem aviso.\n java.launcher.X.usage=\ -Xmixed execu\u00E7\u00E3o no modo misto (padr\u00E3o)\n -Xint execu\u00E7\u00E3o somente no modo interpretado\n -Xbootclasspath:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n define o caminho de pesquisa para classes e recursos de inicializa\u00E7\u00E3o\n -Xbootclasspath/a:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no final do caminho da classe de inicializa\u00E7\u00E3o\n -Xbootclasspath/p:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no in\u00EDcio do caminho da classe de inicializa\u00E7\u00E3o\n -Xdiag mostra mensagens de diagn\u00F3stico adicionais\n -Xnoclassgc desativa a coleta de lixo da classe\n -Xincgc ativa a coleta de lixo incremental\n -Xloggc:<arquivo> registra o status do GC status em um arquivo com marca\u00E7\u00F5es de data e hor\u00E1rio\n -Xbatch desativa a compila\u00E7\u00E3o em segundo plano\n -Xms<tamanho> define o tamanho inicial do heap Java\n -Xmx<tamanho> define o tamanho m\u00E1ximo do heap Java\n -Xss<tamanho> define o tamanho da pilha de threads java\n -Xprof produz dados de perfil da cpu\n -Xfuture ativa verifica\u00E7\u00F5es de n\u00EDvel m\u00E1ximo de exig\u00EAncia, prevendo o valor padr\u00E3o futuro\n -Xrs reduz o uso de sinais do SO pelo(a) Java/VM (consulte a documenta\u00E7\u00E3o)\n -Xcheck:jni executa verifica\u00E7\u00F5es adicionais de fun\u00E7\u00F5es da JNI\n -Xshare:off n\u00E3o tenta usar dados da classe compartilhada\n -Xshare:auto se poss\u00EDvel, usa dados da classe compartilhada (padr\u00E3o)\n -Xshare:on requer o uso de dados da classe compartilhada, caso contr\u00E1rio haver\u00E1 falha.\n -XshowSettings mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:all\n mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:vm mostra todas as defini\u00E7\u00F5es relacionadas \u00E0 vm e continua\n -XshowSettings:properties\n mostra todas as defini\u00E7\u00F5es da propriedade e continua\n -XshowSettings:locale\n mostra todas as defini\u00E7\u00F5es relativas \u00E0s configura\u00E7\u00F5es regionais e continua\n\nAs -X options n\u00E3o s\u00E3o padronizadas e est\u00E3o sujeitas a altera\u00E7\u00F5es sem aviso.\n
# Translators please note do not translate the options themselves # Translators please note do not translate the options themselves
java.launcher.X.macosx.usage=\nAs op\u00E7\u00F5es a seguir s\u00E3o espec\u00EDficas para o Mac OS X:\n -XstartOnFirstThread\n executa o m\u00E9todo main() no primeiro thread (AppKit)\n -Xdock:name=<nome da aplica\u00E7\u00E3o>"\n substitui o nome da aplica\u00E7\u00E3o default exibido no encaixe\n -Xdock:icon=<caminho para o arquivo do \u00EDcone>\n substitui o \u00EDcone exibido no encaixe\n\n java.launcher.X.macosx.usage=\nAs op\u00E7\u00F5es a seguir s\u00E3o espec\u00EDficas para o Mac OS X:\n -XstartOnFirstThread\n executa o m\u00E9todo main() no primeiro thread (AppKit)\n -Xdock:name=<nome da aplica\u00E7\u00E3o>"\n substitui o nome da aplica\u00E7\u00E3o padr\u00E3o exibido no encaixe\n -Xdock:icon=<caminho para o arquivo do \u00EDcone>\n substitui o \u00EDcone exibido no encaixe\n\n
java.launcher.cls.error1=Erro: N\u00E3o foi poss\u00EDvel localizar nem carregar a classe principal {0} java.launcher.cls.error1=Erro: N\u00E3o foi poss\u00EDvel localizar nem carregar a classe principal {0}
java.launcher.cls.error2=Erro: o m\u00E9todo main n\u00E3o \u00E9 {0} na classe {1}; defina o m\u00E9todo main como:\n public static void main(String[] args) java.launcher.cls.error2=Erro: o m\u00E9todo main n\u00E3o \u00E9 {0} na classe {1}; defina o m\u00E9todo main como:\n public static void main(String[] args)
......
# #
# #
# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -36,7 +36,7 @@ agent.err.configfile.failed = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u306E\ ...@@ -36,7 +36,7 @@ agent.err.configfile.failed = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u306E\
agent.err.configfile.closed.failed = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u3092\u9589\u3058\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F agent.err.configfile.closed.failed = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u3092\u9589\u3058\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
agent.err.configfile.access.denied = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F agent.err.configfile.access.denied = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F
agent.err.exportaddress.failed = JMX\u30B3\u30CD\u30AF\u30BF\u30FB\u30A2\u30C9\u30EC\u30B9\u306E\u8A08\u6E2C\u30D0\u30C3\u30D5\u30A1\u3078\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F agent.err.exportaddress.failed = JMX\u30B3\u30CD\u30AF\u30BF\u30FB\u30A2\u30C9\u30EC\u30B9\u306E\u8A08\u6E2C\u30D0\u30C3\u30D5\u30A1\u3078\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u304C\u5931\u6557\u3057\u307E\u3057\u305F
agent.err.agentclass.notfound = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 agent.err.agentclass.notfound = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
agent.err.agentclass.failed = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u5931\u6557\u3057\u307E\u3057\u305F agent.err.agentclass.failed = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u5931\u6557\u3057\u307E\u3057\u305F
......
...@@ -3,22 +3,22 @@ ...@@ -3,22 +3,22 @@
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
* under the terms of the GNUNSAFE General Public License version 2 only, as * under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this * published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided * particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code. * by Oracle in the LICENSE file that accompanied this code.
* *
* This code is distributed in the hope that it will be useful, but WITHOUNSAFET * This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICUNSAFELAR PUNSAFERPOSE. See the GNUNSAFE General Public License * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that * version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code). * accompanied this code).
* *
* You should have received a copy of the GNUNSAFE General Public License version * You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation, * 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 UNSAFESA. * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 UNSAFESA * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any * or visit www.oracle.com if you need additional information or have any
* questions. * questions.
*/ */
......
...@@ -84,19 +84,31 @@ public final class InetAddressCachePolicy { ...@@ -84,19 +84,31 @@ public final class InetAddressCachePolicy {
* Initialize * Initialize
*/ */
static { static {
Integer tmp = null;
Integer tmp = java.security.AccessController.doPrivileged(
try { new PrivilegedAction<Integer>() {
tmp = new Integer( public Integer run() {
java.security.AccessController.doPrivileged ( try {
new PrivilegedAction<String>() { String tmpString = Security.getProperty(cachePolicyProp);
public String run() { if (tmpString != null) {
return Security.getProperty(cachePolicyProp); return Integer.valueOf(tmpString);
} }
})); } catch (NumberFormatException ignored) {
} catch (NumberFormatException e) { // Ignore
// ignore }
}
try {
String tmpString = System.getProperty(cachePolicyPropFallback);
if (tmpString != null) {
return Integer.decode(tmpString);
}
} catch (NumberFormatException ignored) {
// Ignore
}
return null;
}
});
if (tmp != null) { if (tmp != null) {
cachePolicy = tmp.intValue(); cachePolicy = tmp.intValue();
if (cachePolicy < 0) { if (cachePolicy < 0) {
...@@ -104,35 +116,36 @@ public final class InetAddressCachePolicy { ...@@ -104,35 +116,36 @@ public final class InetAddressCachePolicy {
} }
propertySet = true; propertySet = true;
} else { } else {
tmp = java.security.AccessController.doPrivileged /* No properties defined for positive caching. If there is no
(new sun.security.action.GetIntegerAction(cachePolicyPropFallback)); * security manager then use the default positive cache value.
if (tmp != null) { */
cachePolicy = tmp.intValue(); if (System.getSecurityManager() == null) {
if (cachePolicy < 0) { cachePolicy = DEFAULT_POSITIVE;
cachePolicy = FOREVER;
}
propertySet = true;
} else {
/* No properties defined for positive caching. If there is no
* security manager then use the default positive cache value.
*/
if (System.getSecurityManager() == null) {
cachePolicy = DEFAULT_POSITIVE;
}
} }
} }
tmp = java.security.AccessController.doPrivileged (
new PrivilegedAction<Integer>() {
public Integer run() {
try {
String tmpString = Security.getProperty(negativeCachePolicyProp);
if (tmpString != null) {
return Integer.valueOf(tmpString);
}
} catch (NumberFormatException ignored) {
// Ignore
}
try { try {
tmp = new Integer( String tmpString = System.getProperty(negativeCachePolicyPropFallback);
java.security.AccessController.doPrivileged ( if (tmpString != null) {
new PrivilegedAction<String>() { return Integer.decode(tmpString);
public String run() { }
return Security.getProperty(negativeCachePolicyProp); } catch (NumberFormatException ignored) {
} // Ignore
})); }
} catch (NumberFormatException e) { return null;
// ignore }
} });
if (tmp != null) { if (tmp != null) {
negativeCachePolicy = tmp.intValue(); negativeCachePolicy = tmp.intValue();
...@@ -140,16 +153,6 @@ public final class InetAddressCachePolicy { ...@@ -140,16 +153,6 @@ public final class InetAddressCachePolicy {
negativeCachePolicy = FOREVER; negativeCachePolicy = FOREVER;
} }
propertyNegativeSet = true; propertyNegativeSet = true;
} else {
tmp = java.security.AccessController.doPrivileged
(new sun.security.action.GetIntegerAction(negativeCachePolicyPropFallback));
if (tmp != null) {
negativeCachePolicy = tmp.intValue();
if (negativeCachePolicy < 0) {
negativeCachePolicy = FOREVER;
}
propertyNegativeSet = true;
}
} }
} }
......
...@@ -37,90 +37,73 @@ public class IPAddressUtil { ...@@ -37,90 +37,73 @@ public class IPAddressUtil {
* @param src a String representing an IPv4 address in standard format * @param src a String representing an IPv4 address in standard format
* @return a byte array representing the IPv4 numeric address * @return a byte array representing the IPv4 numeric address
*/ */
@SuppressWarnings("fallthrough")
public static byte[] textToNumericFormatV4(String src) public static byte[] textToNumericFormatV4(String src)
{ {
if (src.length() == 0) {
return null;
}
byte[] res = new byte[INADDR4SZ]; byte[] res = new byte[INADDR4SZ];
String[] s = src.split("\\.", -1);
long val;
try {
switch(s.length) {
case 1:
/*
* When only one part is given, the value is stored directly in
* the network address without any byte rearrangement.
*/
val = Long.parseLong(s[0]); long tmpValue = 0;
if (val < 0 || val > 0xffffffffL) int currByte = 0;
return null;
res[0] = (byte) ((val >> 24) & 0xff);
res[1] = (byte) (((val & 0xffffff) >> 16) & 0xff);
res[2] = (byte) (((val & 0xffff) >> 8) & 0xff);
res[3] = (byte) (val & 0xff);
break;
case 2:
/*
* When a two part address is supplied, the last part is
* interpreted as a 24-bit quantity and placed in the right
* most three bytes of the network address. This makes the
* two part address format convenient for specifying Class A
* network addresses as net.host.
*/
val = Integer.parseInt(s[0]); int len = src.length();
if (val < 0 || val > 0xff) if (len == 0 || len > 15) {
return null; return null;
res[0] = (byte) (val & 0xff); }
val = Integer.parseInt(s[1]); /*
if (val < 0 || val > 0xffffff) * When only one part is given, the value is stored directly in
* the network address without any byte rearrangement.
*
* When a two part address is supplied, the last part is
* interpreted as a 24-bit quantity and placed in the right
* most three bytes of the network address. This makes the
* two part address format convenient for specifying Class A
* network addresses as net.host.
*
* When a three part address is specified, the last part is
* interpreted as a 16-bit quantity and placed in the right
* most two bytes of the network address. This makes the
* three part address format convenient for specifying
* Class B net- work addresses as 128.net.host.
*
* When four parts are specified, each is interpreted as a
* byte of data and assigned, from left to right, to the
* four bytes of an IPv4 address.
*
* We determine and parse the leading parts, if any, as single
* byte values in one pass directly into the resulting byte[],
* then the remainder is treated as a 8-to-32-bit entity and
* translated into the remaining bytes in the array.
*/
for (int i = 0; i < len; i++) {
char c = src.charAt(i);
if (c == '.') {
if (tmpValue < 0 || tmpValue > 0xff || currByte == 3) {
return null; return null;
res[1] = (byte) ((val >> 16) & 0xff);
res[2] = (byte) (((val & 0xffff) >> 8) &0xff);
res[3] = (byte) (val & 0xff);
break;
case 3:
/*
* When a three part address is specified, the last part is
* interpreted as a 16-bit quantity and placed in the right
* most two bytes of the network address. This makes the
* three part address format convenient for specifying
* Class B net- work addresses as 128.net.host.
*/
for (int i = 0; i < 2; i++) {
val = Integer.parseInt(s[i]);
if (val < 0 || val > 0xff)
return null;
res[i] = (byte) (val & 0xff);
} }
val = Integer.parseInt(s[2]); res[currByte++] = (byte) (tmpValue & 0xff);
if (val < 0 || val > 0xffff) tmpValue = 0;
} else {
int digit = Character.digit(c, 10);
if (digit < 0) {
return null; return null;
res[2] = (byte) ((val >> 8) & 0xff);
res[3] = (byte) (val & 0xff);
break;
case 4:
/*
* When four parts are specified, each is interpreted as a
* byte of data and assigned, from left to right, to the
* four bytes of an IPv4 address.
*/
for (int i = 0; i < 4; i++) {
val = Integer.parseInt(s[i]);
if (val < 0 || val > 0xff)
return null;
res[i] = (byte) (val & 0xff);
} }
break; tmpValue *= 10;
default: tmpValue += digit;
return null;
} }
} catch(NumberFormatException e) { }
if (tmpValue < 0 || tmpValue >= (1L << ((4 - currByte) * 8))) {
return null; return null;
} }
switch (currByte) {
case 0:
res[0] = (byte) ((tmpValue >> 24) & 0xff);
case 1:
res[1] = (byte) ((tmpValue >> 16) & 0xff);
case 2:
res[2] = (byte) ((tmpValue >> 8) & 0xff);
case 3:
res[3] = (byte) ((tmpValue >> 0) & 0xff);
}
return res; return res;
} }
......
# #
# #
# Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -71,7 +71,7 @@ generator.env.iiop=sun.rmi.rmic.iiop.BatchEnvironment ...@@ -71,7 +71,7 @@ generator.env.iiop=sun.rmi.rmic.iiop.BatchEnvironment
generator.env.idl=sun.rmi.rmic.iiop.BatchEnvironment generator.env.idl=sun.rmi.rmic.iiop.BatchEnvironment
generator.env.xprint=sun.rmi.rmic.iiop.BatchEnvironment generator.env.xprint=sun.rmi.rmic.iiop.BatchEnvironment
rmic.usage=\u4F7F\u7528\u65B9\u6CD5: {0} <options> <class names>\n\n<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u304C\u3042\u308A\u307E\u3059\u3002\n -keep \u4E2D\u9593\u751F\u6210\u3055\u308C\u305F\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u306A\u3044\n -keepgenerated("-keep"\u3068\u540C\u3058)\n -v1.1 1.1\u30B9\u30BF\u30D6\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u7248\u7528\u306E\u30B9\u30BF\u30D6/\u30B9\u30B1\u30EB\u30C8\u30F3\u3092\u4F5C\u6210\u3059\u308B\n -vcompat 1.1\u30681.2\u306E\u30B9\u30BF\u30D6\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u7248\u3068\n \u4E92\u63DB\u6027\u306E\u3042\u308B\u30B9\u30BF\u30D6/\u30B9\u30B1\u30EB\u30C8\u30F3\u3092\u4F5C\u6210\u3059\u308B\n -v1.2 (\u30C7\u30D5\u30A9\u30EB\u30C8)1.2\u30B9\u30BF\u30D6\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u7248\u5C02\u7528\u306E\u30B9\u30BF\u30D6\u3092\u4F5C\u6210\u3059\u308B\n -iiop IIOP\u7528\u306E\u30B9\u30BF\u30D6\u3092\u4F5C\u6210\u3059\u308B\u3002\u6307\u5B9A\u3059\u308B\u3068<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u3082\u542B\u307E\u308C\u307E\u3059\u3002\n\n -always \u6700\u65B0\u306E\u5834\u5408\u3067\u3082\u30B9\u30BF\u30D6\u3092\u4F5C\u6210\u3059\u308B\n -alwaysgenerate ("-always"\u3068\u540C\u3058)\n -nolocalstubs \u540C\u3058\u30D7\u30ED\u30BB\u30B9\u306B\u3064\u3044\u3066\u6700\u9069\u5316\u3055\u308C\u305F\u30B9\u30BF\u30D6\u306F\u4F5C\u6210\u3057\u306A\u3044\n\n -idl IDL\u3092\u4F5C\u6210\u3059\u308B\u3002\u6307\u5B9A\u3059\u308B\u3068<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u3082\u542B\u307E\u308C\u307E\u3059\u3002\n\n -noValueMethods valuetypes\u306B\u5BFE\u3057\u3066\u30E1\u30BD\u30C3\u30C9\u3092\u751F\u6210\u3057\u306A\u3044\n -always \u6700\u65B0\u306E\u5834\u5408\u3067\u3082IDL\u3092\u751F\u6210\u3059\u308B\n -alwaysgenerate ("-always"\u3068\u540C\u3058)\n\n -g \u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\n -nowarn \u8B66\u544A\u3092\u751F\u6210\u3057\u306A\u3044\n -nowrite \u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u305F\u30AF\u30E9\u30B9\u3092\u30D5\u30A1\u30A4\u30EB\u30FB\u30B7\u30B9\u30C6\u30E0\u306B\u66F8\u304D\u8FBC\u307E\u306A\u3044\n -verbose \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u52D5\u4F5C\u306B\u95A2\u3059\u308B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n -classpath <path> \u5165\u529B\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B\n -bootclasspath<path> \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u4F4D\u7F6E\u3092\u7F6E\u304D\u63DB\u3048\u308B\n -extdirs<path> \u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u62E1\u5F35\u6A5F\u80FD\u306E\u4F4D\u7F6E\u3092\u7F6E\u304D\u63DB\u3048\u308B\n -d <directory> \u751F\u6210\u3055\u308C\u305F\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u683C\u7D0D\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B\n -J<runtime flag> java\u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u306B\u5F15\u6570\u3092\u6E21\u3059\n rmic.usage=\u4F7F\u7528\u65B9\u6CD5: {0} <options> <class names>\n\n<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u304C\u3042\u308A\u307E\u3059\u3002\n -keep \u4E2D\u9593\u751F\u6210\u3055\u308C\u305F\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u306A\u3044\n -keepgenerated("-keep"\u3068\u540C\u3058)\n -v1.1 1.1\u30B9\u30BF\u30D6\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u7248\u7528\u306E\u30B9\u30BF\u30D6/\u30B9\u30B1\u30EB\u30C8\u30F3\u3092\u4F5C\u6210\u3059\u308B(\u975E\u63A8\u5968)\n -vcompat 1.1\u30681.2\u306E\u30B9\u30BF\u30D6\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u7248\u3068\n \u4E92\u63DB\u6027\u306E\u3042\u308B\u30B9\u30BF\u30D6/\u30B9\u30B1\u30EB\u30C8\u30F3\u3092\u4F5C\u6210\u3059\u308B(\u975E\u63A8\u5968)\n -v1.2 (\u30C7\u30D5\u30A9\u30EB\u30C8)1.2\u30B9\u30BF\u30D6\u30FB\u30D7\u30ED\u30C8\u30B3\u30EB\u7248\u5C02\u7528\u306E\u30B9\u30BF\u30D6\u3092\u4F5C\u6210\u3059\u308B(\u975E\u63A8\u5968)\n -iiop IIOP\u7528\u306E\u30B9\u30BF\u30D6\u3092\u4F5C\u6210\u3059\u308B\u3002\u6307\u5B9A\u3059\u308B\u3068<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u3082\u542B\u307E\u308C\u307E\u3059\u3002\n\n -always \u6700\u65B0\u306E\u5834\u5408\u3067\u3082\u30B9\u30BF\u30D6\u3092\u4F5C\u6210\u3059\u308B\n -alwaysgenerate ("-always"\u3068\u540C\u3058)\n -nolocalstubs \u540C\u3058\u30D7\u30ED\u30BB\u30B9\u306B\u3064\u3044\u3066\u6700\u9069\u5316\u3055\u308C\u305F\u30B9\u30BF\u30D6\u306F\u4F5C\u6210\u3057\u306A\u3044\n\n -idl IDL\u3092\u4F5C\u6210\u3059\u308B\u3002\u6307\u5B9A\u3059\u308B\u3068<options>\u306B\u306F\u6B21\u306E\u3082\u306E\u3082\u542B\u307E\u308C\u307E\u3059\u3002\n\n -noValueMethods valuetypes\u306B\u5BFE\u3057\u3066\u30E1\u30BD\u30C3\u30C9\u3092\u751F\u6210\u3057\u306A\u3044\n -always \u6700\u65B0\u306E\u5834\u5408\u3067\u3082IDL\u3092\u751F\u6210\u3059\u308B\n -alwaysgenerate ("-always"\u3068\u540C\u3058)\n\n -g \u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\n -nowarn \u8B66\u544A\u3092\u751F\u6210\u3057\u306A\u3044\n -nowrite \u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u305F\u30AF\u30E9\u30B9\u3092\u30D5\u30A1\u30A4\u30EB\u30FB\u30B7\u30B9\u30C6\u30E0\u306B\u66F8\u304D\u8FBC\u307E\u306A\u3044\n -verbose \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u52D5\u4F5C\u306B\u95A2\u3059\u308B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n -classpath <path> \u5165\u529B\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n -bootclasspath<path> \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n -extdirs<path> \u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n -d <directory> \u751F\u6210\u3055\u308C\u305F\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u683C\u7D0D\u3059\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n -J<runtime flag> java\u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u306B\u5F15\u6570\u3092\u6E21\u3059\n
# #
# Generic Messages # Generic Messages
...@@ -111,6 +111,7 @@ rmic.must.implement.remote.directly=\u30B9\u30BF\u30D6\u3092\u5FC5\u8981\u3068\u ...@@ -111,6 +111,7 @@ rmic.must.implement.remote.directly=\u30B9\u30BF\u30D6\u3092\u5FC5\u8981\u3068\u
rmic.must.throw.remoteexception={0}\u306F\u4E0D\u6B63\u306A\u30EA\u30E2\u30FC\u30C8\u30FB\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3067\u3059\u3002\u30E1\u30BD\u30C3\u30C9{1}\u306Fjava.rmi.RemoteException\u3092\u30B9\u30ED\u30FC\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 rmic.must.throw.remoteexception={0}\u306F\u4E0D\u6B63\u306A\u30EA\u30E2\u30FC\u30C8\u30FB\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3067\u3059\u3002\u30E1\u30BD\u30C3\u30C9{1}\u306Fjava.rmi.RemoteException\u3092\u30B9\u30ED\u30FC\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
rmic.must.only.throw.exception=\u30E1\u30BD\u30C3\u30C9{0}\u306F{1}\u3092\u30B9\u30ED\u30FC\u3059\u308B\u306E\u3067\u4E0D\u6B63\u306A\u30EA\u30E2\u30FC\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9\u5B9F\u88C5\u3067\u3059\u3002\u30EA\u30E2\u30FC\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9\u306E\u5B9F\u88C5\u304C\u30B9\u30ED\u30FC\u3059\u308B\u306E\u306Fjava.lang.Exception\u304B\u305D\u306E\u30B5\u30D6\u30AF\u30E9\u30B9\u306E\u307F\u3067\u3059\u3002 rmic.must.only.throw.exception=\u30E1\u30BD\u30C3\u30C9{0}\u306F{1}\u3092\u30B9\u30ED\u30FC\u3059\u308B\u306E\u3067\u4E0D\u6B63\u306A\u30EA\u30E2\u30FC\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9\u5B9F\u88C5\u3067\u3059\u3002\u30EA\u30E2\u30FC\u30C8\u30FB\u30E1\u30BD\u30C3\u30C9\u306E\u5B9F\u88C5\u304C\u30B9\u30ED\u30FC\u3059\u308B\u306E\u306Fjava.lang.Exception\u304B\u305D\u306E\u30B5\u30D6\u30AF\u30E9\u30B9\u306E\u307F\u3067\u3059\u3002
warn.rmic.tie.found=IIOP "tie"\u306F\u30AF\u30E9\u30B9{0}\u306E\u305F\u3081\u306B\u3042\u308A\u307E\u3059\u3002\n {1}\nPortableRemoteObject.exportObject\u3092\u4F7F\u7528\u3059\u308B\u5834\u5408\u306F\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u524A\u9664\u3057\u306A\u3044\u3068\u3001\u30B5\u30FC\u30D0\u30FC\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306FJRMP\u3067\u306A\u304FIIOP\u306B\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3055\u308C\u307E\u3059\u3002 warn.rmic.tie.found=IIOP "tie"\u306F\u30AF\u30E9\u30B9{0}\u306E\u305F\u3081\u306B\u3042\u308A\u307E\u3059\u3002\n {1}\nPortableRemoteObject.exportObject\u3092\u4F7F\u7528\u3059\u308B\u5834\u5408\u306F\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u524A\u9664\u3057\u306A\u3044\u3068\u3001\u30B5\u30FC\u30D0\u30FC\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306FJRMP\u3067\u306A\u304FIIOP\u306B\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3055\u308C\u307E\u3059\u3002
rmic.jrmp.stubs.deprecated=\u8B66\u544A: JRMP\u306E\u30B9\u30B1\u30EB\u30C8\u30F3\u3068static\u30B9\u30BF\u30D6\u306E\u751F\u6210\u3068\u4F7F\u7528\u306F\n\u975E\u63A8\u5968\u3067\u3059\u3002\u30B9\u30B1\u30EB\u30C8\u30F3\u306F\u4E0D\u8981\u3067\u3001static\u30B9\u30BF\u30D6\u306F\n\u52D5\u7684\u306B\u751F\u6210\u3055\u308C\u308B\u30B9\u30BF\u30D6\u306B\u5DEE\u3057\u66FF\u3048\u3089\u308C\u307E\u3057\u305F\u3002\u30E6\u30FC\u30B6\u30FC\u306F\n\u30B9\u30B1\u30EB\u30C8\u30F3\u3068static\u30B9\u30BF\u30D6\u3092\u751F\u6210\u3059\u308B\u305F\u3081\u306B{0}\u3092\u4F7F\u7528\u305B\u305A\u306B\u79FB\u884C\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\njava.rmi.server.UnicastRemoteObject\u306B\u95A2\u3059\u308B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
# #
# RMI-IIOP Messages # RMI-IIOP Messages
......
# #
# #
# Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -71,7 +71,7 @@ generator.env.iiop=sun.rmi.rmic.iiop.BatchEnvironment ...@@ -71,7 +71,7 @@ generator.env.iiop=sun.rmi.rmic.iiop.BatchEnvironment
generator.env.idl=sun.rmi.rmic.iiop.BatchEnvironment generator.env.idl=sun.rmi.rmic.iiop.BatchEnvironment
generator.env.xprint=sun.rmi.rmic.iiop.BatchEnvironment generator.env.xprint=sun.rmi.rmic.iiop.BatchEnvironment
rmic.usage=\u7528\u6CD5: {0} <options> <class names>\n\n\u5176\u4E2D, <options> \u5305\u62EC:\n -keep \u4E0D\u5220\u9664\u4E34\u65F6\u751F\u6210\u7684\u6E90\u6587\u4EF6\n -keepgenerated (\u4E0E "-keep" \u76F8\u540C)\n -v1.1 \u521B\u5EFA 1.1 \u5B58\u6839\u534F\u8BAE\u7248\u672C\u7684\u5B58\u6839/\u9AA8\u67B6\n -vcompat \u521B\u5EFA\u4E0E 1.1 \u548C 1.2 \u5B58\u6839\u534F\u8BAE\u7248\u672C\n \u90FD\u517C\u5BB9\u7684\u5B58\u6839/\u9AA8\u67B6\n -v1.2 (\u9ED8\u8BA4\u503C) \u4EC5\u521B\u5EFA 1.2 \u5B58\u6839\u534F\u8BAE\u7248\u672C\u7684\u5B58\u6839\n -iiop \u521B\u5EFA IIOP \u7684\u5B58\u6839\u3002\u5982\u679C\u63D0\u4F9B, <options> \u8FD8\u5305\u62EC:\n\n -always \u521B\u5EFA\u5B58\u6839 (\u5373\u4F7F\u5F53\u524D\u663E\u793A)\n -alwaysgenerate (\u4E0E "-always" \u76F8\u540C)\n -nolocalstubs \u4E0D\u521B\u5EFA\u5BF9\u76F8\u540C\u8FDB\u7A0B\u4F18\u5316\u7684\u5B58\u6839\n\n -idl \u521B\u5EFA IDL\u3002\u5982\u679C\u63D0\u4F9B, <options> \u8FD8\u5305\u62EC:\n\n -noValueMethods \u4E0D\u4E3A valuetype \u751F\u6210\u65B9\u6CD5\n -always \u521B\u5EFA IDL (\u5373\u4F7F\u5F53\u524D\u663E\u793A)\n -alwaysgenerate (\u4E0E "-always" \u76F8\u540C)\n\n -g \u751F\u6210\u8C03\u8BD5\u4FE1\u606F\n -nowarn \u4E0D\u751F\u6210\u4EFB\u4F55\u8B66\u544A\n -nowrite \u4E0D\u5C06\u7F16\u8BD1\u7684\u7C7B\u5199\u5165\u6587\u4EF6\u7CFB\u7EDF\n -verbose \u8F93\u51FA\u6709\u5173\u7F16\u8BD1\u5668\u6B63\u5728\u6267\u884C\u7684\u64CD\u4F5C\u7684\u6D88\u606F\n -classpath <path> \u6307\u5B9A\u67E5\u627E\u8F93\u5165\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -bootclasspath <path> \u8986\u76D6\u5F15\u5BFC\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -extdirs <path> \u8986\u76D6\u6240\u5B89\u88C5\u6269\u5C55\u7684\u4F4D\u7F6E\n -d <directory> \u6307\u5B9A\u653E\u7F6E\u751F\u6210\u7684\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -J<runtime flag> \u5C06\u53C2\u6570\u4F20\u9012\u7ED9 java \u89E3\u91CA\u5668\n rmic.usage=\u7528\u6CD5: {0} <options> <class names>\n\n\u5176\u4E2D <options> \u5305\u62EC:\n -keep \u4E0D\u5220\u9664\u4E34\u65F6\u751F\u6210\u7684\u6E90\u6587\u4EF6\n -keepgenerated (\u4E0E "-keep" \u76F8\u540C)\n -v1.1 \u521B\u5EFA 1.1 \u5B58\u6839\u534F\u8BAE\u7248\u672C\u7684\u5B58\u6839/\u9AA8\u67B6 (\u5DF2\u8FC7\u65F6)\n -vcompat \u521B\u5EFA\u4E0E 1.1 \u548C 1.2 \u5B58\u6839\u534F\u8BAE\u7248\u672C\n \u90FD\u517C\u5BB9\u7684\u5B58\u6839/\u9AA8\u67B6 (\u5DF2\u8FC7\u65F6)\n -v1.2 (\u9ED8\u8BA4\u503C) \u4EC5\u521B\u5EFA 1.2 \u5B58\u6839\u534F\u8BAE\u7248\u672C\u7684\u5B58\u6839 (\u5DF2\u8FC7\u65F6)\n -iiop \u521B\u5EFA IIOP \u7684\u5B58\u6839\u3002\u5982\u679C\u63D0\u4F9B, <options> \u8FD8\u5305\u62EC:\n\n -always \u521B\u5EFA\u5B58\u6839 (\u5373\u4F7F\u5F53\u524D\u663E\u793A)\n -alwaysgenerate (\u4E0E "-always" \u76F8\u540C)\n -nolocalstubs \u4E0D\u521B\u5EFA\u5BF9\u76F8\u540C\u8FDB\u7A0B\u4F18\u5316\u7684\u5B58\u6839\n\n -idl \u521B\u5EFA IDL\u3002\u5982\u679C\u63D0\u4F9B, <options> \u8FD8\u5305\u62EC:\n\n -noValueMethods \u4E0D\u4E3A\u503C\u7C7B\u578B\u751F\u6210\u65B9\u6CD5\n -always \u521B\u5EFA IDL (\u5373\u4F7F\u5F53\u524D\u663E\u793A)\n -alwaysgenerate (\u4E0E "-always" \u76F8\u540C)\n\n -g \u751F\u6210\u8C03\u8BD5\u4FE1\u606F\n -nowarn \u4E0D\u751F\u6210\u4EFB\u4F55\u8B66\u544A\n -nowrite \u4E0D\u5C06\u7F16\u8BD1\u7684\u7C7B\u5199\u5165\u6587\u4EF6\u7CFB\u7EDF\n -verbose \u8F93\u51FA\u6709\u5173\u7F16\u8BD1\u5668\u6B63\u5728\u6267\u884C\u7684\u64CD\u4F5C\u7684\u6D88\u606F\n -classpath <path> \u6307\u5B9A\u67E5\u627E\u8F93\u5165\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -bootclasspath <path> \u8986\u76D6\u5F15\u5BFC\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -extdirs <path> \u8986\u76D6\u6240\u5B89\u88C5\u6269\u5C55\u7684\u4F4D\u7F6E\n -d <directory> \u6307\u5B9A\u653E\u7F6E\u751F\u6210\u7684\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -J<runtime flag> \u5C06\u53C2\u6570\u4F20\u9012\u7ED9 java \u89E3\u91CA\u5668\n
# #
# Generic Messages # Generic Messages
...@@ -111,6 +111,7 @@ rmic.must.implement.remote.directly=\u4EC5\u76F4\u63A5\u5B9E\u73B0\u6269\u5C55 j ...@@ -111,6 +111,7 @@ rmic.must.implement.remote.directly=\u4EC5\u76F4\u63A5\u5B9E\u73B0\u6269\u5C55 j
rmic.must.throw.remoteexception={0}\u4E0D\u662F\u6709\u6548\u8FDC\u7A0B\u63A5\u53E3: \u65B9\u6CD5{1}\u5FC5\u987B\u629B\u51FA java.rmi.RemoteException\u3002 rmic.must.throw.remoteexception={0}\u4E0D\u662F\u6709\u6548\u8FDC\u7A0B\u63A5\u53E3: \u65B9\u6CD5{1}\u5FC5\u987B\u629B\u51FA java.rmi.RemoteException\u3002
rmic.must.only.throw.exception=\u65B9\u6CD5{0}\u4E0D\u662F\u6709\u6548\u7684\u8FDC\u7A0B\u65B9\u6CD5\u5B9E\u73B0, \u56E0\u4E3A\u5B83\u629B\u51FA\u4E86{1}; \u8FDC\u7A0B\u65B9\u6CD5\u5B9E\u73B0\u53EA\u53EF\u80FD\u629B\u51FA java.lang.Exception \u6216\u5176\u5B50\u7C7B\u3002 rmic.must.only.throw.exception=\u65B9\u6CD5{0}\u4E0D\u662F\u6709\u6548\u7684\u8FDC\u7A0B\u65B9\u6CD5\u5B9E\u73B0, \u56E0\u4E3A\u5B83\u629B\u51FA\u4E86{1}; \u8FDC\u7A0B\u65B9\u6CD5\u5B9E\u73B0\u53EA\u53EF\u80FD\u629B\u51FA java.lang.Exception \u6216\u5176\u5B50\u7C7B\u3002
warn.rmic.tie.found=\u5BF9\u4E8E\u7C7B{0}, \u5B58\u5728 IIOP "tie":\n {1}\n\u5982\u679C\u4F7F\u7528 PortableRemoteObject.exportObject, \u5219\u5E94\u8BE5\u5220\u9664\u6B64\u6587\u4EF6, \u5426\u5219, \u60A8\u7684\u670D\u52A1\u5668\u5BF9\u8C61\u5C06\u4F1A\u5BFC\u51FA\u5230 IIOP \u800C\u975E JRMP\u3002 warn.rmic.tie.found=\u5BF9\u4E8E\u7C7B{0}, \u5B58\u5728 IIOP "tie":\n {1}\n\u5982\u679C\u4F7F\u7528 PortableRemoteObject.exportObject, \u5219\u5E94\u8BE5\u5220\u9664\u6B64\u6587\u4EF6, \u5426\u5219, \u60A8\u7684\u670D\u52A1\u5668\u5BF9\u8C61\u5C06\u4F1A\u5BFC\u51FA\u5230 IIOP \u800C\u975E JRMP\u3002
rmic.jrmp.stubs.deprecated=\u8B66\u544A: \u4E3A JRMP \u751F\u6210\u548C\u4F7F\u7528\u9AA8\u67B6\u53CA\u9759\u6001\u5B58\u6839\n\u5DF2\u8FC7\u65F6\u3002\u9AA8\u67B6\u4E0D\u518D\u5FC5\u8981, \u800C\u9759\u6001\u5B58\u6839\n\u5DF2\u7531\u52A8\u6001\u751F\u6210\u7684\u5B58\u6839\u53D6\u4EE3\u3002\u5EFA\u8BAE\u7528\u6237\n\u4E0D\u518D\u4F7F\u7528{0}\u6765\u751F\u6210\u9AA8\u67B6\u548C\u9759\u6001\u5B58\u6839\u3002\n\u8BF7\u53C2\u9605 java.rmi.server.UnicastRemoteObject \u7684\u6587\u6863\u3002
# #
# RMI-IIOP Messages # RMI-IIOP Messages
......
...@@ -26,11 +26,11 @@ ...@@ -26,11 +26,11 @@
package sun.security.internal.spec; package sun.security.internal.spec;
import java.security.spec.AlgorithmParameterSpec; import java.security.spec.AlgorithmParameterSpec;
import java.security.AccessController;
import java.security.PrivilegedAction;
/** /**
* Parameters for SSL/TLS RSA Premaster secret generation. * Parameters for SSL/TLS RSA premaster secret.
* This class is used by SSL/TLS client to initialize KeyGenerators of the
* type "TlsRsaPremasterSecret".
* *
* <p>Instances of this class are immutable. * <p>Instances of this class are immutable.
* *
...@@ -43,90 +43,108 @@ import java.security.spec.AlgorithmParameterSpec; ...@@ -43,90 +43,108 @@ import java.security.spec.AlgorithmParameterSpec;
public class TlsRsaPremasterSecretParameterSpec public class TlsRsaPremasterSecretParameterSpec
implements AlgorithmParameterSpec { implements AlgorithmParameterSpec {
private final int majorVersion; /*
private final int minorVersion; * The TLS spec says that the version in the RSA premaster secret must
private final byte[] encodedSecret; * be the maximum version supported by the client (i.e. the version it
* requested in its client hello version). However, we (and other
* implementations) used to send the active negotiated version. The
* system property below allows to toggle the behavior.
*/
private final static String PROP_NAME =
"com.sun.net.ssl.rsaPreMasterSecretFix";
/*
* Default is "false" (old behavior) for compatibility reasons in
* SSLv3/TLSv1. Later protocols (TLSv1.1+) do not use this property.
*/
private final static boolean rsaPreMasterSecretFix =
AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
public Boolean run() {
String value = System.getProperty(PROP_NAME);
if (value != null && value.equalsIgnoreCase("true")) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
});
private final int clientVersion;
private final int serverVersion;
/** /**
* Constructs a new TlsRsaPremasterSecretParameterSpec. * Constructs a new TlsRsaPremasterSecretParameterSpec.
* <P>
* The version numbers will be placed inside the premaster secret to
* detect version rollbacks attacks as described in the TLS specification.
* Note that they do not indicate the protocol version negotiated for
* the handshake.
* *
* @param majorVersion the major number of the protocol version * @param clientVersion the version of the TLS protocol by which the
* @param minorVersion the minor number of the protocol version * client wishes to communicate during this session
* @param serverVersion the negotiated version of the TLS protocol which
* contains the lower of that suggested by the client in the client
* hello and the highest supported by the server.
* *
* @throws IllegalArgumentException if minorVersion or majorVersion are * @throws IllegalArgumentException if clientVersion or serverVersion are
* negative or larger than 255 * negative or larger than (2^16 - 1)
*/ */
public TlsRsaPremasterSecretParameterSpec(int majorVersion, public TlsRsaPremasterSecretParameterSpec(
int minorVersion) { int clientVersion, int serverVersion) {
this.majorVersion =
TlsMasterSecretParameterSpec.checkVersion(majorVersion); this.clientVersion = checkVersion(clientVersion);
this.minorVersion = this.serverVersion = checkVersion(serverVersion);
TlsMasterSecretParameterSpec.checkVersion(minorVersion);
this.encodedSecret = null;
} }
/** /**
* Constructs a new TlsRsaPremasterSecretParameterSpec. * Returns the version of the TLS protocol by which the client wishes to
* <P> * communicate during this session.
* The version numbers will be placed inside the premaster secret to
* detect version rollbacks attacks as described in the TLS specification.
* Note that they do not indicate the protocol version negotiated for
* the handshake.
* <P>
* Usually, the encoded secret key is a random number that acts as
* dummy pre_master_secret to avoid vulnerabilities described by
* section 7.4.7.1, RFC 5246.
*
* @param majorVersion the major number of the protocol version
* @param minorVersion the minor number of the protocol version
* @param encodedSecret the encoded secret key
* *
* @throws IllegalArgumentException if minorVersion or majorVersion are * @return the version of the TLS protocol in ClientHello message
* negative or larger than 255, or encodedSecret is not exactly 48 bytes.
*/ */
public TlsRsaPremasterSecretParameterSpec(int majorVersion, public int getClientVersion() {
int minorVersion, byte[] encodedSecret) { return clientVersion;
this.majorVersion =
TlsMasterSecretParameterSpec.checkVersion(majorVersion);
this.minorVersion =
TlsMasterSecretParameterSpec.checkVersion(minorVersion);
if (encodedSecret == null || encodedSecret.length != 48) {
throw new IllegalArgumentException(
"Encoded secret is not exactly 48 bytes");
}
this.encodedSecret = encodedSecret.clone();
} }
/** /**
* Returns the major version. * Returns the negotiated version of the TLS protocol which contains the
* lower of that suggested by the client in the client hello and the
* highest supported by the server.
* *
* @return the major version. * @return the negotiated version of the TLS protocol in ServerHello message
*/ */
public int getMajorVersion() { public int getServerVersion() {
return majorVersion; return serverVersion;
} }
/** /**
* Returns the minor version. * Returns the major version used in RSA premaster secret.
* *
* @return the minor version. * @return the major version used in RSA premaster secret.
*/ */
public int getMinorVersion() { public int getMajorVersion() {
return minorVersion; if (rsaPreMasterSecretFix || clientVersion >= 0x0302) {
// 0x0302: TLSv1.1
return (clientVersion >>> 8) & 0xFF;
}
return (serverVersion >>> 8) & 0xFF;
} }
/** /**
* Returns the encoded secret. * Returns the minor version used in RSA premaster secret.
* *
* @return the encoded secret, may be null if no encoded secret. * @return the minor version used in RSA premaster secret.
*/ */
public byte[] getEncodedSecret() { public int getMinorVersion() {
return encodedSecret == null ? null : encodedSecret.clone(); if (rsaPreMasterSecretFix || clientVersion >= 0x0302) {
// 0x0302: TLSv1.1
return clientVersion & 0xFF;
}
return serverVersion & 0xFF;
}
private int checkVersion(int version) {
if ((version < 0) || (version > 0xFFFF)) {
throw new IllegalArgumentException(
"Version must be between 0 and 65,535");
}
return version;
} }
} }
...@@ -37,6 +37,8 @@ import javax.crypto.spec.*; ...@@ -37,6 +37,8 @@ import javax.crypto.spec.*;
import static sun.security.pkcs11.TemplateManager.*; import static sun.security.pkcs11.TemplateManager.*;
import sun.security.pkcs11.wrapper.*; import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*; import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec;
import sun.security.util.KeyUtil;
/** /**
* RSA Cipher implementation class. We currently only support * RSA Cipher implementation class. We currently only support
...@@ -102,6 +104,12 @@ final class P11RSACipher extends CipherSpi { ...@@ -102,6 +104,12 @@ final class P11RSACipher extends CipherSpi {
// maximum output size. this is the length of the key // maximum output size. this is the length of the key
private int outputSize; private int outputSize;
// cipher parameter for TLS RSA premaster secret
private AlgorithmParameterSpec spec = null;
// the source of randomness
private SecureRandom random;
P11RSACipher(Token token, String algorithm, long mechanism) P11RSACipher(Token token, String algorithm, long mechanism)
throws PKCS11Exception { throws PKCS11Exception {
super(); super();
...@@ -165,8 +173,12 @@ final class P11RSACipher extends CipherSpi { ...@@ -165,8 +173,12 @@ final class P11RSACipher extends CipherSpi {
AlgorithmParameterSpec params, SecureRandom random) AlgorithmParameterSpec params, SecureRandom random)
throws InvalidKeyException, InvalidAlgorithmParameterException { throws InvalidKeyException, InvalidAlgorithmParameterException {
if (params != null) { if (params != null) {
throw new InvalidAlgorithmParameterException if (!(params instanceof TlsRsaPremasterSecretParameterSpec)) {
("Parameters not supported"); throw new InvalidAlgorithmParameterException(
"Parameters not supported");
}
spec = params;
this.random = random; // for TLS RSA premaster secret
} }
implInit(opmode, key); implInit(opmode, key);
} }
...@@ -176,8 +188,8 @@ final class P11RSACipher extends CipherSpi { ...@@ -176,8 +188,8 @@ final class P11RSACipher extends CipherSpi {
SecureRandom random) SecureRandom random)
throws InvalidKeyException, InvalidAlgorithmParameterException { throws InvalidKeyException, InvalidAlgorithmParameterException {
if (params != null) { if (params != null) {
throw new InvalidAlgorithmParameterException throw new InvalidAlgorithmParameterException(
("Parameters not supported"); "Parameters not supported");
} }
implInit(opmode, key); implInit(opmode, key);
} }
...@@ -452,21 +464,101 @@ final class P11RSACipher extends CipherSpi { ...@@ -452,21 +464,101 @@ final class P11RSACipher extends CipherSpi {
protected Key engineUnwrap(byte[] wrappedKey, String algorithm, protected Key engineUnwrap(byte[] wrappedKey, String algorithm,
int type) throws InvalidKeyException, NoSuchAlgorithmException { int type) throws InvalidKeyException, NoSuchAlgorithmException {
// XXX implement unwrap using C_Unwrap() for all keys boolean isTlsRsaPremasterSecret =
implInit(Cipher.DECRYPT_MODE, p11Key); algorithm.equals("TlsRsaPremasterSecret");
if (wrappedKey.length > maxInputSize) { Exception failover = null;
throw new InvalidKeyException("Key is too long for unwrapping");
SecureRandom secureRandom = random;
if (secureRandom == null && isTlsRsaPremasterSecret) {
secureRandom = new SecureRandom();
} }
implUpdate(wrappedKey, 0, wrappedKey.length);
try { // Should C_Unwrap be preferred for non-TLS RSA premaster secret?
byte[] encoded = doFinal(); if (token.supportsRawSecretKeyImport()) {
// XXX implement unwrap using C_Unwrap() for all keys
implInit(Cipher.DECRYPT_MODE, p11Key);
if (wrappedKey.length > maxInputSize) {
throw new InvalidKeyException("Key is too long for unwrapping");
}
byte[] encoded = null;
implUpdate(wrappedKey, 0, wrappedKey.length);
try {
encoded = doFinal();
} catch (BadPaddingException e) {
if (isTlsRsaPremasterSecret) {
failover = e;
} else {
throw new InvalidKeyException("Unwrapping failed", e);
}
} catch (IllegalBlockSizeException e) {
// should not occur, handled with length check above
throw new InvalidKeyException("Unwrapping failed", e);
}
if (isTlsRsaPremasterSecret) {
if (!(spec instanceof TlsRsaPremasterSecretParameterSpec)) {
throw new IllegalStateException(
"No TlsRsaPremasterSecretParameterSpec specified");
}
// polish the TLS premaster secret
TlsRsaPremasterSecretParameterSpec psps =
(TlsRsaPremasterSecretParameterSpec)spec;
encoded = KeyUtil.checkTlsPreMasterSecretKey(
psps.getClientVersion(), psps.getServerVersion(),
secureRandom, encoded, (failover != null));
}
return ConstructKeys.constructKey(encoded, algorithm, type); return ConstructKeys.constructKey(encoded, algorithm, type);
} catch (BadPaddingException e) { } else {
// should not occur Session s = null;
throw new InvalidKeyException("Unwrapping failed", e); SecretKey secretKey = null;
} catch (IllegalBlockSizeException e) { try {
// should not occur, handled with length check above try {
throw new InvalidKeyException("Unwrapping failed", e); s = token.getObjSession();
long keyType = CKK_GENERIC_SECRET;
CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] {
new CK_ATTRIBUTE(CKA_CLASS, CKO_SECRET_KEY),
new CK_ATTRIBUTE(CKA_KEY_TYPE, keyType),
};
attributes = token.getAttributes(
O_IMPORT, CKO_SECRET_KEY, keyType, attributes);
long keyID = token.p11.C_UnwrapKey(s.id(),
new CK_MECHANISM(mechanism), p11Key.keyID,
wrappedKey, attributes);
secretKey = P11Key.secretKey(s, keyID,
algorithm, 48 << 3, attributes);
} catch (PKCS11Exception e) {
if (isTlsRsaPremasterSecret) {
failover = e;
} else {
throw new InvalidKeyException("unwrap() failed", e);
}
}
if (isTlsRsaPremasterSecret) {
byte[] replacer = new byte[48];
if (failover == null) {
// Does smart compiler dispose this operation?
secureRandom.nextBytes(replacer);
}
TlsRsaPremasterSecretParameterSpec psps =
(TlsRsaPremasterSecretParameterSpec)spec;
// Please use the tricky failover and replacer byte array
// as the parameters so that smart compiler won't dispose
// the unused variable .
secretKey = polishPreMasterSecretKey(token, s,
failover, replacer, secretKey,
psps.getClientVersion(), psps.getServerVersion());
}
return secretKey;
} finally {
token.releaseSession(s);
}
} }
} }
...@@ -475,6 +567,34 @@ final class P11RSACipher extends CipherSpi { ...@@ -475,6 +567,34 @@ final class P11RSACipher extends CipherSpi {
int n = P11KeyFactory.convertKey(token, key, algorithm).length(); int n = P11KeyFactory.convertKey(token, key, algorithm).length();
return n; return n;
} }
private static SecretKey polishPreMasterSecretKey(
Token token, Session session,
Exception failover, byte[] replacer, SecretKey secretKey,
int clientVersion, int serverVersion) {
if (failover != null) {
CK_VERSION version = new CK_VERSION(
(clientVersion >>> 8) & 0xFF, clientVersion & 0xFF);
try {
CK_ATTRIBUTE[] attributes = token.getAttributes(
O_GENERATE, CKO_SECRET_KEY,
CKK_GENERIC_SECRET, new CK_ATTRIBUTE[0]);
long keyID = token.p11.C_GenerateKey(session.id(),
// new CK_MECHANISM(CKM_TLS_PRE_MASTER_KEY_GEN, version),
new CK_MECHANISM(CKM_SSL3_PRE_MASTER_KEY_GEN, version),
attributes);
return P11Key.secretKey(session,
keyID, "TlsRsaPremasterSecret", 48 << 3, attributes);
} catch (PKCS11Exception e) {
throw new ProviderException(
"Could not generate premaster secret", e);
}
}
return secretKey;
}
} }
final class ConstructKeys { final class ConstructKeys {
......
...@@ -73,7 +73,7 @@ final class P11TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi { ...@@ -73,7 +73,7 @@ final class P11TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi {
protected void engineInit(AlgorithmParameterSpec params, protected void engineInit(AlgorithmParameterSpec params,
SecureRandom random) throws InvalidAlgorithmParameterException { SecureRandom random) throws InvalidAlgorithmParameterException {
if (params instanceof TlsRsaPremasterSecretParameterSpec == false) { if (!(params instanceof TlsRsaPremasterSecretParameterSpec)) {
throw new InvalidAlgorithmParameterException(MSG); throw new InvalidAlgorithmParameterException(MSG);
} }
this.spec = (TlsRsaPremasterSecretParameterSpec)params; this.spec = (TlsRsaPremasterSecretParameterSpec)params;
...@@ -83,38 +83,32 @@ final class P11TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi { ...@@ -83,38 +83,32 @@ final class P11TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi {
throw new InvalidParameterException(MSG); throw new InvalidParameterException(MSG);
} }
// Only can be used in client side to generate TLS RSA premaster secret.
protected SecretKey engineGenerateKey() { protected SecretKey engineGenerateKey() {
if (spec == null) { if (spec == null) {
throw new IllegalStateException throw new IllegalStateException
("TlsRsaPremasterSecretGenerator must be initialized"); ("TlsRsaPremasterSecretGenerator must be initialized");
} }
byte[] b = spec.getEncodedSecret(); CK_VERSION version = new CK_VERSION(
if (b == null) {
CK_VERSION version = new CK_VERSION(
spec.getMajorVersion(), spec.getMinorVersion()); spec.getMajorVersion(), spec.getMinorVersion());
Session session = null; Session session = null;
try { try {
session = token.getObjSession(); session = token.getObjSession();
CK_ATTRIBUTE[] attributes = token.getAttributes( CK_ATTRIBUTE[] attributes = token.getAttributes(
O_GENERATE, CKO_SECRET_KEY, O_GENERATE, CKO_SECRET_KEY,
CKK_GENERIC_SECRET, new CK_ATTRIBUTE[0]); CKK_GENERIC_SECRET, new CK_ATTRIBUTE[0]);
long keyID = token.p11.C_GenerateKey(session.id(), long keyID = token.p11.C_GenerateKey(session.id(),
new CK_MECHANISM(mechanism, version), attributes); new CK_MECHANISM(mechanism, version), attributes);
SecretKey key = P11Key.secretKey(session, SecretKey key = P11Key.secretKey(session,
keyID, "TlsRsaPremasterSecret", 48 << 3, attributes); keyID, "TlsRsaPremasterSecret", 48 << 3, attributes);
return key; return key;
} catch (PKCS11Exception e) { } catch (PKCS11Exception e) {
throw new ProviderException( throw new ProviderException(
"Could not generate premaster secret", e); "Could not generate premaster secret", e);
} finally { } finally {
token.releaseSession(session); token.releaseSession(session);
}
} }
// Won't worry, the TlsRsaPremasterSecret will be soon converted to
// TlsMasterSecret.
return new SecretKeySpec(b, "TlsRsaPremasterSecret");
} }
} }
...@@ -36,6 +36,7 @@ import javax.security.auth.login.LoginException; ...@@ -36,6 +36,7 @@ import javax.security.auth.login.LoginException;
import sun.security.jca.JCAUtil; import sun.security.jca.JCAUtil;
import sun.security.pkcs11.wrapper.*; import sun.security.pkcs11.wrapper.*;
import static sun.security.pkcs11.TemplateManager.*;
import static sun.security.pkcs11.wrapper.PKCS11Constants.*; import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
/** /**
...@@ -122,6 +123,9 @@ class Token implements Serializable { ...@@ -122,6 +123,9 @@ class Token implements Serializable {
private final static CK_MECHANISM_INFO INVALID_MECH = private final static CK_MECHANISM_INFO INVALID_MECH =
new CK_MECHANISM_INFO(0, 0, 0); new CK_MECHANISM_INFO(0, 0, 0);
// flag indicating whether the token supports raw secret key material import
private Boolean supportsRawSecretKeyImport;
Token(SunPKCS11 provider) throws PKCS11Exception { Token(SunPKCS11 provider) throws PKCS11Exception {
this.provider = provider; this.provider = provider;
this.removable = provider.removable; this.removable = provider.removable;
...@@ -160,6 +164,36 @@ class Token implements Serializable { ...@@ -160,6 +164,36 @@ class Token implements Serializable {
return writeProtected; return writeProtected;
} }
// return whether the token supports raw secret key material import
boolean supportsRawSecretKeyImport() {
if (supportsRawSecretKeyImport == null) {
SecureRandom random = JCAUtil.getSecureRandom();
byte[] encoded = new byte[48];
random.nextBytes(encoded);
CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[3];
attributes[0] = new CK_ATTRIBUTE(CKA_CLASS, CKO_SECRET_KEY);
attributes[1] = new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_GENERIC_SECRET);
attributes[2] = new CK_ATTRIBUTE(CKA_VALUE, encoded);
Session session = null;
try {
attributes = getAttributes(O_IMPORT,
CKO_SECRET_KEY, CKK_GENERIC_SECRET, attributes);
session = getObjSession();
long keyID = p11.C_CreateObject(session.id(), attributes);
supportsRawSecretKeyImport = Boolean.TRUE;
} catch (PKCS11Exception e) {
supportsRawSecretKeyImport = Boolean.FALSE;
} finally {
releaseSession(session);
}
}
return supportsRawSecretKeyImport;
}
// return whether we are logged in // return whether we are logged in
// uses cached result if current. session is optional and may be null // uses cached result if current. session is optional and may be null
boolean isLoggedIn(Session session) throws PKCS11Exception { boolean isLoggedIn(Session session) throws PKCS11Exception {
......
/* /*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -60,7 +60,8 @@ class ByteBufferInputStream extends InputStream { ...@@ -60,7 +60,8 @@ class ByteBufferInputStream extends InputStream {
if (bb.remaining() == 0) { if (bb.remaining() == 0) {
return -1; return -1;
} }
return bb.get();
return (bb.get() & 0xFF); // need to be in the range 0 to 255
} }
/** /**
......
/* /*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -109,14 +109,8 @@ final class EngineInputRecord extends InputRecord { ...@@ -109,14 +109,8 @@ final class EngineInputRecord extends InputRecord {
ProtocolVersion recordVersion = ProtocolVersion recordVersion =
ProtocolVersion.valueOf(buf.get(pos + 1), buf.get(pos + 2)); ProtocolVersion.valueOf(buf.get(pos + 1), buf.get(pos + 2));
// Check if too old (currently not possible) // check the record version
// or if the major version does not match. checkRecordVersion(recordVersion, false);
// The actual version negotiation is in the handshaker classes
if ((recordVersion.v < ProtocolVersion.MIN.v)
|| (recordVersion.major > ProtocolVersion.MAX.major)) {
throw new SSLException(
"Unsupported record version " + recordVersion);
}
/* /*
* Reasonably sure this is a V3, disable further checks. * Reasonably sure this is a V3, disable further checks.
...@@ -147,18 +141,8 @@ final class EngineInputRecord extends InputRecord { ...@@ -147,18 +141,8 @@ final class EngineInputRecord extends InputRecord {
ProtocolVersion recordVersion = ProtocolVersion recordVersion =
ProtocolVersion.valueOf(buf.get(pos + 3), buf.get(pos + 4)); ProtocolVersion.valueOf(buf.get(pos + 3), buf.get(pos + 4));
// Check if too old (currently not possible) // check the record version
// or if the major version does not match. checkRecordVersion(recordVersion, true);
// The actual version negotiation is in the handshaker classes
if ((recordVersion.v < ProtocolVersion.MIN.v)
|| (recordVersion.major > ProtocolVersion.MAX.major)) {
// if it's not SSLv2, we're out of here.
if (recordVersion.v != ProtocolVersion.SSL20Hello.v) {
throw new SSLException(
"Unsupported record version " + recordVersion);
}
}
/* /*
* Client or Server Hello * Client or Server Hello
...@@ -406,14 +390,9 @@ final class EngineInputRecord extends InputRecord { ...@@ -406,14 +390,9 @@ final class EngineInputRecord extends InputRecord {
ProtocolVersion recordVersion = ProtocolVersion.valueOf( ProtocolVersion recordVersion = ProtocolVersion.valueOf(
srcBB.get(srcPos + 1), srcBB.get(srcPos + 2)); srcBB.get(srcPos + 1), srcBB.get(srcPos + 2));
// Check if too old (currently not possible)
// or if the major version does not match. // check the record version
// The actual version negotiation is in the handshaker classes checkRecordVersion(recordVersion, false);
if ((recordVersion.v < ProtocolVersion.MIN.v)
|| (recordVersion.major > ProtocolVersion.MAX.major)) {
throw new SSLException(
"Unsupported record version " + recordVersion);
}
/* /*
* It's really application data. How much to consume? * It's really application data. How much to consume?
......
/* /*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -533,20 +533,36 @@ class InputRecord extends ByteArrayInputStream implements Record { ...@@ -533,20 +533,36 @@ class InputRecord extends ByteArrayInputStream implements Record {
} }
} }
/**
* Return true if the specified record protocol version is out of the
* range of the possible supported versions.
*/
static void checkRecordVersion(ProtocolVersion version,
boolean allowSSL20Hello) throws SSLException {
// Check if the record version is too old (currently not possible)
// or if the major version does not match.
//
// The actual version negotiation is in the handshaker classes
if ((version.v < ProtocolVersion.MIN.v) ||
((version.major & 0xFF) > (ProtocolVersion.MAX.major & 0xFF))) {
// if it's not SSLv2, we're out of here.
if (!allowSSL20Hello ||
(version.v != ProtocolVersion.SSL20Hello.v)) {
throw new SSLException("Unsupported record version " + version);
}
}
}
/** /**
* Read a SSL/TLS record. Throw an IOException if the format is invalid. * Read a SSL/TLS record. Throw an IOException if the format is invalid.
*/ */
private void readV3Record(InputStream s, OutputStream o) private void readV3Record(InputStream s, OutputStream o)
throws IOException { throws IOException {
ProtocolVersion recordVersion = ProtocolVersion.valueOf(buf[1], buf[2]); ProtocolVersion recordVersion = ProtocolVersion.valueOf(buf[1], buf[2]);
// Check if too old (currently not possible)
// or if the major version does not match. // check the record version
// The actual version negotiation is in the handshaker classes checkRecordVersion(recordVersion, false);
if ((recordVersion.v < ProtocolVersion.MIN.v)
|| (recordVersion.major > ProtocolVersion.MAX.major)) {
throw new SSLException(
"Unsupported record version " + recordVersion);
}
/* /*
* Get and check length, then the data. * Get and check length, then the data.
......
/* /*
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -101,7 +101,7 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> { ...@@ -101,7 +101,7 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> {
this.v = v; this.v = v;
this.name = name; this.name = name;
major = (byte)(v >>> 8); major = (byte)(v >>> 8);
minor = (byte)(v & 0xff); minor = (byte)(v & 0xFF);
} }
// private // private
...@@ -117,8 +117,8 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> { ...@@ -117,8 +117,8 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> {
} else if (v == SSL20Hello.v) { } else if (v == SSL20Hello.v) {
return SSL20Hello; return SSL20Hello;
} else { } else {
int major = (v >>> 8) & 0xff; int major = (v >>> 8) & 0xFF;
int minor = v & 0xff; int minor = v & 0xFF;
return new ProtocolVersion(v, "Unknown-" + major + "." + minor); return new ProtocolVersion(v, "Unknown-" + major + "." + minor);
} }
} }
...@@ -128,10 +128,7 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> { ...@@ -128,10 +128,7 @@ public final class ProtocolVersion implements Comparable<ProtocolVersion> {
* numbers. Never throws exceptions. * numbers. Never throws exceptions.
*/ */
public static ProtocolVersion valueOf(int major, int minor) { public static ProtocolVersion valueOf(int major, int minor) {
major &= 0xff; return valueOf(((major & 0xFF) << 8) | (minor & 0xFF));
minor &= 0xff;
int v = (major << 8) | minor;
return valueOf(v);
} }
/** /**
......
...@@ -48,23 +48,6 @@ import sun.security.util.KeyUtil; ...@@ -48,23 +48,6 @@ import sun.security.util.KeyUtil;
*/ */
final class RSAClientKeyExchange extends HandshakeMessage { final class RSAClientKeyExchange extends HandshakeMessage {
/**
* The TLS spec says that the version in the RSA premaster secret must
* be the maximum version supported by the client (i.e. the version it
* requested in its client hello version). However, we (and other
* implementations) used to send the active negotiated version. The
* system property below allows to toggle the behavior.
*/
private final static String PROP_NAME =
"com.sun.net.ssl.rsaPreMasterSecretFix";
/*
* Default is "false" (old behavior) for compatibility reasons in
* SSLv3/TLSv1. Later protocols (TLSv1.1+) do not use this property.
*/
private final static boolean rsaPreMasterSecretFix =
Debug.getBooleanProperty(PROP_NAME, false);
/* /*
* The following field values were encrypted with the server's public * The following field values were encrypted with the server's public
* key (or temp key from server key exchange msg) and are presented * key (or temp key from server key exchange msg) and are presented
...@@ -88,22 +71,12 @@ final class RSAClientKeyExchange extends HandshakeMessage { ...@@ -88,22 +71,12 @@ final class RSAClientKeyExchange extends HandshakeMessage {
} }
this.protocolVersion = protocolVersion; this.protocolVersion = protocolVersion;
int major, minor;
if (rsaPreMasterSecretFix || maxVersion.v >= ProtocolVersion.TLS11.v) {
major = maxVersion.major;
minor = maxVersion.minor;
} else {
major = protocolVersion.major;
minor = protocolVersion.minor;
}
try { try {
String s = ((protocolVersion.v >= ProtocolVersion.TLS12.v) ? String s = ((protocolVersion.v >= ProtocolVersion.TLS12.v) ?
"SunTls12RsaPremasterSecret" : "SunTlsRsaPremasterSecret"); "SunTls12RsaPremasterSecret" : "SunTlsRsaPremasterSecret");
KeyGenerator kg = JsseJce.getKeyGenerator(s); KeyGenerator kg = JsseJce.getKeyGenerator(s);
kg.init(new TlsRsaPremasterSecretParameterSpec(major, minor), kg.init(new TlsRsaPremasterSecretParameterSpec(
generator); maxVersion.v, protocolVersion.v), generator);
preMaster = kg.generateKey(); preMaster = kg.generateKey();
Cipher cipher = JsseJce.getCipher(JsseJce.CIPHER_RSA_PKCS1); Cipher cipher = JsseJce.getCipher(JsseJce.CIPHER_RSA_PKCS1);
...@@ -138,18 +111,16 @@ final class RSAClientKeyExchange extends HandshakeMessage { ...@@ -138,18 +111,16 @@ final class RSAClientKeyExchange extends HandshakeMessage {
} }
} }
Exception failover = null;
byte[] encoded = null;
try { try {
Cipher cipher = JsseJce.getCipher(JsseJce.CIPHER_RSA_PKCS1); Cipher cipher = JsseJce.getCipher(JsseJce.CIPHER_RSA_PKCS1);
// Cannot generate key here, please don't use Cipher.UNWRAP_MODE! cipher.init(Cipher.UNWRAP_MODE, privateKey,
cipher.init(Cipher.DECRYPT_MODE, privateKey); new TlsRsaPremasterSecretParameterSpec(
encoded = cipher.doFinal(encrypted); maxVersion.v, currentVersion.v),
} catch (BadPaddingException bpe) { generator);
failover = bpe; preMaster = (SecretKey)cipher.unwrap(encrypted,
encoded = null; "TlsRsaPremasterSecret", Cipher.SECRET_KEY);
} catch (IllegalBlockSizeException ibse) { } catch (InvalidKeyException ibk) {
// the message it too big to process with RSA // the message is too big to process with RSA
throw new SSLProtocolException( throw new SSLProtocolException(
"Unable to process PreMasterSecret, may be too big"); "Unable to process PreMasterSecret, may be too big");
} catch (Exception e) { } catch (Exception e) {
...@@ -160,124 +131,6 @@ final class RSAClientKeyExchange extends HandshakeMessage { ...@@ -160,124 +131,6 @@ final class RSAClientKeyExchange extends HandshakeMessage {
} }
throw new RuntimeException("Could not generate dummy secret", e); throw new RuntimeException("Could not generate dummy secret", e);
} }
// polish the premaster secret
preMaster = polishPreMasterSecretKey(
currentVersion, maxVersion, generator, encoded, failover);
}
/**
* To avoid vulnerabilities described by section 7.4.7.1, RFC 5246,
* treating incorrectly formatted message blocks and/or mismatched
* version numbers in a manner indistinguishable from correctly
* formatted RSA blocks.
*
* RFC 5246 describes the approach as :
*
* 1. Generate a string R of 48 random bytes
*
* 2. Decrypt the message to recover the plaintext M
*
* 3. If the PKCS#1 padding is not correct, or the length of message
* M is not exactly 48 bytes:
* pre_master_secret = R
* else If ClientHello.client_version <= TLS 1.0, and version
* number check is explicitly disabled:
* premaster secret = M
* else If M[0..1] != ClientHello.client_version:
* premaster secret = R
* else:
* premaster secret = M
*
* Note that #2 has completed before the call of this method.
*/
private SecretKey polishPreMasterSecretKey(ProtocolVersion currentVersion,
ProtocolVersion clientHelloVersion, SecureRandom generator,
byte[] encoded, Exception failoverException) {
this.protocolVersion = clientHelloVersion;
if (generator == null) {
generator = new SecureRandom();
}
byte[] random = new byte[48];
generator.nextBytes(random);
if (failoverException == null && encoded != null) {
// check the length
if (encoded.length != 48) {
if (debug != null && Debug.isOn("handshake")) {
System.out.println(
"incorrect length of premaster secret: " +
encoded.length);
}
return generatePreMasterSecret(
clientHelloVersion, random, generator);
}
if (clientHelloVersion.major != encoded[0] ||
clientHelloVersion.minor != encoded[1]) {
if (clientHelloVersion.v <= ProtocolVersion.TLS10.v &&
currentVersion.major == encoded[0] &&
currentVersion.minor == encoded[1]) {
/*
* For compatibility, we maintain the behavior that the
* version in pre_master_secret can be the negotiated
* version for TLS v1.0 and SSL v3.0.
*/
this.protocolVersion = currentVersion;
} else {
if (debug != null && Debug.isOn("handshake")) {
System.out.println("Mismatching Protocol Versions, " +
"ClientHello.client_version is " +
clientHelloVersion +
", while PreMasterSecret.client_version is " +
ProtocolVersion.valueOf(encoded[0], encoded[1]));
}
encoded = random;
}
}
return generatePreMasterSecret(
clientHelloVersion, encoded, generator);
}
if (debug != null && Debug.isOn("handshake") &&
failoverException != null) {
System.out.println("Error decrypting premaster secret:");
failoverException.printStackTrace(System.out);
}
return generatePreMasterSecret(clientHelloVersion, random, generator);
}
// generate a premaster secret with the specified version number
private static SecretKey generatePreMasterSecret(
ProtocolVersion version, byte[] encodedSecret,
SecureRandom generator) {
if (debug != null && Debug.isOn("handshake")) {
System.out.println("Generating a random fake premaster secret");
}
try {
String s = ((version.v >= ProtocolVersion.TLS12.v) ?
"SunTls12RsaPremasterSecret" : "SunTlsRsaPremasterSecret");
KeyGenerator kg = JsseJce.getKeyGenerator(s);
kg.init(new TlsRsaPremasterSecretParameterSpec(
version.major, version.minor, encodedSecret), generator);
return kg.generateKey();
} catch (InvalidAlgorithmParameterException |
NoSuchAlgorithmException iae) {
// unlikely to happen, otherwise, must be a provider exception
if (debug != null && Debug.isOn("handshake")) {
System.out.println("RSA premaster secret generation error:");
iae.printStackTrace(System.out);
}
throw new RuntimeException("Could not generate dummy secret", iae);
}
} }
@Override @Override
......
/* /*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -135,7 +135,10 @@ public class Resources_ja extends java.util.ListResourceBundle { ...@@ -135,7 +135,10 @@ public class Resources_ja extends java.util.ListResourceBundle {
{".Unsigned.entries.", "(\u672A\u7F72\u540D\u306E\u30A8\u30F3\u30C8\u30EA)"}, {".Unsigned.entries.", "(\u672A\u7F72\u540D\u306E\u30A8\u30F3\u30C8\u30EA)"},
{"jar.is.unsigned.signatures.missing.or.not.parsable.", {"jar.is.unsigned.signatures.missing.or.not.parsable.",
"jar\u306F\u7F72\u540D\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002(\u30B7\u30B0\u30CD\u30C1\u30E3\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u304B\u3001\u69CB\u6587\u89E3\u6790\u3067\u304D\u307E\u305B\u3093)"}, "jar\u306F\u7F72\u540D\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002(\u30B7\u30B0\u30CD\u30C1\u30E3\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u304B\u3001\u69CB\u6587\u89E3\u6790\u3067\u304D\u307E\u305B\u3093)"},
{"jar.signed.", "jar\u306F\u7F72\u540D\u3055\u308C\u307E\u3057\u305F\u3002"},
{"jar.signed.with.signer.errors.", "jar\u306F\u7F72\u540D\u3055\u308C\u307E\u3057\u305F - \u7F72\u540D\u8005\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059\u3002"},
{"jar.verified.", "jar\u304C\u691C\u8A3C\u3055\u308C\u307E\u3057\u305F\u3002"}, {"jar.verified.", "jar\u304C\u691C\u8A3C\u3055\u308C\u307E\u3057\u305F\u3002"},
{"jar.verified.with.signer.errors.", "jar\u306F\u691C\u8A3C\u3055\u308C\u307E\u3057\u305F - \u7F72\u540D\u8005\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059\u3002"},
{"jarsigner.", "jarsigner: "}, {"jarsigner.", "jarsigner: "},
{"signature.filename.must.consist.of.the.following.characters.A.Z.0.9.or.", {"signature.filename.must.consist.of.the.following.characters.A.Z.0.9.or.",
"\u30B7\u30B0\u30CD\u30C1\u30E3\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u4F7F\u7528\u3067\u304D\u308B\u6587\u5B57\u306F\u3001A-Z\u30010-9\u3001_\u3001- \u306E\u307F\u3067\u3059\u3002"}, "\u30B7\u30B0\u30CD\u30C1\u30E3\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u4F7F\u7528\u3067\u304D\u308B\u6587\u5B57\u306F\u3001A-Z\u30010-9\u3001_\u3001- \u306E\u307F\u3067\u3059\u3002"},
...@@ -191,6 +194,7 @@ public class Resources_ja extends java.util.ListResourceBundle { ...@@ -191,6 +194,7 @@ public class Resources_ja extends java.util.ListResourceBundle {
"\u4EE3\u66FF\u7F72\u540D\u30E1\u30AB\u30CB\u30BA\u30E0\u306E\u4F7F\u7528"}, "\u4EE3\u66FF\u7F72\u540D\u30E1\u30AB\u30CB\u30BA\u30E0\u306E\u4F7F\u7528"},
{"entry.was.signed.on", "\u30A8\u30F3\u30C8\u30EA\u306F{0}\u306B\u7F72\u540D\u3055\u308C\u307E\u3057\u305F"}, {"entry.was.signed.on", "\u30A8\u30F3\u30C8\u30EA\u306F{0}\u306B\u7F72\u540D\u3055\u308C\u307E\u3057\u305F"},
{"Warning.", "\u8B66\u544A: "}, {"Warning.", "\u8B66\u544A: "},
{"Error.", "\u30A8\u30E9\u30FC: "},
{"This.jar.contains.unsigned.entries.which.have.not.been.integrity.checked.", {"This.jar.contains.unsigned.entries.which.have.not.been.integrity.checked.",
"\u3053\u306Ejar\u306B\u306F\u3001\u6574\u5408\u6027\u30C1\u30A7\u30C3\u30AF\u3092\u3057\u3066\u3044\u306A\u3044\u672A\u7F72\u540D\u306E\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002 "}, "\u3053\u306Ejar\u306B\u306F\u3001\u6574\u5408\u6027\u30C1\u30A7\u30C3\u30AF\u3092\u3057\u3066\u3044\u306A\u3044\u672A\u7F72\u540D\u306E\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002 "},
{"This.jar.contains.entries.whose.signer.certificate.has.expired.", {"This.jar.contains.entries.whose.signer.certificate.has.expired.",
...@@ -227,6 +231,10 @@ public class Resources_ja extends java.util.ListResourceBundle { ...@@ -227,6 +231,10 @@ public class Resources_ja extends java.util.ListResourceBundle {
"\u7F72\u540D\u8005\u306E\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u304C\u307E\u3060\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"}, "\u7F72\u540D\u8005\u306E\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u304C\u307E\u3060\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
{"This.jar.contains.entries.whose.certificate.chain.is.not.validated.", {"This.jar.contains.entries.whose.certificate.chain.is.not.validated.",
"\u3053\u306Ejar\u306B\u306F\u3001\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u304C\u307E\u3060\u691C\u8A3C\u3055\u308C\u3066\u3044\u306A\u3044\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002"}, "\u3053\u306Ejar\u306B\u306F\u3001\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u304C\u307E\u3060\u691C\u8A3C\u3055\u308C\u3066\u3044\u306A\u3044\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002"},
{"no.timestamp.signing",
"-tsa\u307E\u305F\u306F-tsacert\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u3053\u306Ejar\u306B\u306F\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u4ED8\u52A0\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u306A\u3044\u3068\u3001\u7F72\u540D\u8005\u8A3C\u660E\u66F8\u306E\u6709\u52B9\u671F\u9650(%1$tY-%1$tm-%1$td)\u5F8C\u307E\u305F\u306F\u5C06\u6765\u306E\u5931\u52B9\u65E5\u5F8C\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u3053\u306Ejar\u3092\u691C\u8A3C\u3067\u304D\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002"},
{"no.timestamp.verifying",
"\u3053\u306Ejar\u306B\u306F\u3001\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u306A\u3044\u7F72\u540D\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u306A\u3044\u3068\u3001\u7F72\u540D\u8005\u8A3C\u660E\u66F8\u306E\u6709\u52B9\u671F\u9650(%1$tY-%1$tm-%1$td)\u5F8C\u307E\u305F\u306F\u5C06\u6765\u306E\u5931\u52B9\u65E5\u5F8C\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u3053\u306Ejar\u3092\u691C\u8A3C\u3067\u304D\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002"},
{"Unknown.password.type.", "\u4E0D\u660E\u306A\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30BF\u30A4\u30D7: "}, {"Unknown.password.type.", "\u4E0D\u660E\u306A\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30BF\u30A4\u30D7: "},
{"Cannot.find.environment.variable.", {"Cannot.find.environment.variable.",
"\u74B0\u5883\u5909\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "}, "\u74B0\u5883\u5909\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "},
......
/* /*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -65,7 +65,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { ...@@ -65,7 +65,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle {
{".keypass.password.password.for.private.key.if.different.", {".keypass.password.password.for.private.key.if.different.",
"[-keypass <\u53E3\u4EE4>] \u79C1\u6709\u5BC6\u94A5\u7684\u53E3\u4EE4 (\u5982\u679C\u4E0D\u540C)"}, "[-keypass <\u53E3\u4EE4>] \u79C1\u6709\u5BC6\u94A5\u7684\u53E3\u4EE4 (\u5982\u679C\u4E0D\u540C)"},
{".certchain.file.name.of.alternative.certchain.file", {".certchain.file.name.of.alternative.certchain.file",
"[-certchain <\u6587\u4EF6>] \u66FF\u4EE3 certchain \u6587\u4EF6\u7684\u540D\u79F0"}, "[-certchain <\u6587\u4EF6>] \u66FF\u4EE3\u8BC1\u4E66\u94FE\u6587\u4EF6\u7684\u540D\u79F0"},
{".sigfile.file.name.of.SF.DSA.file", {".sigfile.file.name.of.SF.DSA.file",
"[-sigfile <\u6587\u4EF6>] .SF/.DSA \u6587\u4EF6\u7684\u540D\u79F0"}, "[-sigfile <\u6587\u4EF6>] .SF/.DSA \u6587\u4EF6\u7684\u540D\u79F0"},
{".signedjar.file.name.of.signed.JAR.file", {".signedjar.file.name.of.signed.JAR.file",
...@@ -135,7 +135,10 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { ...@@ -135,7 +135,10 @@ public class Resources_zh_CN extends java.util.ListResourceBundle {
{".Unsigned.entries.", "(\u672A\u7B7E\u540D\u6761\u76EE)"}, {".Unsigned.entries.", "(\u672A\u7B7E\u540D\u6761\u76EE)"},
{"jar.is.unsigned.signatures.missing.or.not.parsable.", {"jar.is.unsigned.signatures.missing.or.not.parsable.",
"jar \u672A\u7B7E\u540D\u3002(\u7F3A\u5C11\u7B7E\u540D\u6216\u65E0\u6CD5\u89E3\u6790\u7B7E\u540D)"}, "jar \u672A\u7B7E\u540D\u3002(\u7F3A\u5C11\u7B7E\u540D\u6216\u65E0\u6CD5\u89E3\u6790\u7B7E\u540D)"},
{"jar.signed.", "jar \u5DF2\u7B7E\u540D\u3002"},
{"jar.signed.with.signer.errors.", "jar \u5DF2\u7B7E\u540D, \u4F46\u51FA\u73B0\u7B7E\u540D\u8005\u9519\u8BEF\u3002"},
{"jar.verified.", "jar \u5DF2\u9A8C\u8BC1\u3002"}, {"jar.verified.", "jar \u5DF2\u9A8C\u8BC1\u3002"},
{"jar.verified.with.signer.errors.", "jar \u5DF2\u9A8C\u8BC1, \u4F46\u51FA\u73B0\u7B7E\u540D\u8005\u9519\u8BEF\u3002"},
{"jarsigner.", "jarsigner: "}, {"jarsigner.", "jarsigner: "},
{"signature.filename.must.consist.of.the.following.characters.A.Z.0.9.or.", {"signature.filename.must.consist.of.the.following.characters.A.Z.0.9.or.",
"\u7B7E\u540D\u6587\u4EF6\u540D\u5FC5\u987B\u5305\u542B\u4EE5\u4E0B\u5B57\u7B26: A-Z, 0-9, _ \u6216 -"}, "\u7B7E\u540D\u6587\u4EF6\u540D\u5FC5\u987B\u5305\u542B\u4EE5\u4E0B\u5B57\u7B26: A-Z, 0-9, _ \u6216 -"},
...@@ -191,6 +194,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { ...@@ -191,6 +194,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle {
"\u6B63\u5728\u4F7F\u7528\u66FF\u4EE3\u7684\u7B7E\u540D\u673A\u5236"}, "\u6B63\u5728\u4F7F\u7528\u66FF\u4EE3\u7684\u7B7E\u540D\u673A\u5236"},
{"entry.was.signed.on", "\u6761\u76EE\u7684\u7B7E\u540D\u65E5\u671F\u4E3A {0}"}, {"entry.was.signed.on", "\u6761\u76EE\u7684\u7B7E\u540D\u65E5\u671F\u4E3A {0}"},
{"Warning.", "\u8B66\u544A: "}, {"Warning.", "\u8B66\u544A: "},
{"Error.", "\u9519\u8BEF: "},
{"This.jar.contains.unsigned.entries.which.have.not.been.integrity.checked.", {"This.jar.contains.unsigned.entries.which.have.not.been.integrity.checked.",
"\u6B64 jar \u5305\u542B\u5C1A\u672A\u8FDB\u884C\u5B8C\u6574\u6027\u68C0\u67E5\u7684\u672A\u7B7E\u540D\u6761\u76EE\u3002 "}, "\u6B64 jar \u5305\u542B\u5C1A\u672A\u8FDB\u884C\u5B8C\u6574\u6027\u68C0\u67E5\u7684\u672A\u7B7E\u540D\u6761\u76EE\u3002 "},
{"This.jar.contains.entries.whose.signer.certificate.has.expired.", {"This.jar.contains.entries.whose.signer.certificate.has.expired.",
...@@ -227,6 +231,10 @@ public class Resources_zh_CN extends java.util.ListResourceBundle { ...@@ -227,6 +231,10 @@ public class Resources_zh_CN extends java.util.ListResourceBundle {
"\u7B7E\u540D\u8005\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1\u3002"}, "\u7B7E\u540D\u8005\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1\u3002"},
{"This.jar.contains.entries.whose.certificate.chain.is.not.validated.", {"This.jar.contains.entries.whose.certificate.chain.is.not.validated.",
"\u6B64 jar \u5305\u542B\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1\u7684\u6761\u76EE\u3002"}, "\u6B64 jar \u5305\u542B\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1\u7684\u6761\u76EE\u3002"},
{"no.timestamp.signing",
"\u672A\u63D0\u4F9B -tsa \u6216 -tsacert, \u6B64 jar \u6CA1\u6709\u65F6\u95F4\u6233\u3002\u5982\u679C\u6CA1\u6709\u65F6\u95F4\u6233, \u5219\u5728\u7B7E\u540D\u8005\u8BC1\u4E66\u7684\u5230\u671F\u65E5\u671F (%1$tY-%1$tm-%1$td) \u6216\u4EE5\u540E\u7684\u4EFB\u4F55\u64A4\u9500\u65E5\u671F\u4E4B\u540E, \u7528\u6237\u53EF\u80FD\u65E0\u6CD5\u9A8C\u8BC1\u6B64 jar\u3002"},
{"no.timestamp.verifying",
"\u6B64 jar \u5305\u542B\u7684\u7B7E\u540D\u6CA1\u6709\u65F6\u95F4\u6233\u3002\u5982\u679C\u6CA1\u6709\u65F6\u95F4\u6233, \u5219\u5728\u7B7E\u540D\u8005\u8BC1\u4E66\u7684\u5230\u671F\u65E5\u671F (%1$tY-%1$tm-%1$td) \u6216\u4EE5\u540E\u7684\u4EFB\u4F55\u64A4\u9500\u65E5\u671F\u4E4B\u540E, \u7528\u6237\u53EF\u80FD\u65E0\u6CD5\u9A8C\u8BC1\u6B64 jar\u3002"},
{"Unknown.password.type.", "\u672A\u77E5\u53E3\u4EE4\u7C7B\u578B: "}, {"Unknown.password.type.", "\u672A\u77E5\u53E3\u4EE4\u7C7B\u578B: "},
{"Cannot.find.environment.variable.", {"Cannot.find.environment.variable.",
"\u627E\u4E0D\u5230\u73AF\u5883\u53D8\u91CF: "}, "\u627E\u4E0D\u5230\u73AF\u5883\u53D8\u91CF: "},
......
/* /*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -348,17 +348,17 @@ public class Resources_ja extends java.util.ListResourceBundle { ...@@ -348,17 +348,17 @@ public class Resources_ja extends java.util.ListResourceBundle {
{".PATTERN.printX509Cert", {".PATTERN.printX509Cert",
"\u6240\u6709\u8005: {0}\n\u767A\u884C\u8005: {1}\n\u30B7\u30EA\u30A2\u30EB\u756A\u53F7: {2}\n\u6709\u52B9\u671F\u9593\u306E\u958B\u59CB\u65E5: {3}\u7D42\u4E86\u65E5: {4}\n\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D: {8}\n\t \u30D0\u30FC\u30B8\u30E7\u30F3: {9}"}, "\u6240\u6709\u8005: {0}\n\u767A\u884C\u8005: {1}\n\u30B7\u30EA\u30A2\u30EB\u756A\u53F7: {2}\n\u6709\u52B9\u671F\u9593\u306E\u958B\u59CB\u65E5: {3}\u7D42\u4E86\u65E5: {4}\n\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D: {8}\n\t \u30D0\u30FC\u30B8\u30E7\u30F3: {9}"},
{"What.is.your.first.and.last.name.", {"What.is.your.first.and.last.name.",
"\u59D3\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, "\u59D3\u540D\u306F\u4F55\u3067\u3059\u304B\u3002"},
{"What.is.the.name.of.your.organizational.unit.", {"What.is.the.name.of.your.organizational.unit.",
"\u7D44\u7E54\u5358\u4F4D\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, "\u7D44\u7E54\u5358\u4F4D\u540D\u306F\u4F55\u3067\u3059\u304B\u3002"},
{"What.is.the.name.of.your.organization.", {"What.is.the.name.of.your.organization.",
"\u7D44\u7E54\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, "\u7D44\u7E54\u540D\u306F\u4F55\u3067\u3059\u304B\u3002"},
{"What.is.the.name.of.your.City.or.Locality.", {"What.is.the.name.of.your.City.or.Locality.",
"\u90FD\u5E02\u540D\u307E\u305F\u306F\u5730\u57DF\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, "\u90FD\u5E02\u540D\u307E\u305F\u306F\u5730\u57DF\u540D\u306F\u4F55\u3067\u3059\u304B\u3002"},
{"What.is.the.name.of.your.State.or.Province.", {"What.is.the.name.of.your.State.or.Province.",
"\u90FD\u9053\u5E9C\u770C\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, "\u90FD\u9053\u5E9C\u770C\u540D\u307E\u305F\u306F\u5DDE\u540D\u306F\u4F55\u3067\u3059\u304B\u3002"},
{"What.is.the.two.letter.country.code.for.this.unit.", {"What.is.the.two.letter.country.code.for.this.unit.",
"\u3053\u306E\u5358\u4F4D\u306B\u8A72\u5F53\u3059\u308B2\u6587\u5B57\u306E\u56FD\u30B3\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}, "\u3053\u306E\u5358\u4F4D\u306B\u8A72\u5F53\u3059\u308B2\u6587\u5B57\u306E\u56FD\u30B3\u30FC\u30C9\u306F\u4F55\u3067\u3059\u304B\u3002"},
{"Is.name.correct.", "{0}\u3067\u3088\u308D\u3057\u3044\u3067\u3059\u304B\u3002"}, {"Is.name.correct.", "{0}\u3067\u3088\u308D\u3057\u3044\u3067\u3059\u304B\u3002"},
{"no", "\u3044\u3044\u3048"}, {"no", "\u3044\u3044\u3048"},
{"yes", "\u306F\u3044"}, {"yes", "\u306F\u3044"},
......
/* /*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -55,7 +55,7 @@ public class Resources_pt_BR extends java.util.ListResourceBundle { ...@@ -55,7 +55,7 @@ public class Resources_pt_BR extends java.util.ListResourceBundle {
{"Changes.an.entry.s.alias", {"Changes.an.entry.s.alias",
"Altera um alias de entrada"}, //-changealias "Altera um alias de entrada"}, //-changealias
{"Deletes.an.entry", {"Deletes.an.entry",
"Deleta uma entrada"}, //-delete "Exclui uma entrada"}, //-delete
{"Exports.certificate", {"Exports.certificate",
"Exporta o certificado"}, //-exportcert "Exporta o certificado"}, //-exportcert
{"Generates.a.key.pair", {"Generates.a.key.pair",
......
/* /*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -32,6 +32,7 @@ import java.security.InvalidKeyException; ...@@ -32,6 +32,7 @@ import java.security.InvalidKeyException;
import java.security.interfaces.ECKey; import java.security.interfaces.ECKey;
import java.security.interfaces.RSAKey; import java.security.interfaces.RSAKey;
import java.security.interfaces.DSAKey; import java.security.interfaces.DSAKey;
import java.security.SecureRandom;
import java.security.spec.KeySpec; import java.security.spec.KeySpec;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHKey; import javax.crypto.interfaces.DHKey;
...@@ -156,6 +157,79 @@ public final class KeyUtil { ...@@ -156,6 +157,79 @@ public final class KeyUtil {
providerName.startsWith("SunPKCS11")); providerName.startsWith("SunPKCS11"));
} }
/**
* Check the format of TLS PreMasterSecret.
* <P>
* To avoid vulnerabilities described by section 7.4.7.1, RFC 5246,
* treating incorrectly formatted message blocks and/or mismatched
* version numbers in a manner indistinguishable from correctly
* formatted RSA blocks.
*
* RFC 5246 describes the approach as :
*
* 1. Generate a string R of 48 random bytes
*
* 2. Decrypt the message to recover the plaintext M
*
* 3. If the PKCS#1 padding is not correct, or the length of message
* M is not exactly 48 bytes:
* pre_master_secret = R
* else If ClientHello.client_version <= TLS 1.0, and version
* number check is explicitly disabled:
* premaster secret = M
* else If M[0..1] != ClientHello.client_version:
* premaster secret = R
* else:
* premaster secret = M
*
* Note that #2 should have completed before the call to this method.
*
* @param clientVersion the version of the TLS protocol by which the
* client wishes to communicate during this session
* @param serverVersion the negotiated version of the TLS protocol which
* contains the lower of that suggested by the client in the client
* hello and the highest supported by the server.
* @param encoded the encoded key in its "RAW" encoding format
* @param isFailover whether or not the previous decryption of the
* encrypted PreMasterSecret message run into problem
* @return the polished PreMasterSecret key in its "RAW" encoding format
*/
public static byte[] checkTlsPreMasterSecretKey(
int clientVersion, int serverVersion, SecureRandom random,
byte[] encoded, boolean isFailOver) {
if (random == null) {
random = new SecureRandom();
}
byte[] replacer = new byte[48];
random.nextBytes(replacer);
if (!isFailOver && (encoded != null)) {
// check the length
if (encoded.length != 48) {
// private, don't need to clone the byte array.
return replacer;
}
int encodedVersion =
((encoded[0] & 0xFF) << 8) | (encoded[1] & 0xFF);
if (clientVersion != encodedVersion) {
if (clientVersion > 0x0301 || // 0x0301: TLSv1
serverVersion != encodedVersion) {
encoded = replacer;
} // Otherwise, For compatibility, we maintain the behavior
// that the version in pre_master_secret can be the
// negotiated version for TLS v1.0 and SSL v3.0.
}
// private, don't need to clone the byte array.
return encoded;
}
// private, don't need to clone the byte array.
return replacer;
}
/** /**
* Returns whether the Diffie-Hellman public key is valid or not. * Returns whether the Diffie-Hellman public key is valid or not.
* *
......
# #
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -45,4 +45,4 @@ out.extracted=extra\u00EDdo: {0} ...@@ -45,4 +45,4 @@ out.extracted=extra\u00EDdo: {0}
out.inflated=\ inflado: {0} out.inflated=\ inflado: {0}
out.size=(entrada = {0}) (salida = {1}) out.size=(entrada = {0}) (salida = {1})
usage=Sintaxis: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] archivos...\nOpciones:\n -c crear nuevo archivo\n -t crear la tabla de contenido del archivo\n -x extraer el archive mencionado (o todos) del archivo\n -u actualizar archive existente\n -v generar salida detallada de los datos de salida est\u00E1ndar\n -f especificar nombre de archive de almacenamiento\n -m incluir informaci\u00F3n de manifiesto del archive de manifiesto especificado\n -n realizar normalizaci\u00F3n de Pack200 despu\u00E9s de crear un nuevo archivo\n -e especificar punto de entrada de la aplicaci\u00F3n para la aplicaci\u00F3n aut\u00F3noma \n que se incluye dentro de un archive jar ejecutable\n -0 s\u00F3lo almacenar; no utilizar compresi\u00F3n ZIP\n -M no crear un archive de manifiesto para las entradas\n -i generar informaci\u00F3n de \u00EDndice para los archives jar especificados\n -C cambiar al directorio especificado e incluir el archivo siguiente\nSi alg\u00FAn archivo es un directorio, se procesar\u00E1 de forma recurrente.\nEl nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\nespecifican en el mismo orden que los indicadores 'm', 'f' y 'e'.\n\nEjemplo 1: para archivar archivos de dos clases en un archivo llamado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEjemplo 2: utilice un archivo de manifiesto existente 'mymanifest' y archive todos los\n archivos del directorio foo/ en 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n usage=Sintaxis: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] archivos...\nOpciones:\n -c crear nuevo archivo\n -t crear la tabla de contenido del archivo\n -x extraer el archive mencionado (o todos) del archivo\n -u actualizar archive existente\n -v generar salida detallada de los datos de salida est\u00E1ndar\n -f especificar nombre de archive de almacenamiento\n -m incluir informaci\u00F3n de manifiesto del archive de manifiesto especificado\n -n realizar normalizaci\u00F3n de Pack200 despu\u00E9s de crear un nuevo archivo\n -e especificar punto de entrada de la aplicaci\u00F3n para la aplicaci\u00F3n aut\u00F3noma \n que se incluye dentro de un archive jar ejecutable\n -0 s\u00F3lo almacenar; no utilizar compresi\u00F3n ZIP\n -M no crear un archive de manifiesto para las entradas\n -i generar informaci\u00F3n de \u00EDndice para los archives jar especificados\n -C cambiar al directorio especificado e incluir el archivo siguiente\nSi alg\u00FAn archivo es un directorio, se procesar\u00E1 de forma recurrente.\nEl nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\nespecifican en el mismo orden que los indicadores 'm', 'f' y 'e'.\n\nEjemplo 1: para archivar archivos de dos clases en un archivo llamado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEjemplo 2: utilice un archivo de manifiesto existente 'mymanifest' y archive todos los\n archivos del directorio foo/ en 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
...@@ -31,7 +31,7 @@ BORDERED_COMPONENT_MORE_OR_LESS_BUTTON_TOOLTIP=\u8868\u793A\u3059\u308B\u60C5\u5 ...@@ -31,7 +31,7 @@ BORDERED_COMPONENT_MORE_OR_LESS_BUTTON_TOOLTIP=\u8868\u793A\u3059\u308B\u60C5\u5
CPU_USAGE=CPU\u4F7F\u7528\u7387 CPU_USAGE=CPU\u4F7F\u7528\u7387
CPU_USAGE_FORMAT=CPU\u4F7F\u7528\u7387: {0}% CPU_USAGE_FORMAT=CPU\u4F7F\u7528\u7387: {0}%
CANCEL=\u53D6\u6D88 CANCEL=\u53D6\u6D88
CASCADE=\u91CD\u306D\u3066\u8868\u793A(&C) CASCADE=\u30AB\u30B9\u30B1\u30FC\u30C9\u8868\u793A(&C)
CHART_COLON=\u30C1\u30E3\u30FC\u30C8(&C): CHART_COLON=\u30C1\u30E3\u30FC\u30C8(&C):
CLASS_PATH=\u30AF\u30E9\u30B9\u30D1\u30B9 CLASS_PATH=\u30AF\u30E9\u30B9\u30D1\u30B9
CLASS_NAME=ClassName CLASS_NAME=ClassName
...@@ -52,7 +52,7 @@ CONNECT_DIALOG_MASTHEAD_TITLE=\u65B0\u898F\u63A5\u7D9A ...@@ -52,7 +52,7 @@ CONNECT_DIALOG_MASTHEAD_TITLE=\u65B0\u898F\u63A5\u7D9A
CONNECT_DIALOG_STATUS_BAR_ACCESSIBLE_NAME=\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u30D0\u30FC CONNECT_DIALOG_STATUS_BAR_ACCESSIBLE_NAME=\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u30D0\u30FC
CONNECT_DIALOG_TITLE=JConsole: \u65B0\u898F\u63A5\u7D9A CONNECT_DIALOG_TITLE=JConsole: \u65B0\u898F\u63A5\u7D9A
CONNECTED_PUNCTUATION_CLICK_TO_DISCONNECT_=\u63A5\u7D9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u5207\u65AD\u3057\u307E\u3059\u3002 CONNECTED_PUNCTUATION_CLICK_TO_DISCONNECT_=\u63A5\u7D9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u5207\u65AD\u3057\u307E\u3059\u3002
CONNECTION_FAILED=\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F CONNECTION_FAILED=\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F
CONNECTION=\u63A5\u7D9A(&C) CONNECTION=\u63A5\u7D9A(&C)
CONNECTION_NAME=\u63A5\u7D9A\u540D CONNECTION_NAME=\u63A5\u7D9A\u540D
CONNECTION_NAME__DISCONNECTED_={0} (\u5207\u65AD\u6E08) CONNECTION_NAME__DISCONNECTED_={0} (\u5207\u65AD\u6E08)
...@@ -88,8 +88,8 @@ FILE_CHOOSER_FILE_EXISTS_MESSAGE=<html><center>\u30D5\u30A1\u30A4\u30EB\u306F\u3 ...@@ -88,8 +88,8 @@ FILE_CHOOSER_FILE_EXISTS_MESSAGE=<html><center>\u30D5\u30A1\u30A4\u30EB\u306F\u3
FILE_CHOOSER_FILE_EXISTS_OK_OPTION=\u7F6E\u63DB FILE_CHOOSER_FILE_EXISTS_OK_OPTION=\u7F6E\u63DB
FILE_CHOOSER_FILE_EXISTS_TITLE=\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059 FILE_CHOOSER_FILE_EXISTS_TITLE=\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059
FILE_CHOOSER_SAVED_FILE=<html>\u30D5\u30A1\u30A4\u30EB\u306B\u4FDD\u5B58\u3057\u307E\u3057\u305F:<br>{0}<br>({1}\u30D0\u30A4\u30C8) FILE_CHOOSER_SAVED_FILE=<html>\u30D5\u30A1\u30A4\u30EB\u306B\u4FDD\u5B58\u3057\u307E\u3057\u305F:<br>{0}<br>({1}\u30D0\u30A4\u30C8)
FILE_CHOOSER_SAVE_FAILED_MESSAGE=<html><center>\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F:<br>{0}<br>{1} FILE_CHOOSER_SAVE_FAILED_MESSAGE=<html><center>\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u4FDD\u5B58\u304C\u5931\u6557\u3057\u307E\u3057\u305F:<br>{0}<br>{1}
FILE_CHOOSER_SAVE_FAILED_TITLE=\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F FILE_CHOOSER_SAVE_FAILED_TITLE=\u4FDD\u5B58\u304C\u5931\u6557\u3057\u307E\u3057\u305F
FREE_PHYSICAL_MEMORY=\u7A7A\u304D\u7269\u7406\u30E1\u30E2\u30EA\u30FC FREE_PHYSICAL_MEMORY=\u7A7A\u304D\u7269\u7406\u30E1\u30E2\u30EA\u30FC
FREE_SWAP_SPACE=\u7A7A\u304D\u30B9\u30EF\u30C3\u30D7\u30FB\u30B9\u30DA\u30FC\u30B9 FREE_SWAP_SPACE=\u7A7A\u304D\u30B9\u30EF\u30C3\u30D7\u30FB\u30B9\u30DA\u30FC\u30B9
GARBAGE_COLLECTOR=\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30BF GARBAGE_COLLECTOR=\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30BF
...@@ -232,7 +232,7 @@ THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u60C5\u5831 ...@@ -232,7 +232,7 @@ THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u60C5\u5831
THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u6570\u306E\u30C1\u30E3\u30FC\u30C8\u3002 THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u6570\u306E\u30C1\u30E3\u30FC\u30C8\u3002
THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[\u30B9\u30EC\u30C3\u30C9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093] THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[\u30B9\u30EC\u30C3\u30C9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093]
THRESHOLD=\u3057\u304D\u3044\u5024 THRESHOLD=\u3057\u304D\u3044\u5024
TILE=\u4E26\u3079\u3066\u8868\u793A(&T) TILE=\u30BF\u30A4\u30EB\u8868\u793A(&T)
TIME_RANGE_COLON=\u6642\u9593\u7BC4\u56F2(&T): TIME_RANGE_COLON=\u6642\u9593\u7BC4\u56F2(&T):
TIME=\u6642\u9593 TIME=\u6642\u9593
TIME_STAMP=TimeStamp TIME_STAMP=TimeStamp
...@@ -250,14 +250,14 @@ UNKNOWN_HOST=\u4E0D\u660E\u306A\u30DB\u30B9\u30C8: {0} ...@@ -250,14 +250,14 @@ UNKNOWN_HOST=\u4E0D\u660E\u306A\u30DB\u30B9\u30C8: {0}
UNREGISTER=\u767B\u9332\u89E3\u9664 UNREGISTER=\u767B\u9332\u89E3\u9664
UPTIME=\u7A3C\u50CD\u6642\u9593 UPTIME=\u7A3C\u50CD\u6642\u9593
USAGE_THRESHOLD=\u4F7F\u7528\u3057\u304D\u3044\u5024 USAGE_THRESHOLD=\u4F7F\u7528\u3057\u304D\u3044\u5024
REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &&lt;hostname&&gt;:&&lt;port&&gt;\u307E\u305F\u306Fservice:jmx:&&lt;protocol&&gt;:&&lt;sap&&gt; REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &&lt;hostname&&gt;:&&lt;port&&gt; OR service:jmx:&&lt;protocol&&gt;:&&lt;sap&&gt;
USED=\u4F7F\u7528\u6E08 USED=\u4F7F\u7528\u6E08
USERNAME_COLON_=\u30E6\u30FC\u30B6\u30FC\u540D(&U): USERNAME_COLON_=\u30E6\u30FC\u30B6\u30FC\u540D(&U):
USERNAME_ACCESSIBLE_NAME=\u30E6\u30FC\u30B6\u30FC\u540D USERNAME_ACCESSIBLE_NAME=\u30E6\u30FC\u30B6\u30FC\u540D
USER_DATA=UserData USER_DATA=UserData
VIRTUAL_MACHINE=\u4EEE\u60F3\u30DE\u30B7\u30F3 VIRTUAL_MACHINE=\u4EEE\u60F3\u30DE\u30B7\u30F3
VM_ARGUMENTS=VM\u5F15\u6570 VM_ARGUMENTS=VM\u5F15\u6570
VMINTERNAL_FRAME_ACCESSIBLE_DESCRIPTION=Java\u4EEE\u60F3\u30DE\u30B7\u30F3\u306E\u30E2\u30CB\u30BF\u30FC\u7528\u306E\u5185\u90E8\u30D5\u30EC\u30FC\u30E0 VMINTERNAL_FRAME_ACCESSIBLE_DESCRIPTION=Java\u4EEE\u60F3\u30DE\u30B7\u30F3\u306E\u30E2\u30CB\u30BF\u30EA\u30F3\u30B0\u7528\u306E\u5185\u90E8\u30D5\u30EC\u30FC\u30E0
VALUE=\u5024 VALUE=\u5024
VENDOR=\u30D9\u30F3\u30C0\u30FC VENDOR=\u30D9\u30F3\u30C0\u30FC
VERBOSE_OUTPUT=\u8A73\u7D30\u51FA\u529B VERBOSE_OUTPUT=\u8A73\u7D30\u51FA\u529B
...@@ -266,9 +266,9 @@ VIEW=\u8868\u793A ...@@ -266,9 +266,9 @@ VIEW=\u8868\u793A
WINDOW=\u30A6\u30A3\u30F3\u30C9\u30A6(&W) WINDOW=\u30A6\u30A3\u30F3\u30C9\u30A6(&W)
WINDOWS=\u30A6\u30A3\u30F3\u30C9\u30A6 WINDOWS=\u30A6\u30A3\u30F3\u30C9\u30A6
WRITABLE=\u66F8\u8FBC\u307F\u53EF\u80FD WRITABLE=\u66F8\u8FBC\u307F\u53EF\u80FD
CONNECTION_FAILED1=\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: \u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002 CONNECTION_FAILED1=\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F: \u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
CONNECTION_FAILED2={0}\u3078\u306E\u63A5\u7D9A\u304C\u6210\u529F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br>\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u307E\u3059\u304B\u3002 CONNECTION_FAILED2={0}\u3078\u306E\u63A5\u7D9A\u304C\u6210\u529F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br>\u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
CONNECTION_FAILED_SSL1=\u4FDD\u8B77\u3055\u308C\u305F\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u4FDD\u8B77\u305B\u305A\u306B\u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002 CONNECTION_FAILED_SSL1=\u30BB\u30AD\u30E5\u30A2\u306A\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u975E\u30BB\u30AD\u30E5\u30A2\u3067\u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
CONNECTION_FAILED_SSL2=SSL\u3092\u4F7F\u7528\u3057\u3066{0}\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002<br>SSL\u306A\u3057\u3067\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002<br>(\u30E6\u30FC\u30B6\u30FC\u540D\u304A\u3088\u3073\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u30D7\u30EC\u30FC\u30F3\u30FB\u30C6\u30AD\u30B9\u30C8\u3067\u9001\u4FE1\u3055\u308C\u307E\u3059\u3002) CONNECTION_FAILED_SSL2=SSL\u3092\u4F7F\u7528\u3057\u3066{0}\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002<br>SSL\u306A\u3057\u3067\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002<br>(\u30E6\u30FC\u30B6\u30FC\u540D\u304A\u3088\u3073\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u30D7\u30EC\u30FC\u30F3\u30FB\u30C6\u30AD\u30B9\u30C8\u3067\u9001\u4FE1\u3055\u308C\u307E\u3059\u3002)
CONNECTION_LOST1=\u63A5\u7D9A\u304C\u5931\u308F\u308C\u307E\u3057\u305F: \u518D\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002 CONNECTION_LOST1=\u63A5\u7D9A\u304C\u5931\u308F\u308C\u307E\u3057\u305F: \u518D\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002
CONNECTING_TO1={0}\u306B\u63A5\u7D9A\u4E2D CONNECTING_TO1={0}\u306B\u63A5\u7D9A\u4E2D
...@@ -279,4 +279,4 @@ EXPAND=\u5C55\u958B ...@@ -279,4 +279,4 @@ EXPAND=\u5C55\u958B
KBYTES={0} KB KBYTES={0} KB
PLOT=\u30D7\u30ED\u30C3\u30C8 PLOT=\u30D7\u30ED\u30C3\u30C8
VISUALIZE=\u8996\u899A\u5316 VISUALIZE=\u8996\u899A\u5316
ZZ_USAGE_TEXT=\u4F7F\u7528\u65B9\u6CD5: {0} [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]\n\n -interval \u66F4\u65B0\u9593\u9694\u3092n\u79D2\u306B\u8A2D\u5B9A\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8\u306F4\u79D2)\n -notile \u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u6700\u521D\u306B\u4E26\u3079\u3066\u8868\u793A\u3057\u306A\u3044(2\u3064\u4EE5\u4E0A\u306E\u63A5\u7D9A\u306B\u3064\u3044\u3066)\n -pluginpath JConsole\u304C\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u53C2\u7167\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3059\u308B\u30D1\u30B9\u3092\u6307\u5B9A\u3059\u308B\n -version \u30D7\u30ED\u30B0\u30E9\u30E0\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3059\u308B\n\n connection = pid || host:port || JMX URL (service:jmx:<protocol>://...)\n pid \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D7\u30ED\u30BB\u30B9\u306E\u30D7\u30ED\u30BB\u30B9ID\n host \u30EA\u30E2\u30FC\u30C8\u30FB\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9\n port \u30EA\u30E2\u30FC\u30C8\u63A5\u7D9A\u7528\u306E\u30DD\u30FC\u30C8\u756A\u53F7\n\n -J JConsole\u304C\u5B9F\u884C\u4E2D\u306EJava\u4EEE\u60F3\u30DE\u30B7\u30F3\u3078\u306E\n \u5165\u529B\u5F15\u6570\u3092\u6307\u5B9A\u3059\u308B ZZ_USAGE_TEXT=\u4F7F\u7528\u65B9\u6CD5: {0} [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]\n\n -interval \u66F4\u65B0\u9593\u9694\u3092n\u79D2\u306B\u8A2D\u5B9A\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8\u306F4\u79D2)\n -notile \u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u6700\u521D\u306B\u30BF\u30A4\u30EB\u8868\u793A\u3057\u306A\u3044(2\u3064\u4EE5\u4E0A\u306E\u63A5\u7D9A\u306B\u3064\u3044\u3066)\n -pluginpath JConsole\u304C\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u53C2\u7167\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3059\u308B\u30D1\u30B9\u3092\u6307\u5B9A\u3059\u308B\n -version \u30D7\u30ED\u30B0\u30E9\u30E0\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3059\u308B\n\n connection = pid || host:port || JMX URL (service:jmx:<protocol>://...)\n pid \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D7\u30ED\u30BB\u30B9\u306E\u30D7\u30ED\u30BB\u30B9ID\n host \u30EA\u30E2\u30FC\u30C8\u30FB\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9\n port \u30EA\u30E2\u30FC\u30C8\u63A5\u7D9A\u7528\u306E\u30DD\u30FC\u30C8\u756A\u53F7\n\n -J JConsole\u304C\u5B9F\u884C\u4E2D\u306EJava\u4EEE\u60F3\u30DE\u30B7\u30F3\u3078\u306E\n \u5165\u529B\u5F15\u6570\u3092\u6307\u5B9A\u3059\u308B
...@@ -25,10 +25,23 @@ ...@@ -25,10 +25,23 @@
package java.lang; package java.lang;
import java.io.*; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.Executors;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.security.AccessController; import java.security.AccessController;
import static java.security.AccessController.doPrivileged;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
/* java.lang.Process subclass in the UNIX environment. /* java.lang.Process subclass in the UNIX environment.
* *
...@@ -108,14 +121,15 @@ final class UNIXProcess extends Process { ...@@ -108,14 +121,15 @@ final class UNIXProcess extends Process {
* - fork(2) and exec(2) * - fork(2) and exec(2)
* - posix_spawn(2) * - posix_spawn(2)
* *
* @param std_fds array of file descriptors. Indexes 0, 1, and * @param fds an array of three file descriptors.
* 2 correspond to standard input, standard output and * Indexes 0, 1, and 2 correspond to standard input,
* standard error, respectively. On input, a value of -1 * standard output and standard error, respectively. On
* means to create a pipe to connect child and parent * input, a value of -1 means to create a pipe to connect
* processes. On output, a value which is not -1 is the * child and parent processes. On output, a value which
* parent pipe fd corresponding to the pipe which has * is not -1 is the parent pipe fd corresponding to the
* been created. An element of this array is -1 on input * pipe which has been created. An element of this array
* if and only if it is <em>not</em> -1 on output. * is -1 on input if and only if it is <em>not</em> -1 on
* output.
* @return the pid of the subprocess * @return the pid of the subprocess
*/ */
private native int forkAndExec(int mode, byte[] helperpath, private native int forkAndExec(int mode, byte[] helperpath,
...@@ -123,15 +137,51 @@ final class UNIXProcess extends Process { ...@@ -123,15 +137,51 @@ final class UNIXProcess extends Process {
byte[] argBlock, int argc, byte[] argBlock, int argc,
byte[] envBlock, int envc, byte[] envBlock, int envc,
byte[] dir, byte[] dir,
int[] std_fds, int[] fds,
boolean redirectErrorStream) boolean redirectErrorStream)
throws IOException; throws IOException;
/**
* The thread factory used to create "process reaper" daemon threads.
*/
private static class ProcessReaperThreadFactory implements ThreadFactory {
private final static ThreadGroup group = getRootThreadGroup();
private static ThreadGroup getRootThreadGroup() {
return doPrivileged(new PrivilegedAction<ThreadGroup> () {
public ThreadGroup run() {
ThreadGroup root = Thread.currentThread().getThreadGroup();
while (root.getParent() != null)
root = root.getParent();
return root;
}});
}
public Thread newThread(Runnable grimReaper) {
// Our thread stack requirement is quite modest.
Thread t = new Thread(group, grimReaper, "process reaper", 32768);
t.setDaemon(true);
// A small attempt (probably futile) to avoid priority inversion
t.setPriority(Thread.MAX_PRIORITY);
return t;
}
}
/**
* The thread pool of "process reaper" daemon threads.
*/
private static final Executor processReaperExecutor =
doPrivileged(new PrivilegedAction<Executor>() {
public Executor run() {
return Executors.newCachedThreadPool
(new ProcessReaperThreadFactory());
}});
UNIXProcess(final byte[] prog, UNIXProcess(final byte[] prog,
final byte[] argBlock, int argc, final byte[] argBlock, int argc,
final byte[] envBlock, int envc, final byte[] envBlock, int envc,
final byte[] dir, final byte[] dir,
final int[] std_fds, final int[] fds,
final boolean redirectErrorStream) final boolean redirectErrorStream)
throws IOException { throws IOException {
pid = forkAndExec(launchMechanism.value, pid = forkAndExec(launchMechanism.value,
...@@ -140,63 +190,62 @@ final class UNIXProcess extends Process { ...@@ -140,63 +190,62 @@ final class UNIXProcess extends Process {
argBlock, argc, argBlock, argc,
envBlock, envc, envBlock, envc,
dir, dir,
std_fds, fds,
redirectErrorStream); redirectErrorStream);
java.security.AccessController.doPrivileged( try {
new java.security.PrivilegedAction<Void>() { public Void run() { doPrivileged(
if (std_fds[0] == -1) new PrivilegedExceptionAction<Void>() {
stdin_stream = ProcessBuilder.NullOutputStream.INSTANCE; public Void run() throws IOException {
else { initStreams(fds);
FileDescriptor stdin_fd = new FileDescriptor(); return null;
fdAccess.set(stdin_fd, std_fds[0]); }
stdin_stream = new BufferedOutputStream( });
new FileOutputStream(stdin_fd)); } catch (PrivilegedActionException ex) {
} throw (IOException) ex.getException();
}
}
if (std_fds[1] == -1) void initStreams(int[] fds) throws IOException {
stdout_stream = ProcessBuilder.NullInputStream.INSTANCE; if (fds[0] == -1)
else { stdin_stream = ProcessBuilder.NullOutputStream.INSTANCE;
FileDescriptor stdout_fd = new FileDescriptor(); else {
fdAccess.set(stdout_fd, std_fds[1]); FileDescriptor stdin_fd = new FileDescriptor();
stdout_inner_stream = new DeferredCloseInputStream(stdout_fd); fdAccess.set(stdin_fd, fds[0]);
stdout_stream = new BufferedInputStream(stdout_inner_stream); stdin_stream = new BufferedOutputStream(
} new FileOutputStream(stdin_fd));
}
if (std_fds[2] == -1) if (fds[1] == -1)
stderr_stream = ProcessBuilder.NullInputStream.INSTANCE; stdout_stream = ProcessBuilder.NullInputStream.INSTANCE;
else { else {
FileDescriptor stderr_fd = new FileDescriptor(); FileDescriptor stdout_fd = new FileDescriptor();
fdAccess.set(stderr_fd, std_fds[2]); fdAccess.set(stdout_fd, fds[1]);
stderr_stream = new DeferredCloseInputStream(stderr_fd); stdout_inner_stream = new DeferredCloseInputStream(stdout_fd);
} stdout_stream = new BufferedInputStream(stdout_inner_stream);
}
return null; }}); if (fds[2] == -1)
stderr_stream = ProcessBuilder.NullInputStream.INSTANCE;
/* else {
* For each subprocess forked a corresponding reaper thread FileDescriptor stderr_fd = new FileDescriptor();
* is started. That thread is the only thread which waits fdAccess.set(stderr_fd, fds[2]);
* for the subprocess to terminate and it doesn't hold any stderr_stream = new DeferredCloseInputStream(stderr_fd);
* locks while doing so. This design allows waitFor() and }
* exitStatus() to be safely executed in parallel (and they
* need no native code). processReaperExecutor.execute(new Runnable() {
*/ public void run() {
int exitcode = waitForProcessExit(pid);
java.security.AccessController.doPrivileged( UNIXProcess.this.processExited(exitcode);
new java.security.PrivilegedAction<Void>() { public Void run() { }});
Thread t = new Thread("process reaper") { }
public void run() {
int res = waitForProcessExit(pid); void processExited(int exitcode) {
synchronized (UNIXProcess.this) { synchronized (this) {
hasExited = true; this.exitcode = exitcode;
exitcode = res; hasExited = true;
UNIXProcess.this.notifyAll(); notifyAll();
} }
}
};
t.setDaemon(true);
t.start();
return null; }});
} }
public OutputStream getOutputStream() { public OutputStream getOutputStream() {
......
...@@ -375,11 +375,12 @@ public abstract class UnixFileSystemProvider ...@@ -375,11 +375,12 @@ public abstract class UnixFileSystemProvider
UnixPath dir = UnixPath.toUnixPath(obj); UnixPath dir = UnixPath.toUnixPath(obj);
dir.checkWrite(); dir.checkWrite();
int mode = UnixFileModeAttribute int mode = UnixFileModeAttribute.toUnixMode(UnixFileModeAttribute.ALL_PERMISSIONS, attrs);
.toUnixMode(UnixFileModeAttribute.ALL_PERMISSIONS, attrs);
try { try {
mkdir(dir, mode); mkdir(dir, mode);
} catch (UnixException x) { } catch (UnixException x) {
if (x.errno() == EISDIR)
throw new FileAlreadyExistsException(dir.toString());
x.rethrowAsIOException(dir); x.rethrowAsIOException(dir);
} }
} }
......
...@@ -482,7 +482,7 @@ class UnixPath ...@@ -482,7 +482,7 @@ class UnixPath
@Override @Override
public Path normalize() { public Path normalize() {
final int count = getNameCount(); final int count = getNameCount();
if (count == 0) if (count == 0 || isEmpty())
return this; return this;
boolean[] ignore = new boolean[count]; // true => ignore name boolean[] ignore = new boolean[count]; // true => ignore name
......
...@@ -62,7 +62,7 @@ static Atom decor_list[9]; ...@@ -62,7 +62,7 @@ static Atom decor_list[9];
#define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b))
#endif #endif
void jboolean
awtJNI_ThreadYield(JNIEnv *env) { awtJNI_ThreadYield(JNIEnv *env) {
static jclass threadClass = NULL; static jclass threadClass = NULL;
...@@ -76,7 +76,7 @@ awtJNI_ThreadYield(JNIEnv *env) { ...@@ -76,7 +76,7 @@ awtJNI_ThreadYield(JNIEnv *env) {
Boolean err = FALSE; Boolean err = FALSE;
if (threadClass == NULL) { if (threadClass == NULL) {
jclass tc = (*env)->FindClass(env, "java/lang/Thread"); jclass tc = (*env)->FindClass(env, "java/lang/Thread");
CHECK_NULL(tc); CHECK_NULL_RETURN(tc, JNI_FALSE);
threadClass = (*env)->NewGlobalRef(env, tc); threadClass = (*env)->NewGlobalRef(env, tc);
(*env)->DeleteLocalRef(env, tc); (*env)->DeleteLocalRef(env, tc);
if (threadClass != NULL) { if (threadClass != NULL) {
...@@ -92,10 +92,11 @@ awtJNI_ThreadYield(JNIEnv *env) { ...@@ -92,10 +92,11 @@ awtJNI_ThreadYield(JNIEnv *env) {
err = TRUE; err = TRUE;
} }
if (err) { if (err) {
return; return JNI_FALSE;
} }
} /* threadClass == NULL*/ } /* threadClass == NULL*/
(*env)->CallStaticVoidMethod(env, threadClass, yieldMethodID); (*env)->CallStaticVoidMethod(env, threadClass, yieldMethodID);
DASSERT(!((*env)->ExceptionOccurred(env))); DASSERT(!((*env)->ExceptionOccurred(env)));
return JNI_TRUE;
} /* awtJNI_ThreadYield() */ } /* awtJNI_ThreadYield() */
/* /*
* Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -78,7 +78,7 @@ struct DPos { ...@@ -78,7 +78,7 @@ struct DPos {
int32_t echoC; int32_t echoC;
}; };
extern void awtJNI_ThreadYield(JNIEnv *env); extern jboolean awtJNI_ThreadYield(JNIEnv *env);
/* /*
* Functions for accessing fields by name and signature * Functions for accessing fields by name and signature
......
/* /*
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "awt_Component.h" #include "awt_Component.h"
#include "awt_MenuComponent.h" #include "awt_MenuComponent.h"
#include "awt_Font.h" #include "awt_Font.h"
#include "awt_util.h"
#include "sun_awt_X11_XToolkit.h" #include "sun_awt_X11_XToolkit.h"
#include "java_awt_SystemColor.h" #include "java_awt_SystemColor.h"
...@@ -76,6 +77,8 @@ struct MenuComponentIDs menuComponentIDs; ...@@ -76,6 +77,8 @@ struct MenuComponentIDs menuComponentIDs;
#ifndef HEADLESS #ifndef HEADLESS
extern Display* awt_init_Display(JNIEnv *env, jobject this); extern Display* awt_init_Display(JNIEnv *env, jobject this);
extern void freeNativeStringArray(char **array, long length);
extern char** stringArrayToNative(JNIEnv *env, jobjectArray array, jsize * ret_length);
struct XFontPeerIDs xFontPeerIDs; struct XFontPeerIDs xFontPeerIDs;
...@@ -103,9 +106,11 @@ Java_sun_awt_X11_XToolkit_initIDs ...@@ -103,9 +106,11 @@ Java_sun_awt_X11_XToolkit_initIDs
(JNIEnv *env, jclass clazz) (JNIEnv *env, jclass clazz)
{ {
jfieldID fid = (*env)->GetStaticFieldID(env, clazz, "numLockMask", "I"); jfieldID fid = (*env)->GetStaticFieldID(env, clazz, "numLockMask", "I");
CHECK_NULL(fid);
awt_NumLockMask = (*env)->GetStaticIntField(env, clazz, fid); awt_NumLockMask = (*env)->GetStaticIntField(env, clazz, fid);
DTRACE_PRINTLN1("awt_NumLockMask = %u", awt_NumLockMask); DTRACE_PRINTLN1("awt_NumLockMask = %u", awt_NumLockMask);
fid = (*env)->GetStaticFieldID(env, clazz, "modLockIsShiftLock", "I"); fid = (*env)->GetStaticFieldID(env, clazz, "modLockIsShiftLock", "I");
CHECK_NULL(fid);
awt_ModLockIsShiftLock = (*env)->GetStaticIntField(env, clazz, fid) != 0 ? True : False; awt_ModLockIsShiftLock = (*env)->GetStaticIntField(env, clazz, fid) != 0 ? True : False;
} }
...@@ -173,21 +178,31 @@ Java_java_awt_Component_initIDs ...@@ -173,21 +178,31 @@ Java_java_awt_Component_initIDs
componentIDs.x = (*env)->GetFieldID(env, cls, "x", "I"); componentIDs.x = (*env)->GetFieldID(env, cls, "x", "I");
CHECK_NULL(componentIDs.x);
componentIDs.y = (*env)->GetFieldID(env, cls, "y", "I"); componentIDs.y = (*env)->GetFieldID(env, cls, "y", "I");
CHECK_NULL(componentIDs.y);
componentIDs.width = (*env)->GetFieldID(env, cls, "width", "I"); componentIDs.width = (*env)->GetFieldID(env, cls, "width", "I");
CHECK_NULL(componentIDs.width);
componentIDs.height = (*env)->GetFieldID(env, cls, "height", "I"); componentIDs.height = (*env)->GetFieldID(env, cls, "height", "I");
CHECK_NULL(componentIDs.height);
componentIDs.isPacked = (*env)->GetFieldID(env, cls, "isPacked", "Z"); componentIDs.isPacked = (*env)->GetFieldID(env, cls, "isPacked", "Z");
CHECK_NULL(componentIDs.isPacked);
componentIDs.peer = componentIDs.peer =
(*env)->GetFieldID(env, cls, "peer", "Ljava/awt/peer/ComponentPeer;"); (*env)->GetFieldID(env, cls, "peer", "Ljava/awt/peer/ComponentPeer;");
CHECK_NULL(componentIDs.peer);
componentIDs.background = componentIDs.background =
(*env)->GetFieldID(env, cls, "background", "Ljava/awt/Color;"); (*env)->GetFieldID(env, cls, "background", "Ljava/awt/Color;");
CHECK_NULL(componentIDs.background);
componentIDs.foreground = componentIDs.foreground =
(*env)->GetFieldID(env, cls, "foreground", "Ljava/awt/Color;"); (*env)->GetFieldID(env, cls, "foreground", "Ljava/awt/Color;");
CHECK_NULL(componentIDs.foreground);
componentIDs.graphicsConfig = componentIDs.graphicsConfig =
(*env)->GetFieldID(env, cls, "graphicsConfig", (*env)->GetFieldID(env, cls, "graphicsConfig",
"Ljava/awt/GraphicsConfiguration;"); "Ljava/awt/GraphicsConfiguration;");
CHECK_NULL(componentIDs.graphicsConfig);
componentIDs.name = componentIDs.name =
(*env)->GetFieldID(env, cls, "name", "Ljava/lang/String;"); (*env)->GetFieldID(env, cls, "name", "Ljava/lang/String;");
CHECK_NULL(componentIDs.name);
/* Use _NoClientCode() methods for trusted methods, so that we /* Use _NoClientCode() methods for trusted methods, so that we
* know that we are not invoking client code on trusted threads * know that we are not invoking client code on trusted threads
...@@ -195,19 +210,20 @@ Java_java_awt_Component_initIDs ...@@ -195,19 +210,20 @@ Java_java_awt_Component_initIDs
componentIDs.getParent = componentIDs.getParent =
(*env)->GetMethodID(env, cls, "getParent_NoClientCode", (*env)->GetMethodID(env, cls, "getParent_NoClientCode",
"()Ljava/awt/Container;"); "()Ljava/awt/Container;");
CHECK_NULL(componentIDs.getParent);
componentIDs.getLocationOnScreen = componentIDs.getLocationOnScreen =
(*env)->GetMethodID(env, cls, "getLocationOnScreen_NoTreeLock", (*env)->GetMethodID(env, cls, "getLocationOnScreen_NoTreeLock",
"()Ljava/awt/Point;"); "()Ljava/awt/Point;");
CHECK_NULL(componentIDs.getLocationOnScreen);
keyclass = (*env)->FindClass(env, "java/awt/event/KeyEvent"); keyclass = (*env)->FindClass(env, "java/awt/event/KeyEvent");
if (JNU_IsNull(env, keyclass)) { CHECK_NULL(keyclass);
return;
}
componentIDs.isProxyActive = componentIDs.isProxyActive =
(*env)->GetFieldID(env, keyclass, "isProxyActive", (*env)->GetFieldID(env, keyclass, "isProxyActive",
"Z"); "Z");
CHECK_NULL(componentIDs.isProxyActive);
componentIDs.appContext = componentIDs.appContext =
(*env)->GetFieldID(env, cls, "appContext", (*env)->GetFieldID(env, cls, "appContext",
...@@ -339,7 +355,7 @@ JNIEXPORT void JNICALL Java_java_awt_Dialog_initIDs (JNIEnv *env, jclass cls) ...@@ -339,7 +355,7 @@ JNIEXPORT void JNICALL Java_java_awt_Dialog_initIDs (JNIEnv *env, jclass cls)
static void waitForEvents(JNIEnv *, jlong); static void waitForEvents(JNIEnv *, jlong);
static void awt_pipe_init(); static void awt_pipe_init();
static void processOneEvent(XtInputMask iMask); static void processOneEvent(XtInputMask iMask);
static void performPoll(JNIEnv *, jlong); static Boolean performPoll(JNIEnv *, jlong);
static void wakeUp(); static void wakeUp();
static void update_poll_timeout(int timeout_control); static void update_poll_timeout(int timeout_control);
static uint32_t get_poll_timeout(jlong nextTaskTime); static uint32_t get_poll_timeout(jlong nextTaskTime);
...@@ -608,11 +624,13 @@ static uint32_t get_poll_timeout(jlong nextTaskTime) ...@@ -608,11 +624,13 @@ static uint32_t get_poll_timeout(jlong nextTaskTime)
*/ */
void void
waitForEvents(JNIEnv *env, jlong nextTaskTime) { waitForEvents(JNIEnv *env, jlong nextTaskTime) {
performPoll(env, nextTaskTime); if (performPoll(env, nextTaskTime)
if ((awt_next_flush_time > 0) && (awtJNI_TimeMillis() >= awt_next_flush_time)) { && (awt_next_flush_time > 0)
XFlush(awt_display); && (awtJNI_TimeMillis() >= awt_next_flush_time)) {
awt_last_flush_time = awt_next_flush_time;
awt_next_flush_time = 0LL; XFlush(awt_display);
awt_last_flush_time = awt_next_flush_time;
awt_next_flush_time = 0LL;
} }
} /* waitForEvents() */ } /* waitForEvents() */
...@@ -646,7 +664,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XToolkit_wakeup_1poll (JNIEnv *env, jcla ...@@ -646,7 +664,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XToolkit_wakeup_1poll (JNIEnv *env, jcla
* *
* The fdAWTPipe will be empty when this returns. * The fdAWTPipe will be empty when this returns.
*/ */
static void static Boolean
performPoll(JNIEnv *env, jlong nextTaskTime) { performPoll(JNIEnv *env, jlong nextTaskTime) {
static Bool pollFdsInited = False; static Bool pollFdsInited = False;
static char read_buf[AWT_POLL_BUFSIZE + 1]; /* dummy buf to empty pipe */ static char read_buf[AWT_POLL_BUFSIZE + 1]; /* dummy buf to empty pipe */
...@@ -673,7 +691,9 @@ performPoll(JNIEnv *env, jlong nextTaskTime) { ...@@ -673,7 +691,9 @@ performPoll(JNIEnv *env, jlong nextTaskTime) {
/* ACTUALLY DO THE POLL() */ /* ACTUALLY DO THE POLL() */
if (timeout == 0) { if (timeout == 0) {
// be sure other threads get a chance // be sure other threads get a chance
awtJNI_ThreadYield(env); if (!awtJNI_ThreadYield(env)) {
return FALSE;
}
} }
if (tracing) poll_sleep_time = awtJNI_TimeMillis(); if (tracing) poll_sleep_time = awtJNI_TimeMillis();
...@@ -701,7 +721,7 @@ performPoll(JNIEnv *env, jlong nextTaskTime) { ...@@ -701,7 +721,7 @@ performPoll(JNIEnv *env, jlong nextTaskTime) {
update_poll_timeout(TIMEOUT_EVENTS); update_poll_timeout(TIMEOUT_EVENTS);
PRINT2("performPoll(): TIMEOUT_EVENTS curPollTimeout = %ld \n", curPollTimeout); PRINT2("performPoll(): TIMEOUT_EVENTS curPollTimeout = %ld \n", curPollTimeout);
} }
return; return TRUE;
} /* performPoll() */ } /* performPoll() */
...@@ -856,23 +876,25 @@ Java_sun_awt_motif_XsessionWMcommand(JNIEnv *env, jobject this, ...@@ -856,23 +876,25 @@ Java_sun_awt_motif_XsessionWMcommand(JNIEnv *env, jobject this,
xawt_root_window = get_xawt_root_shell(env); xawt_root_window = get_xawt_root_shell(env);
if ( xawt_root_window == None ) { if ( xawt_root_window == None ) {
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
AWT_UNLOCK(); AWT_UNLOCK();
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
return; return;
} }
command = (char *) JNU_GetStringPlatformChars(env, jcommand, NULL); command = (char *) JNU_GetStringPlatformChars(env, jcommand, NULL);
c[0] = (char *)command; if (command != NULL) {
status = XmbTextListToTextProperty(awt_display, c, 1, c[0] = (char *)command;
XStdICCTextStyle, &text_prop); status = XmbTextListToTextProperty(awt_display, c, 1,
XStdICCTextStyle, &text_prop);
if (status == Success || status > 0) {
XSetTextProperty(awt_display, xawt_root_window, if (status == Success || status > 0) {
&text_prop, XA_WM_COMMAND); XSetTextProperty(awt_display, xawt_root_window,
if (text_prop.value != NULL) &text_prop, XA_WM_COMMAND);
XFree(text_prop.value); if (text_prop.value != NULL)
XFree(text_prop.value);
}
JNU_ReleaseStringPlatformChars(env, jcommand, command);
} }
JNU_ReleaseStringPlatformChars(env, jcommand, command);
AWT_UNLOCK(); AWT_UNLOCK();
} }
...@@ -886,96 +908,56 @@ Java_sun_awt_motif_XsessionWMcommand(JNIEnv *env, jobject this, ...@@ -886,96 +908,56 @@ Java_sun_awt_motif_XsessionWMcommand(JNIEnv *env, jobject this,
* name. It's not! It's just a plain function. * name. It's not! It's just a plain function.
*/ */
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_awt_motif_XsessionWMcommand_New(JNIEnv *env, jobjectArray jargv) Java_sun_awt_motif_XsessionWMcommand_New(JNIEnv *env, jobjectArray jarray)
{ {
static const char empty[] = ""; jsize length;
char ** array;
int argc;
const char **cargv;
XTextProperty text_prop; XTextProperty text_prop;
int status; int status;
int i;
Window xawt_root_window; Window xawt_root_window;
AWT_LOCK(); AWT_LOCK();
xawt_root_window = get_xawt_root_shell(env); xawt_root_window = get_xawt_root_shell(env);
if (xawt_root_window == None) { if (xawt_root_window == None) {
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
AWT_UNLOCK(); AWT_UNLOCK();
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
return; return;
} }
argc = (int)(*env)->GetArrayLength(env, jargv); array = stringArrayToNative(env, jarray, &length);
if (argc == 0) {
AWT_UNLOCK();
return;
}
/* array of C strings */
cargv = (const char **)calloc(argc, sizeof(char *));
if (cargv == NULL) {
JNU_ThrowOutOfMemoryError(env, "Unable to allocate cargv");
AWT_UNLOCK();
return;
}
/* fill C array with platform chars of java strings */ if (array != NULL) {
for (i = 0; i < argc; ++i) { status = XmbTextListToTextProperty(awt_display, array, length,
jstring js; XStdICCTextStyle, &text_prop);
const char *cs; if (status < 0) {
switch (status) {
cs = NULL; case XNoMemory:
js = (*env)->GetObjectArrayElement(env, jargv, i); JNU_ThrowOutOfMemoryError(env,
if (js != NULL) { "XmbTextListToTextProperty: XNoMemory");
cs = JNU_GetStringPlatformChars(env, js, NULL); break;
} case XLocaleNotSupported:
if (cs == NULL) { JNU_ThrowInternalError(env,
cs = empty; "XmbTextListToTextProperty: XLocaleNotSupported");
} break;
cargv[i] = cs; case XConverterNotFound:
(*env)->DeleteLocalRef(env, js); JNU_ThrowNullPointerException(env,
} "XmbTextListToTextProperty: XConverterNotFound");
break;
/* grr, X prototype doesn't declare cargv as const, thought it really is */ default:
status = XmbTextListToTextProperty(awt_display, (char **)cargv, argc, JNU_ThrowInternalError(env,
XStdICCTextStyle, &text_prop); "XmbTextListToTextProperty: unknown error");
if (status < 0) { }
switch (status) { } else {
case XNoMemory: XSetTextProperty(awt_display, xawt_root_window,
JNU_ThrowOutOfMemoryError(env, &text_prop, XA_WM_COMMAND);
"XmbTextListToTextProperty: XNoMemory");
break;
case XLocaleNotSupported:
JNU_ThrowInternalError(env,
"XmbTextListToTextProperty: XLocaleNotSupported");
break;
case XConverterNotFound:
JNU_ThrowNullPointerException(env,
"XmbTextListToTextProperty: XConverterNotFound");
break;
default:
JNU_ThrowInternalError(env,
"XmbTextListToTextProperty: unknown error");
} }
} else {
XSetTextProperty(awt_display, xawt_root_window, if (text_prop.value != NULL)
&text_prop, XA_WM_COMMAND); XFree(text_prop.value);
}
for (i = 0; i < argc; ++i) {
jstring js;
if (cargv[i] == empty)
continue;
js = (*env)->GetObjectArrayElement(env, jargv, i); freeNativeStringArray(array, length);
JNU_ReleaseStringPlatformChars(env, js, cargv[i]);
(*env)->DeleteLocalRef(env, js);
} }
if (text_prop.value != NULL)
XFree(text_prop.value);
AWT_UNLOCK(); AWT_UNLOCK();
} }
......
/* /*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -1242,9 +1242,13 @@ Java_sun_awt_X11_XWindow_initIDs ...@@ -1242,9 +1242,13 @@ Java_sun_awt_X11_XWindow_initIDs
{ {
char *ptr = NULL; char *ptr = NULL;
windowID = (*env)->GetFieldID(env, clazz, "window", "J"); windowID = (*env)->GetFieldID(env, clazz, "window", "J");
CHECK_NULL(windowID);
targetID = (*env)->GetFieldID(env, clazz, "target", "Ljava/awt/Component;"); targetID = (*env)->GetFieldID(env, clazz, "target", "Ljava/awt/Component;");
CHECK_NULL(targetID);
graphicsConfigID = (*env)->GetFieldID(env, clazz, "graphicsConfig", "Lsun/awt/X11GraphicsConfig;"); graphicsConfigID = (*env)->GetFieldID(env, clazz, "graphicsConfig", "Lsun/awt/X11GraphicsConfig;");
CHECK_NULL(graphicsConfigID);
drawStateID = (*env)->GetFieldID(env, clazz, "drawState", "I"); drawStateID = (*env)->GetFieldID(env, clazz, "drawState", "I");
CHECK_NULL(drawStateID);
ptr = getenv("_AWT_USE_TYPE4_PATCH"); ptr = getenv("_AWT_USE_TYPE4_PATCH");
if( ptr != NULL && ptr[0] != 0 ) { if( ptr != NULL && ptr[0] != 0 ) {
if( strncmp("true", ptr, 4) == 0 ) { if( strncmp("true", ptr, 4) == 0 ) {
......
/* /*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* questions. * questions.
*/ */
#include "jni_util.h"
#include "gtk2_interface.h" #include "gtk2_interface.h"
#include "gnome_interface.h" #include "gnome_interface.h"
...@@ -65,6 +66,12 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_gnome_1url_1show ...@@ -65,6 +66,12 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_gnome_1url_1show
const gchar* url_c; const gchar* url_c;
url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL); url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL);
if (url_c == NULL) {
if (!(*env)->ExceptionCheck(env)) {
JNU_ThrowOutOfMemoryError(env, 0);
}
return JNI_FALSE;
}
if (gtk_has_been_loaded) { if (gtk_has_been_loaded) {
fp_gdk_threads_enter(); fp_gdk_threads_enter();
......
...@@ -493,6 +493,14 @@ public class WindowsFileSystemProvider ...@@ -493,6 +493,14 @@ public class WindowsFileSystemProvider
try { try {
CreateDirectory(dir.getPathForWin32Calls(), sd.address()); CreateDirectory(dir.getPathForWin32Calls(), sd.address());
} catch (WindowsException x) { } catch (WindowsException x) {
// convert ERROR_ACCESS_DENIED to FileAlreadyExistsException if we can
// verify that the directory exists
if (x.lastError() == ERROR_ACCESS_DENIED) {
try {
if (WindowsFileAttributes.get(dir, false).isDirectory())
throw new FileAlreadyExistsException(dir.toString());
} catch (WindowsException ignore) { }
}
x.rethrowAsIOException(dir); x.rethrowAsIOException(dir);
} finally { } finally {
sd.release(); sd.release();
......
...@@ -35,6 +35,8 @@ import javax.crypto.*; ...@@ -35,6 +35,8 @@ import javax.crypto.*;
import javax.crypto.spec.*; import javax.crypto.spec.*;
import sun.security.rsa.RSAKeyFactory; import sun.security.rsa.RSAKeyFactory;
import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec;
import sun.security.util.KeyUtil;
/** /**
* RSA cipher implementation using the Microsoft Crypto API. * RSA cipher implementation using the Microsoft Crypto API.
...@@ -92,9 +94,16 @@ public final class RSACipher extends CipherSpi { ...@@ -92,9 +94,16 @@ public final class RSACipher extends CipherSpi {
// the public key, if we were initialized using a public key // the public key, if we were initialized using a public key
private sun.security.mscapi.Key publicKey; private sun.security.mscapi.Key publicKey;
// the private key, if we were initialized using a private key // the private key, if we were initialized using a private key
private sun.security.mscapi.Key privateKey; private sun.security.mscapi.Key privateKey;
// cipher parameter for TLS RSA premaster secret
private AlgorithmParameterSpec spec = null;
// the source of randomness
private SecureRandom random;
public RSACipher() { public RSACipher() {
paddingType = PAD_PKCS1; paddingType = PAD_PKCS1;
} }
...@@ -155,8 +164,12 @@ public final class RSACipher extends CipherSpi { ...@@ -155,8 +164,12 @@ public final class RSACipher extends CipherSpi {
throws InvalidKeyException, InvalidAlgorithmParameterException { throws InvalidKeyException, InvalidAlgorithmParameterException {
if (params != null) { if (params != null) {
throw new InvalidAlgorithmParameterException if (!(params instanceof TlsRsaPremasterSecretParameterSpec)) {
("Parameters not supported"); throw new InvalidAlgorithmParameterException(
"Parameters not supported");
}
spec = params;
this.random = random; // for TLS RSA premaster secret
} }
init(opmode, key); init(opmode, key);
} }
...@@ -356,39 +369,47 @@ public final class RSACipher extends CipherSpi { ...@@ -356,39 +369,47 @@ public final class RSACipher extends CipherSpi {
} }
// see JCE spec // see JCE spec
protected java.security.Key engineUnwrap(byte[] wrappedKey, String algorithm, protected java.security.Key engineUnwrap(byte[] wrappedKey,
String algorithm,
int type) throws InvalidKeyException, NoSuchAlgorithmException { int type) throws InvalidKeyException, NoSuchAlgorithmException {
if (wrappedKey.length > buffer.length) { if (wrappedKey.length > buffer.length) {
throw new InvalidKeyException("Key is too long for unwrapping"); throw new InvalidKeyException("Key is too long for unwrapping");
} }
update(wrappedKey, 0, wrappedKey.length);
try { boolean isTlsRsaPremasterSecret =
byte[] encoding = doFinal(); algorithm.equals("TlsRsaPremasterSecret");
Exception failover = null;
switch (type) { byte[] encoded = null;
case Cipher.PUBLIC_KEY:
return constructPublicKey(encoding, algorithm);
case Cipher.PRIVATE_KEY:
return constructPrivateKey(encoding, algorithm);
case Cipher.SECRET_KEY:
return constructSecretKey(encoding, algorithm);
default:
throw new InvalidKeyException("Unknown key type " + type);
}
update(wrappedKey, 0, wrappedKey.length);
try {
encoded = doFinal();
} catch (BadPaddingException e) { } catch (BadPaddingException e) {
// should not occur if (isTlsRsaPremasterSecret) {
throw new InvalidKeyException("Unwrapping failed", e); failover = e;
} else {
throw new InvalidKeyException("Unwrapping failed", e);
}
} catch (IllegalBlockSizeException e) { } catch (IllegalBlockSizeException e) {
// should not occur, handled with length check above // should not occur, handled with length check above
throw new InvalidKeyException("Unwrapping failed", e); throw new InvalidKeyException("Unwrapping failed", e);
} }
if (isTlsRsaPremasterSecret) {
if (!(spec instanceof TlsRsaPremasterSecretParameterSpec)) {
throw new IllegalStateException(
"No TlsRsaPremasterSecretParameterSpec specified");
}
// polish the TLS premaster secret
encoded = KeyUtil.checkTlsPreMasterSecretKey(
((TlsRsaPremasterSecretParameterSpec)spec).getClientVersion(),
((TlsRsaPremasterSecretParameterSpec)spec).getServerVersion(),
random, encoded, (failover != null));
}
return constructKey(encoded, algorithm, type);
} }
// see JCE spec // see JCE spec
...@@ -452,6 +473,22 @@ public final class RSACipher extends CipherSpi { ...@@ -452,6 +473,22 @@ public final class RSACipher extends CipherSpi {
return new SecretKeySpec(encodedKey, encodedKeyAlgorithm); return new SecretKeySpec(encodedKey, encodedKeyAlgorithm);
} }
private static Key constructKey(byte[] encodedKey,
String encodedKeyAlgorithm,
int keyType) throws InvalidKeyException, NoSuchAlgorithmException {
switch (keyType) {
case Cipher.PUBLIC_KEY:
return constructPublicKey(encodedKey, encodedKeyAlgorithm);
case Cipher.PRIVATE_KEY:
return constructPrivateKey(encodedKey, encodedKeyAlgorithm);
case Cipher.SECRET_KEY:
return constructSecretKey(encodedKey, encodedKeyAlgorithm);
default:
throw new InvalidKeyException("Unknown key type " + keyType);
}
}
/* /*
* Encrypt/decrypt a data buffer using Microsoft Crypto API with HCRYPTKEY. * Encrypt/decrypt a data buffer using Microsoft Crypto API with HCRYPTKEY.
* It expects and returns ciphertext data in big-endian form. * It expects and returns ciphertext data in big-endian form.
......
/* /*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -173,8 +173,11 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent) ...@@ -173,8 +173,11 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent)
BOOL isEmbeddedInstance = FALSE; BOOL isEmbeddedInstance = FALSE;
BOOL isEmbedded = FALSE; BOOL isEmbedded = FALSE;
cls = env->FindClass("sun/awt/EmbeddedFrame"); cls = env->FindClass("sun/awt/EmbeddedFrame");
if (cls) { if (cls) {
isEmbeddedInstance = env->IsInstanceOf(target, cls); isEmbeddedInstance = env->IsInstanceOf(target, cls);
} else {
throw std::bad_alloc();
} }
INT_PTR handle; INT_PTR handle;
if (isEmbeddedInstance) { if (isEmbeddedInstance) {
...@@ -189,6 +192,8 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent) ...@@ -189,6 +192,8 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent)
cls = env->FindClass("sun/awt/LightweightFrame"); cls = env->FindClass("sun/awt/LightweightFrame");
if (cls) { if (cls) {
isLightweight = env->IsInstanceOf(target, cls); isLightweight = env->IsInstanceOf(target, cls);
} else {
throw std::bad_alloc();
} }
frame->m_isLightweight = isLightweight; frame->m_isLightweight = isLightweight;
...@@ -260,7 +265,11 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent) ...@@ -260,7 +265,11 @@ AwtFrame* AwtFrame::Create(jobject self, jobject parent)
// for input method windows, use minimal decorations // for input method windows, use minimal decorations
inputMethodWindowCls = env->FindClass("sun/awt/im/InputMethodWindow"); inputMethodWindowCls = env->FindClass("sun/awt/im/InputMethodWindow");
if ((inputMethodWindowCls != NULL) && env->IsInstanceOf(target, inputMethodWindowCls)) { if (inputMethodWindowCls == NULL) {
throw std::bad_alloc();
}
if (env->IsInstanceOf(target, inputMethodWindowCls)) {
//for below-the-spot composition window, use no decoration //for below-the-spot composition window, use no decoration
if (env->GetBooleanField(target, AwtFrame::undecoratedID) == JNI_TRUE){ if (env->GetBooleanField(target, AwtFrame::undecoratedID) == JNI_TRUE){
exStyle = 0; exStyle = 0;
...@@ -1611,9 +1620,10 @@ Java_sun_awt_windows_WFramePeer_initIDs(JNIEnv *env, jclass cls) ...@@ -1611,9 +1620,10 @@ Java_sun_awt_windows_WFramePeer_initIDs(JNIEnv *env, jclass cls)
TRY; TRY;
AwtFrame::setExtendedStateMID = env->GetMethodID(cls, "setExtendedState", "(I)V"); AwtFrame::setExtendedStateMID = env->GetMethodID(cls, "setExtendedState", "(I)V");
AwtFrame::getExtendedStateMID = env->GetMethodID(cls, "getExtendedState", "()I");
DASSERT(AwtFrame::setExtendedStateMID); DASSERT(AwtFrame::setExtendedStateMID);
CHECK_NULL(AwtFrame::setExtendedStateMID);
AwtFrame::getExtendedStateMID = env->GetMethodID(cls, "getExtendedState", "()I");
DASSERT(AwtFrame::getExtendedStateMID); DASSERT(AwtFrame::getExtendedStateMID);
CATCH_BAD_ALLOC; CATCH_BAD_ALLOC;
...@@ -1786,35 +1796,6 @@ Java_sun_awt_windows_WFramePeer_pSetIMMOption(JNIEnv *env, jobject self, ...@@ -1786,35 +1796,6 @@ Java_sun_awt_windows_WFramePeer_pSetIMMOption(JNIEnv *env, jobject self,
} /* extern "C" */ } /* extern "C" */
/************************************************************************
* EmbeddedFrame native methods
*/
extern "C" {
/*
* Class: sun_awt_EmbeddedFrame
* Method: setPeer
* Signature: (Ljava/awt/peer/ComponentPeer;)V
*/
JNIEXPORT void JNICALL
Java_sun_awt_EmbeddedFrame_setPeer(JNIEnv *env, jobject self, jobject lpeer)
{
TRY;
jclass cls;
jfieldID fid;
cls = env->GetObjectClass(self);
fid = env->GetFieldID(cls, "peer", "Ljava/awt/peer/ComponentPeer;");
env->SetObjectField(self, fid, lpeer);
CATCH_BAD_ALLOC;
}
} /* extern "C" */
/************************************************************************ /************************************************************************
* WEmbeddedFrame native methods * WEmbeddedFrame native methods
*/ */
...@@ -1833,6 +1814,7 @@ Java_sun_awt_windows_WEmbeddedFrame_initIDs(JNIEnv *env, jclass cls) ...@@ -1833,6 +1814,7 @@ Java_sun_awt_windows_WEmbeddedFrame_initIDs(JNIEnv *env, jclass cls)
AwtFrame::handleID = env->GetFieldID(cls, "handle", "J"); AwtFrame::handleID = env->GetFieldID(cls, "handle", "J");
DASSERT(AwtFrame::handleID != NULL); DASSERT(AwtFrame::handleID != NULL);
CHECK_NULL(AwtFrame::handleID);
AwtFrame::activateEmbeddingTopLevelMID = env->GetMethodID(cls, "activateEmbeddingTopLevel", "()V"); AwtFrame::activateEmbeddingTopLevelMID = env->GetMethodID(cls, "activateEmbeddingTopLevel", "()V");
DASSERT(AwtFrame::activateEmbeddingTopLevelMID != NULL); DASSERT(AwtFrame::activateEmbeddingTopLevelMID != NULL);
......
...@@ -33,6 +33,7 @@ import java.security.Provider; ...@@ -33,6 +33,7 @@ import java.security.Provider;
import javax.crypto.KeyGenerator; import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import java.util.Formatter;
import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec; import sun.security.internal.spec.TlsRsaPremasterSecretParameterSpec;
...@@ -52,27 +53,51 @@ public class TestPremaster { ...@@ -52,27 +53,51 @@ public class TestPremaster {
System.out.println("OK: " + e); System.out.println("OK: " + e);
} }
test(kg, 3, 0); int[] protocolVersions = {0x0300, 0x0301, 0x0302, 0x0400};
test(kg, 3, 1); for (int clientVersion : protocolVersions) {
test(kg, 3, 2); for (int serverVersion : protocolVersions) {
test(kg, 4, 0); test(kg, clientVersion, serverVersion);
if (serverVersion >= clientVersion) {
break;
}
}
}
System.out.println("Done."); System.out.println("Done.");
} }
private static void test(KeyGenerator kg, int major, int minor) private static void test(KeyGenerator kg,
throws Exception { int clientVersion, int serverVersion) throws Exception {
System.out.printf(
"Testing RSA pre-master secret key generation between " +
"client (0x%04X) and server(0x%04X)%n",
clientVersion, serverVersion);
kg.init(new TlsRsaPremasterSecretParameterSpec(
clientVersion, serverVersion));
kg.init(new TlsRsaPremasterSecretParameterSpec(major, minor));
SecretKey key = kg.generateKey(); SecretKey key = kg.generateKey();
byte[] encoded = key.getEncoded(); byte[] encoded = key.getEncoded();
if (encoded.length != 48) { if (encoded != null) { // raw key material may be not extractable
throw new Exception("length: " + encoded.length); if (encoded.length != 48) {
} throw new Exception("length: " + encoded.length);
if ((encoded[0] != major) || (encoded[1] != minor)) { }
throw new Exception("version mismatch: " + encoded[0] + int v = versionOf(encoded[0], encoded[1]);
"." + encoded[1]); if (clientVersion != v) {
} if (serverVersion != v || clientVersion >= 0x0302) {
System.out.println("OK: " + major + "." + minor); throw new Exception(String.format(
"version mismatch: (0x%04X) rather than (0x%04X) " +
"is used in pre-master secret", v, clientVersion));
}
System.out.printf("Use compatible version (0x%04X)%n", v);
}
System.out.println("Passed, version matches!");
} else {
System.out.println("Raw key material is not extractable");
}
}
private static int versionOf(int major, int minor) {
return ((major & 0xFF) << 8) | (minor & 0xFF);
} }
} }
/*
* Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @bug 6366359
* @summary Test that we don't crash when changing from 8 to 16/32 bit modes
* @author Dmitri.Trembovetski@Sun.COM area=FullScreen
* @run main/othervm/timeout=200 DisplayChangeVITest
* @run main/othervm/timeout=200 -Dsun.java2d.d3d=false DisplayChangeVITest
* @run main/othervm/timeout=200 -Dsun.java2d.opengl=true DisplayChangeVITest
*/
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import java.lang.Exception;
import java.lang.Thread;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
/**
* The test enters fullscreen mode (if it's supported) and then tries
* to switch between display moes with different depths and dimensions
* while doing both rendering to the screen (via a VolatileImage)
* and Swing repainting just to make things more chaotic.
*
* The procedure is repeated TEST_REPS times (3 by default).
*
* Don't pay attention to what happens on the screen, it won't be pretty.
* If the test doesn't crash or throw exceptions, it passes, otherwise
* it fails.
*/
public class DisplayChangeVITest extends JFrame implements Runnable {
private final Random rnd = new Random();
private VolatileImage bb;
private BufferedImage sprite;
private VolatileImage volSprite;
private static boolean done = false;
private static final Object lock = new Object();
private static final int TEST_REPS = 3;
private ArrayList<DisplayMode> dms;
DisplayChangeVITest() {
selectDisplayModes();
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
synchronized (lock) {
done = true;
}
}
}
});
sprite = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
sprite.getRaster().getDataBuffer();
Graphics g = sprite.getGraphics();
g.setColor(Color.yellow);
g.fillRect(0, 0, sprite.getWidth(), sprite.getHeight());
}
void render(Graphics g) {
do {
// volatile images validated here
initBackbuffer();
g.setColor(Color.black);
g.fillRect(0, 0, getWidth(), getHeight());
Graphics gg = bb.getGraphics();
gg.setColor(new Color(rnd.nextInt(0x00ffffff)));
gg.fillRect(0, 0, bb.getWidth(), bb.getHeight());
for (int x = 0; x < 10; x++) {
gg.drawImage(sprite, x*200, 0, null);
gg.drawImage(volSprite, x*200, 500, null);
}
g.drawImage(bb, 0, 0, null);
} while (bb.contentsLost());
}
private static void sleep(long msec) {
try { Thread.sleep(msec); } catch (InterruptedException e) {}
}
private int reps = 0;
public void run() {
GraphicsDevice gd = getGraphicsConfiguration().getDevice();
if (gd.isDisplayChangeSupported() && dms.size() > 0) {
while (!done && reps++ < TEST_REPS) {
for (DisplayMode dm : dms) {
System.err.printf("Entering DisplayMode[%dx%dx%d]\n",
dm.getWidth(), dm.getHeight(), dm.getBitDepth());
gd.setDisplayMode(dm);
initBackbuffer();
for (int i = 0; i < 10; i++) {
// render to the screen
render(getGraphics());
// ask Swing to repaint
repaint();
sleep(100);
}
sleep(1500);
}
}
} else {
System.err.println("Display mode change " +
"not supported. Test passed.");
}
dispose();
synchronized (lock) {
done = true;
lock.notify();
}
}
private void createBackbuffer() {
if (bb == null ||
bb.getWidth() != getWidth() || bb.getHeight() != getHeight())
{
bb = createVolatileImage(getWidth(), getHeight());
}
}
private void initBackbuffer() {
createBackbuffer();
int res = bb.validate(getGraphicsConfiguration());
if (res == VolatileImage.IMAGE_INCOMPATIBLE) {
bb = null;
createBackbuffer();
bb.validate(getGraphicsConfiguration());
res = VolatileImage.IMAGE_RESTORED;
}
if (res == VolatileImage.IMAGE_RESTORED) {
Graphics g = bb.getGraphics();
g.setColor(new Color(rnd.nextInt(0x00ffffff)));
g.fillRect(0, 0, bb.getWidth(), bb.getHeight());
volSprite = createVolatileImage(100, 100);
}
volSprite.validate(getGraphicsConfiguration());
}
private void selectDisplayModes() {
GraphicsDevice gd =
GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice();
dms = new ArrayList<DisplayMode>();
DisplayMode dmArray[] = gd.getDisplayModes();
boolean found8 = false, found16 = false,
found24 = false, found32 = false;
for (DisplayMode dm : dmArray) {
if (!found8 &&
(dm.getBitDepth() == 8 ||
dm.getBitDepth() == DisplayMode.BIT_DEPTH_MULTI) &&
(dm.getWidth() >= 800 && dm.getWidth() < 1024))
{
dms.add(dm);
found8 = true;
continue;
}
if (!found32 &&
(dm.getBitDepth() == 32 ||
dm.getBitDepth() == DisplayMode.BIT_DEPTH_MULTI) &&
dm.getWidth() >= 1280)
{
dms.add(dm);
found32 = true;
continue;
}
if (!found16 &&
dm.getBitDepth() == 16 &&
(dm.getWidth() >= 1024 && dm.getWidth() < 1280))
{
dms.add(dm);
found16 = true;
continue;
}
if (found8 && found16 && found32) {
break;
}
}
System.err.println("Found display modes:");
for (DisplayMode dm : dms) {
System.err.printf("DisplayMode[%dx%dx%d]\n",
dm.getWidth(), dm.getHeight(), dm.getBitDepth());
}
}
public static void main(String[] args) throws Exception {
DisplayChangeVITest test = new DisplayChangeVITest();
GraphicsDevice gd =
GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice();
if (gd.isFullScreenSupported()) {
gd.setFullScreenWindow(test);
Thread t = new Thread(test);
t.run();
synchronized (lock) {
while (!done) {
try {
lock.wait(50);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
System.err.println("Test Passed.");
} else {
System.err.println("Full screen not supported. Test passed.");
}
}
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* A simple name service which throws an exception when invoked
*/
import java.net.UnknownHostException;
import java.net.InetAddress;
import sun.net.spi.nameservice.*;
import java.util.*;
public final class DummyNameService implements NameService {
public DummyNameService() throws Exception {
}
public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
throw new UnknownHostException("Dummy name service");
}
public String getHostByAddr(byte[] addr) throws UnknownHostException {
throw new UnknownHostException("Dummy name service");
}
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Descriptor for the dummy name service
*/
import sun.net.spi.nameservice.*;
public final class DummyNameServiceDescriptor implements NameServiceDescriptor {
/**
* Create a new instance of the corresponding name service.
*/
public NameService createNameService() throws Exception {
return new DummyNameService();
}
/**
* Returns this service provider's name
*
*/
public String getProviderName() {
return "oracle";
}
/**
* Returns this name service type
* "dns" "nis" etc
*/
public String getType() {
return "dummy";
}
}
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
DummyNameServiceDescriptor # name service provider descriptor
...@@ -25,8 +25,18 @@ ...@@ -25,8 +25,18 @@
* @test * @test
* @bug 4749938 * @bug 4749938
* @summary Bug in the parsing IPv4 literal addresses * @summary Bug in the parsing IPv4 literal addresses
* @compile -XDignore.symbol.file=true DummyNameService.java DummyNameServiceDescriptor.java
* @run main/othervm -Dsun.net.spi.nameservice.provider.1=dummy,oracle textToNumericFormat
*/ */
/**
* We use a dummy name service which throws UHE any time it is called.
* We do this because the "good" tests here should parse correctly
* without needing to call the name service, and the bad tests will
* not parse and then invoke the name service, where we expect
* the exception.
*/
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.*; import java.util.*;
...@@ -34,19 +44,25 @@ import java.util.*; ...@@ -34,19 +44,25 @@ import java.util.*;
public class textToNumericFormat { public class textToNumericFormat {
public static void main(String[] args) throws UnknownHostException { public static void main(String[] args) throws UnknownHostException {
List goodList = new ArrayList(); List<String> goodList = new ArrayList<>();
List badList = new ArrayList(); List<String> badList = new ArrayList<>();
String goodAddrs[] = { String goodAddrs[] = {
"224.0.1.0", "224.0.1.0",
"238.255.255.255", "238.255.255.255",
"239.255.255.255" }; "239.255.255.255",
"239.255.65535",
"239.16777215",
"4294967295" };
String badAddrs[] = { String badAddrs[] = {
"238.255.255.2550", "238.255.255.2550",
"256.255.255.255", "256.255.255.255",
"238.255.2550.255", "238.255.2550.255",
"238.2550.255.255", "238.2550.255.255",
"2380.255.255.255"}; "2380.255.255.255",
"239.255.65536",
"239.16777216",
"4294967296" };
for (int i=0; i<goodAddrs.length; i++) { for (int i=0; i<goodAddrs.length; i++) {
try { try {
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
*/ */
/* @test /* @test
* @bug 4313887 6838333 8005566 * @bug 4313887 6838333 8005566 8032220
* @summary Unit test for miscellenous methods in java.nio.file.Files * @summary Unit test for miscellenous methods in java.nio.file.Files
* @library .. * @library ..
*/ */
...@@ -76,6 +76,11 @@ public class Misc { ...@@ -76,6 +76,11 @@ public class Misc {
createDirectories(file.resolve("y")); createDirectories(file.resolve("y"));
throw new RuntimeException("failure expected"); throw new RuntimeException("failure expected");
} catch (IOException x) { } } catch (IOException x) { }
// the root directory always exists
Path root = Paths.get("/");
Files.createDirectories(root);
Files.createDirectories(root.toAbsolutePath());
} }
/** /**
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
*/ */
/* @test /* @test
* @bug 4313887 6838333 6925932 7006126 * @bug 4313887 6838333 6925932 7006126 8037945
* @summary Unit test for java.nio.file.Path path operations * @summary Unit test for java.nio.file.Path path operations
*/ */
...@@ -899,6 +899,8 @@ public class PathOps { ...@@ -899,6 +899,8 @@ public class PathOps {
.normalize("foo"); .normalize("foo");
test("/foo") test("/foo")
.normalize("/foo"); .normalize("/foo");
test("")
.normalize("");
test(".") test(".")
.normalize(""); .normalize("");
test("..") test("..")
......
/* /*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 7069824 * @bug 7069824 8042360
* @summary Verify implementation for Locale matching. * @summary Verify implementation for Locale matching.
* @run main Bug7069824 * @run main Bug7069824
*/ */
...@@ -91,6 +91,17 @@ public class Bug7069824 { ...@@ -91,6 +91,17 @@ public class Bug7069824 {
String range; String range;
double weight; double weight;
// Testcase for 8042360
range = "en-Latn-1234567890";
try {
lr = new LanguageRange(range);
error = true;
System.err.println(" IAE should be thrown for LanguageRange("
+ range + ").");
}
catch (IllegalArgumentException ex) {
}
range = null; range = null;
try { try {
lr = new LanguageRange(range); lr = new LanguageRange(range);
......
...@@ -26,6 +26,9 @@ import org.testng.annotations.Test; ...@@ -26,6 +26,9 @@ import org.testng.annotations.Test;
import java.util.*; import java.util.*;
import java.util.Spliterators; import java.util.Spliterators;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.*; import java.util.stream.*;
...@@ -122,24 +125,33 @@ public class SortedOpTest extends OpTestCase { ...@@ -122,24 +125,33 @@ public class SortedOpTest extends OpTestCase {
@Test(groups = { "serialization-hostile" }) @Test(groups = { "serialization-hostile" })
public void testSequentialShortCircuitTerminal() { public void testSequentialShortCircuitTerminal() {
// The sorted op for sequential evaluation will buffer all elements when accepting // The sorted op for sequential evaluation will buffer all elements when
// then at the end sort those elements and push those elements downstream // accepting then at the end sort those elements and push those elements
// downstream
// A peek operation is added in-between the sorted() and terminal
// operation that counts the number of calls to its consumer and
// asserts that the number of calls is at most the required quantity
List<Integer> l = Arrays.asList(5, 4, 3, 2, 1); List<Integer> l = Arrays.asList(5, 4, 3, 2, 1);
Function<Integer, Stream<Integer>> knownSize = i -> assertNCallsOnly(
l.stream().sorted(), Stream::peek, i);
Function<Integer, Stream<Integer>> unknownSize = i -> assertNCallsOnly
(unknownSizeStream(l).sorted(), Stream::peek, i);
// Find // Find
assertEquals(l.stream().sorted().findFirst(), Optional.of(1)); assertEquals(knownSize.apply(1).findFirst(), Optional.of(1));
assertEquals(l.stream().sorted().findAny(), Optional.of(1)); assertEquals(knownSize.apply(1).findAny(), Optional.of(1));
assertEquals(unknownSizeStream(l).sorted().findFirst(), Optional.of(1)); assertEquals(unknownSize.apply(1).findFirst(), Optional.of(1));
assertEquals(unknownSizeStream(l).sorted().findAny(), Optional.of(1)); assertEquals(unknownSize.apply(1).findAny(), Optional.of(1));
// Match // Match
assertEquals(l.stream().sorted().anyMatch(i -> i == 2), true); assertEquals(knownSize.apply(2).anyMatch(i -> i == 2), true);
assertEquals(l.stream().sorted().noneMatch(i -> i == 2), false); assertEquals(knownSize.apply(2).noneMatch(i -> i == 2), false);
assertEquals(l.stream().sorted().allMatch(i -> i == 2), false); assertEquals(knownSize.apply(2).allMatch(i -> i == 2), false);
assertEquals(unknownSizeStream(l).sorted().anyMatch(i -> i == 2), true); assertEquals(unknownSize.apply(2).anyMatch(i -> i == 2), true);
assertEquals(unknownSizeStream(l).sorted().noneMatch(i -> i == 2), false); assertEquals(unknownSize.apply(2).noneMatch(i -> i == 2), false);
assertEquals(unknownSizeStream(l).sorted().allMatch(i -> i == 2), false); assertEquals(unknownSize.apply(2).allMatch(i -> i == 2), false);
} }
private <T> Stream<T> unknownSizeStream(List<T> l) { private <T> Stream<T> unknownSizeStream(List<T> l) {
...@@ -199,19 +211,24 @@ public class SortedOpTest extends OpTestCase { ...@@ -199,19 +211,24 @@ public class SortedOpTest extends OpTestCase {
public void testIntSequentialShortCircuitTerminal() { public void testIntSequentialShortCircuitTerminal() {
int[] a = new int[]{5, 4, 3, 2, 1}; int[] a = new int[]{5, 4, 3, 2, 1};
Function<Integer, IntStream> knownSize = i -> assertNCallsOnly(
Arrays.stream(a).sorted(), (s, c) -> s.peek(c::accept), i);
Function<Integer, IntStream> unknownSize = i -> assertNCallsOnly
(unknownSizeIntStream(a).sorted(), (s, c) -> s.peek(c::accept), i);
// Find // Find
assertEquals(Arrays.stream(a).sorted().findFirst(), OptionalInt.of(1)); assertEquals(knownSize.apply(1).findFirst(), OptionalInt.of(1));
assertEquals(Arrays.stream(a).sorted().findAny(), OptionalInt.of(1)); assertEquals(knownSize.apply(1).findAny(), OptionalInt.of(1));
assertEquals(unknownSizeIntStream(a).sorted().findFirst(), OptionalInt.of(1)); assertEquals(unknownSize.apply(1).findFirst(), OptionalInt.of(1));
assertEquals(unknownSizeIntStream(a).sorted().findAny(), OptionalInt.of(1)); assertEquals(unknownSize.apply(1).findAny(), OptionalInt.of(1));
// Match // Match
assertEquals(Arrays.stream(a).sorted().anyMatch(i -> i == 2), true); assertEquals(knownSize.apply(2).anyMatch(i -> i == 2), true);
assertEquals(Arrays.stream(a).sorted().noneMatch(i -> i == 2), false); assertEquals(knownSize.apply(2).noneMatch(i -> i == 2), false);
assertEquals(Arrays.stream(a).sorted().allMatch(i -> i == 2), false); assertEquals(knownSize.apply(2).allMatch(i -> i == 2), false);
assertEquals(unknownSizeIntStream(a).sorted().anyMatch(i -> i == 2), true); assertEquals(unknownSize.apply(2).anyMatch(i -> i == 2), true);
assertEquals(unknownSizeIntStream(a).sorted().noneMatch(i -> i == 2), false); assertEquals(unknownSize.apply(2).noneMatch(i -> i == 2), false);
assertEquals(unknownSizeIntStream(a).sorted().allMatch(i -> i == 2), false); assertEquals(unknownSize.apply(2).allMatch(i -> i == 2), false);
} }
private IntStream unknownSizeIntStream(int[] a) { private IntStream unknownSizeIntStream(int[] a) {
...@@ -242,19 +259,24 @@ public class SortedOpTest extends OpTestCase { ...@@ -242,19 +259,24 @@ public class SortedOpTest extends OpTestCase {
public void testLongSequentialShortCircuitTerminal() { public void testLongSequentialShortCircuitTerminal() {
long[] a = new long[]{5, 4, 3, 2, 1}; long[] a = new long[]{5, 4, 3, 2, 1};
Function<Integer, LongStream> knownSize = i -> assertNCallsOnly(
Arrays.stream(a).sorted(), (s, c) -> s.peek(c::accept), i);
Function<Integer, LongStream> unknownSize = i -> assertNCallsOnly
(unknownSizeLongStream(a).sorted(), (s, c) -> s.peek(c::accept), i);
// Find // Find
assertEquals(Arrays.stream(a).sorted().findFirst(), OptionalLong.of(1)); assertEquals(knownSize.apply(1).findFirst(), OptionalLong.of(1));
assertEquals(Arrays.stream(a).sorted().findAny(), OptionalLong.of(1)); assertEquals(knownSize.apply(1).findAny(), OptionalLong.of(1));
assertEquals(unknownSizeLongStream(a).sorted().findFirst(), OptionalLong.of(1)); assertEquals(unknownSize.apply(1).findFirst(), OptionalLong.of(1));
assertEquals(unknownSizeLongStream(a).sorted().findAny(), OptionalLong.of(1)); assertEquals(unknownSize.apply(1).findAny(), OptionalLong.of(1));
// Match // Match
assertEquals(Arrays.stream(a).sorted().anyMatch(i -> i == 2), true); assertEquals(knownSize.apply(2).anyMatch(i -> i == 2), true);
assertEquals(Arrays.stream(a).sorted().noneMatch(i -> i == 2), false); assertEquals(knownSize.apply(2).noneMatch(i -> i == 2), false);
assertEquals(Arrays.stream(a).sorted().allMatch(i -> i == 2), false); assertEquals(knownSize.apply(2).allMatch(i -> i == 2), false);
assertEquals(unknownSizeLongStream(a).sorted().anyMatch(i -> i == 2), true); assertEquals(unknownSize.apply(2).anyMatch(i -> i == 2), true);
assertEquals(unknownSizeLongStream(a).sorted().noneMatch(i -> i == 2), false); assertEquals(unknownSize.apply(2).noneMatch(i -> i == 2), false);
assertEquals(unknownSizeLongStream(a).sorted().allMatch(i -> i == 2), false); assertEquals(unknownSize.apply(2).allMatch(i -> i == 2), false);
} }
private LongStream unknownSizeLongStream(long[] a) { private LongStream unknownSizeLongStream(long[] a) {
...@@ -285,19 +307,24 @@ public class SortedOpTest extends OpTestCase { ...@@ -285,19 +307,24 @@ public class SortedOpTest extends OpTestCase {
public void testDoubleSequentialShortCircuitTerminal() { public void testDoubleSequentialShortCircuitTerminal() {
double[] a = new double[]{5.0, 4.0, 3.0, 2.0, 1.0}; double[] a = new double[]{5.0, 4.0, 3.0, 2.0, 1.0};
Function<Integer, DoubleStream> knownSize = i -> assertNCallsOnly(
Arrays.stream(a).sorted(), (s, c) -> s.peek(c::accept), i);
Function<Integer, DoubleStream> unknownSize = i -> assertNCallsOnly
(unknownSizeDoubleStream(a).sorted(), (s, c) -> s.peek(c::accept), i);
// Find // Find
assertEquals(Arrays.stream(a).sorted().findFirst(), OptionalDouble.of(1)); assertEquals(knownSize.apply(1).findFirst(), OptionalDouble.of(1));
assertEquals(Arrays.stream(a).sorted().findAny(), OptionalDouble.of(1)); assertEquals(knownSize.apply(1).findAny(), OptionalDouble.of(1));
assertEquals(unknownSizeDoubleStream(a).sorted().findFirst(), OptionalDouble.of(1)); assertEquals(unknownSize.apply(1).findFirst(), OptionalDouble.of(1));
assertEquals(unknownSizeDoubleStream(a).sorted().findAny(), OptionalDouble.of(1)); assertEquals(unknownSize.apply(1).findAny(), OptionalDouble.of(1));
// Match // Match
assertEquals(Arrays.stream(a).sorted().anyMatch(i -> i == 2.0), true); assertEquals(knownSize.apply(2).anyMatch(i -> i == 2.0), true);
assertEquals(Arrays.stream(a).sorted().noneMatch(i -> i == 2.0), false); assertEquals(knownSize.apply(2).noneMatch(i -> i == 2.0), false);
assertEquals(Arrays.stream(a).sorted().allMatch(i -> i == 2.0), false); assertEquals(knownSize.apply(2).allMatch(i -> i == 2.0), false);
assertEquals(unknownSizeDoubleStream(a).sorted().anyMatch(i -> i == 2.0), true); assertEquals(unknownSize.apply(2).anyMatch(i -> i == 2.0), true);
assertEquals(unknownSizeDoubleStream(a).sorted().noneMatch(i -> i == 2.0), false); assertEquals(unknownSize.apply(2).noneMatch(i -> i == 2.0), false);
assertEquals(unknownSizeDoubleStream(a).sorted().allMatch(i -> i == 2.0), false); assertEquals(unknownSize.apply(2).allMatch(i -> i == 2.0), false);
} }
private DoubleStream unknownSizeDoubleStream(double[] a) { private DoubleStream unknownSizeDoubleStream(double[] a) {
...@@ -321,4 +348,14 @@ public class SortedOpTest extends OpTestCase { ...@@ -321,4 +348,14 @@ public class SortedOpTest extends OpTestCase {
assertSorted(result); assertSorted(result);
assertContentsUnordered(data, result); assertContentsUnordered(data, result);
} }
/**
* Interpose a consumer that asserts it is called at most N times.
*/
<T, S extends BaseStream<T, S>, R> S assertNCallsOnly(S s, BiFunction<S, Consumer<T>, S> pf, int n) {
AtomicInteger boxedInt = new AtomicInteger();
return pf.apply(s, i -> {
assertFalse(boxedInt.incrementAndGet() > n, "Intermediate op called more than " + n + " time(s)");
});
}
} }
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
// This test case relies on updated static security property, no way to re-use
// security property in samevm/agentvm mode.
/*
* @test
* @bug 8042449
* @summary Issue for negative byte major record version
*
* @run main/othervm IllegalRecordVersion
*/
import javax.net.ssl.*;
import javax.net.ssl.SSLEngineResult.*;
import java.io.*;
import java.security.*;
import java.nio.*;
public class IllegalRecordVersion {
public static void main(String args[]) throws Exception {
SSLContext context = SSLContext.getDefault();
SSLEngine cliEngine = context.createSSLEngine();
cliEngine.setUseClientMode(true);
SSLEngine srvEngine = context.createSSLEngine();
srvEngine.setUseClientMode(false);
SSLSession session = cliEngine.getSession();
int netBufferMax = session.getPacketBufferSize();
int appBufferMax = session.getApplicationBufferSize();
ByteBuffer cliToSrv = ByteBuffer.allocateDirect(netBufferMax);
ByteBuffer srvIBuff = ByteBuffer.allocateDirect(appBufferMax + 50);
ByteBuffer cliOBuff = ByteBuffer.wrap("I'm client".getBytes());
System.out.println("client hello (record version(0xa9, 0xa2))");
SSLEngineResult cliRes = cliEngine.wrap(cliOBuff, cliToSrv);
System.out.println("Client wrap result: " + cliRes);
cliToSrv.flip();
if (cliToSrv.limit() > 5) {
cliToSrv.put(1, (byte)0xa9);
cliToSrv.put(2, (byte)0xa2);
}
try {
srvEngine.unwrap(cliToSrv, srvIBuff);
throw new Exception(
"Cannot catch the unsupported record version issue");
} catch (SSLException e) {
// get the expected exception
}
}
}
此差异已折叠。
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 4252164 * @bug 4252164 8041917
* @summary Tests rounded LineBorder for components * @summary Tests rounded LineBorder for components
* @author Sergey Malenkov * @author Sergey Malenkov
* @run applet/manual=yesno Test4252164.html * @run applet/manual=yesno Test4252164.html
......
...@@ -190,9 +190,9 @@ public class bug8016833 { ...@@ -190,9 +190,9 @@ public class bug8016833 {
// not too wide // not too wide
assertTrue(out3.getWidth() * 0.8 < out2.getWidth()); assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
// not too low // not too low
assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 3); assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) < 4);
// not too high // not too high
assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) > 0); assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) > 0);
} }
void testStrikthrough() { void testStrikthrough() {
...@@ -217,7 +217,7 @@ public class bug8016833 { ...@@ -217,7 +217,7 @@ public class bug8016833 {
// not too wide // not too wide
assertTrue(out3.getWidth() * 0.8 < out2.getWidth()); assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
// not too low // not too low
assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 0); assertTrue(out3.getY() - (out1.getY() + out2.getHeight() - 1) < 0);
// not too high // not too high
assertTrue(out3.getY() - out1.getY() > 1); assertTrue(out3.getY() - out1.getY() > 1);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册