view patches/boot/ecj-stringswitch.patch @ 2999:fccb67cea959

Bump to icedtea-2.6.19 Upstream changes: - Bump to icedtea-2.6.19 - PR3729: CVE-2018-3639 fix revision to prefer PR_SPEC_DISABLE_NOEXEC to PR_SPEC_DISABLE - S7152169: TEST_BUG: sun/security/tools/jarsigner/ec.sh occasionally fail due to keytool error on sparc - S7194075: Various classes of sunec.jar are duplicated in rt.jar - S7198901: correct the field size check when decoding a point on ECC curve - S8006799: Optimize sun.nio.cs.ISO_8859_1$Encode.encodeArrayLoop() (jdk part of 6896617) - S8031145: Re-examine closed i18n tests to see it they can be moved to the jdk repository. - S8035974: Refactor DigestBase.engineUpdate() method for better code generation by JIT compiler - S8135248: Add utility methods to check indexes and ranges - S8142493: Utility methods to check indexes and ranges doesn't specify behavior when function produces null - S8146458: Improve exception reporting for Objects.checkIndex/checkFromToIndex/checkFromIndexSize - S8149365, PR3741: aarch64: memory copy does not prefetch on backwards copy - S8151340, PR3741: aarch64: prefetch the destination word for write prior to ldxr/stxr loops. - S8153713, PR3741: aarch64: improve short array clearing using store pair - S8153797, PR3741: aarch64: Add Arrays.fill stub code - S8155617, PR3741: aarch64: ClearArray does not use DC ZVA - S8155794: Move Objects.checkIndex BiFunction accepting methods to an internal package - S8157841, PR3741: aarch64: prefetch ignores cache line size - S8159035: CTSMode.java test crashed due to unhandled case of cipher length value as 0 - S8179098: Crypto AES/ECB encryption/decryption performance regression (introduced in jdk9b73) - S8181594: Efficient and constant-time modular arithmetic - S8182999: SunEC throws ProviderException on invalid curves - S8186325, PR3741: AArch64: jtreg test hotspot/test/gc/g1/TestJNIWeakG1/TestJNIWeakG1.java SEGV - S8187946: Support ISO 4217 Amendments 163 and 164 - S8191073: JpegImageReader throws IndexOutOfBoundsException when trying to read image data from tables-only image - S8193552: ISO 4217 amendment 165 - S8195478: sun/text/resources/LocaleDataTest.java fails with java.lang.Exception - S8201317: X25519/X448 code improvements - S8202026: ISO 4217 amendment 166 - S8203228: Branch-free output conversion for X25519 and X448 - S8204269: ISO 4217 amendment 167 - S8208648: ECC Field Arithmetic Enhancements - S8208698: Improved ECC Implementation - S8208746: ISO 4217 Amendment #168 update - S8209775: ISO 4217 Amendment #169 update - S8210153: localized currency symbol of VES - S8211435: Exception in thread "AWT-EventQueue-1" java.lang.IllegalArgumentException: null source - S8212328: Exceptional throw cases - S8213431: Improve file protocol handling - S8213432: Better copies of CopiesList - S8215982: (tz) Upgrade time-zone data to tzdata2018i - S8216381: More limited privilege usage - S8217563: Improve realm maintenance - S8218781: Localized names for Japanese era Reiwa in COMPAT provider - S8218873: Improve JSSE endpoint checking - S8218876: Improve PNG support options - S8219018: Adjust positions of glyphs - S8219020: Table alternate substitutions - S8219775: Certificate validation improvements - S8220192: Better outlook for SecureRandom - S8220517: Enhanced GIF support - S8221518: Normalize normalization - S8223511: Extended AES support - S8224560: (tz) Upgrade time-zone data to tzdata2019a - S8224671, PR3741: AArch64: mauve System.arraycopy test failure - S8224828, PR3741: aarch64: rflags is not correct after safepoint poll - S8224880, PR3741: AArch64: java/javac error with AllocatePrefetchDistance - S8225580: tzdata2018i integration causes test failures on jdk-13 ChangeLog: 2019-07-16 Andrew John Hughes <gnu_andrew@member.fsf.org> Bump to 2.6.19. * Makefile.am: (CORBA_CHANGESET): Update to icedtea-2.6.19. (JAXP_CHANGESET): Likewise. (JAXWS_CHANGESET): Likewise. (JDK_CHANGESET): Likewise. (LANGTOOLS_CHANGESET): Likewise. (OPENJDK_CHANGESET): Likewise. (CORBA_SHA256SUM): Likewise. (JAXP_SHA256SUM): Likewise. (JAXWS_SHA256SUM): Likewise. (JDK_SHA256SUM): Likewise. (LANGTOOLS_SHA256SUM): Likewise. (OPENJDK_SHA256SUM): Likewise. * NEWS: Updated. * acinclude.m4: (JDK_UPDATE_VERSION): Bump to 231. (BUILD_VERSION): Set to b01. * configure.ac: Bump to 2.6.19. * hotspot.map.in: Update to icedtea-2.6.19. * patches/boot/ecj-diamond.patch: Regenerated. Added new cases in sun.security.util.Optional and sun.security.util.Preconditions. * patches/boot/ecj-multicatch.patch: Add new case in sun.security.util.ECUtil. * patches/boot/ecj-stringswitch.patch: Add new cases in sun.security.util.Preconditions. * patches/pr2124.patch: Regenerated following 7194075 change to move curves to sun.security.ec.CurveDB.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Wed, 17 Jul 2019 16:53:58 +0100
parents eda91878c03f
children 7befa259c1f2
line wrap: on
line source

diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java	2017-12-02 04:12:34.653318334 +0000
@@ -350,19 +350,16 @@
             if (attrCommands != null) {
                 Attribute.Layout lkey = Attribute.keyForLookup(ctype, name);
                 String cmd = attrCommands.get(lkey);
-                if (cmd != null) {
-                    switch (cmd) {
-                        case "pass":
-                            String message1 = "passing attribute bitwise in " + h;
-                            throw new Attribute.FormatException(message1, ctype, name, cmd);
-                        case "error":
-                            String message2 = "attribute not allowed in " + h;
-                            throw new Attribute.FormatException(message2, ctype, name, cmd);
-                        case "strip":
-                            skip(length, name + " attribute in " + h);
-                            continue;
-                    }
-                }
+                if ("pass".equals(cmd)) {
+                    String message1 = "passing attribute bitwise in " + h;
+                    throw new Attribute.FormatException(message1, ctype, name, cmd);
+                } else if ("error".equals(cmd)) {
+                    String message2 = "attribute not allowed in " + h;
+                    throw new Attribute.FormatException(message2, ctype, name, cmd);
+                } else if ("strip".equals(cmd)) {
+                    skip(length, name + " attribute in " + h);
+                    continue;
+                 }
             }
             // Find canonical instance of the requested attribute.
             Attribute a = Attribute.lookup(Package.attrDefs, ctype, name);
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java	2017-12-02 04:12:34.653318334 +0000
@@ -73,16 +73,14 @@
         {
             // Non-standard, undocumented "--unpack" switch enables unpack mode.
             String arg0 = av.isEmpty() ? "" : av.get(0);
-            switch (arg0) {
-                case "--pack":
+            if ("--pack".equals(arg0))
                 av.remove(0);
-                    break;
-                case "--unpack":
-                av.remove(0);
-                doPack = false;
-                doUnpack = true;
-                    break;
-            }
+            else if ("--unpack".equals(arg0))
+                {
+                    av.remove(0);
+                    doPack = false;
+                    doUnpack = true;
+                }
         }
 
         // Collect engine properties here:
@@ -182,21 +180,16 @@
         // Deal with remaining non-engine properties:
         for (String opt : avProps.keySet()) {
             String val = avProps.get(opt);
-            switch (opt) {
-                case "--repack":
-                    doRepack = true;
-                    break;
-                case "--no-gzip":
-                    doZip = (val == null);
-                    break;
-                case "--log-file=":
-                    logFile = val;
-                    break;
-                default:
-                    throw new InternalError(MessageFormat.format(
-                            RESOURCE.getString(DriverResource.BAD_OPTION),
-                            opt, avProps.get(opt)));
-            }
+            if ("--repack".equals(opt))
+                doRepack = true;
+            else if ("--no-gzip".equals(opt))
+                doZip = (val == null);
+            else if ("--log-file=".equals(opt))
+                logFile = val;
+            else
+                throw new InternalError(MessageFormat.format(
+                                                             RESOURCE.getString(DriverResource.BAD_OPTION),
+                                                             opt, avProps.get(opt)));
         }
 
         if (logFile != null && !logFile.equals("")) {
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java	2017-12-02 04:12:34.653318334 +0000
@@ -1107,30 +1107,25 @@
         // what is one of { Debug, Compile, Constant, Exceptions, InnerClasses }
         if (verbose > 0)
             Utils.log.info("Stripping "+what.toLowerCase()+" data and attributes...");
-        switch (what) {
-            case "Debug":
-                strip("SourceFile");
-                strip("LineNumberTable");
-                strip("LocalVariableTable");
-                strip("LocalVariableTypeTable");
-                break;
-            case "Compile":
-                // Keep the inner classes normally.
-                // Although they have no effect on execution,
-                // the Reflection API exposes them, and JCK checks them.
-                // NO: // strip("InnerClasses");
-                strip("Deprecated");
-                strip("Synthetic");
-                break;
-            case "Exceptions":
-                // Keep the exceptions normally.
-                // Although they have no effect on execution,
-                // the Reflection API exposes them, and JCK checks them.
-                strip("Exceptions");
-                break;
-            case "Constant":
-                stripConstantFields();
-                break;
+        if ("Debug".equals(what)) {
+            strip("SourceFile");
+            strip("LineNumberTable");
+            strip("LocalVariableTable");
+            strip("LocalVariableTypeTable");
+        } else if ("Compile".equals(what)) {
+            // Keep the inner classes normally.
+            // Although they have no effect on execution,
+            // the Reflection API exposes them, and JCK checks them.
+            // NO: // strip("InnerClasses");
+            strip("Deprecated");
+            strip("Synthetic");
+        } else if ("Exceptions".equals(what)) {
+            // Keep the exceptions normally.
+            // Although they have no effect on execution,
+            // the Reflection API exposes them, and JCK checks them.
+            strip("Exceptions");
+        } else if ("Constant".equals(what)) {
+            stripConstantFields();
         }
     }
 
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java openjdk-boot/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java	2017-12-02 04:12:34.653318334 +0000
@@ -2161,66 +2161,50 @@
         if (envprops == null || envprops.get(propName) == null) {
             return null;
         }
-        switch (propName) {
-            case REF_SEPARATOR:
-                addrEncodingSeparator = DEFAULT_REF_SEPARATOR;
-                break;
-            case TYPES_ONLY:
-                typesOnly = DEFAULT_TYPES_ONLY;
-                break;
-            case DELETE_RDN:
-                deleteRDN = DEFAULT_DELETE_RDN;
-                break;
-            case DEREF_ALIASES:
-                derefAliases = DEFAULT_DEREF_ALIASES;
-                break;
-            case Context.BATCHSIZE:
-                batchSize = DEFAULT_BATCH_SIZE;
-                break;
-            case REFERRAL_LIMIT:
-                referralHopLimit = DEFAULT_REFERRAL_LIMIT;
-                break;
-            case Context.REFERRAL:
-                setReferralMode(null, true);
-                break;
-            case BINARY_ATTRIBUTES:
-                setBinaryAttributes(null);
-                break;
-            case CONNECT_TIMEOUT:
-                connectTimeout = -1;
-                break;
-            case READ_TIMEOUT:
-                readTimeout = -1;
-                break;
-            case WAIT_FOR_REPLY:
-                waitForReply = true;
-                break;
-            case REPLY_QUEUE_SIZE:
-                replyQueueSize = -1;
-                break;
+        if (REF_SEPARATOR.equals(propName)) {
+	    addrEncodingSeparator = DEFAULT_REF_SEPARATOR;
+	} else if (TYPES_ONLY.equals(propName)) {
+	    typesOnly = DEFAULT_TYPES_ONLY;
+	} else if (DELETE_RDN.equals(propName)) {
+	    deleteRDN = DEFAULT_DELETE_RDN;
+	} else if (DEREF_ALIASES.equals(propName)) {
+	    derefAliases = DEFAULT_DEREF_ALIASES;
+	} else if (Context.BATCHSIZE.equals(propName)) {
+	    batchSize = DEFAULT_BATCH_SIZE;
+	} else if (REFERRAL_LIMIT.equals(propName)) {
+	    referralHopLimit = DEFAULT_REFERRAL_LIMIT;
+	} else if (Context.REFERRAL.equals(propName)) {
+	    setReferralMode(null, true);
+	} else if (BINARY_ATTRIBUTES.equals(propName)) {
+	    setBinaryAttributes(null);
+	} else if (CONNECT_TIMEOUT.equals(propName)) {
+	    connectTimeout = -1;
+	} else if (READ_TIMEOUT.equals(propName)) {
+	    readTimeout = -1;
+	} else if (WAIT_FOR_REPLY.equals(propName)) {
+	    waitForReply = true;
+	} else if (REPLY_QUEUE_SIZE.equals(propName)) {
+	    replyQueueSize = -1;
 
             // The following properties affect the connection
 
-            case Context.SECURITY_PROTOCOL:
-                closeConnection(SOFT_CLOSE);
-                // De-activate SSL and reset the context's url and port number
-                if (useSsl && !hasLdapsScheme) {
-                    useSsl = false;
-                    url = null;
-                    if (useDefaultPortNumber) {
-                        port_number = DEFAULT_PORT;
-                    }
-                }
-                break;
-            case VERSION:
-            case SOCKET_FACTORY:
-                closeConnection(SOFT_CLOSE);
-                break;
-            case Context.SECURITY_AUTHENTICATION:
-            case Context.SECURITY_PRINCIPAL:
-            case Context.SECURITY_CREDENTIALS:
-                sharable = false;
-                break;
+	} else if (Context.SECURITY_PROTOCOL.equals(propName)) {
+	    closeConnection(SOFT_CLOSE);
+	    // De-activate SSL and reset the context's url and port number
+	    if (useSsl && !hasLdapsScheme) {
+		useSsl = false;
+		url = null;
+		if (useDefaultPortNumber) {
+		    port_number = DEFAULT_PORT;
+		}
+	    }
+	} else if (VERSION.equals(propName) ||
+		   SOCKET_FACTORY.equals(propName)) {
+	    closeConnection(SOFT_CLOSE);
+	} else if (Context.SECURITY_AUTHENTICATION.equals(propName) ||
+		   Context.SECURITY_PRINCIPAL.equals(propName) ||
+		   Context.SECURITY_CREDENTIALS.equals(propName)) {
+	    sharable = false;
         }
 
         // Update environment; reconnection will use new props
@@ -2236,66 +2220,50 @@
             if (propVal == null) {
                 return removeFromEnvironment(propName);
             }
-            switch (propName) {
-                case REF_SEPARATOR:
-                    setRefSeparator((String)propVal);
-                    break;
-                case TYPES_ONLY:
-                    setTypesOnly((String)propVal);
-                    break;
-                case DELETE_RDN:
-                    setDeleteRDN((String)propVal);
-                    break;
-                case DEREF_ALIASES:
-                    setDerefAliases((String)propVal);
-                    break;
-                case Context.BATCHSIZE:
-                    setBatchSize((String)propVal);
-                    break;
-                case REFERRAL_LIMIT:
-                    setReferralLimit((String)propVal);
-                    break;
-                case Context.REFERRAL:
-                    setReferralMode((String)propVal, true);
-                    break;
-                case BINARY_ATTRIBUTES:
-                    setBinaryAttributes((String)propVal);
-                    break;
-                case CONNECT_TIMEOUT:
-                    setConnectTimeout((String)propVal);
-                    break;
-                case READ_TIMEOUT:
-                    setReadTimeout((String)propVal);
-                    break;
-                case WAIT_FOR_REPLY:
-                    setWaitForReply((String)propVal);
-                    break;
-                case REPLY_QUEUE_SIZE:
-                    setReplyQueueSize((String)propVal);
-                    break;
-
+            if (REF_SEPARATOR.equals(propName)) {
+		setRefSeparator((String)propVal);
+	    } else if (TYPES_ONLY.equals(propName)) {
+		setTypesOnly((String)propVal);
+	    } else if (DELETE_RDN.equals(propName)) {
+		setDeleteRDN((String)propVal);
+	    } else if (DEREF_ALIASES.equals(propName)) {
+		setDerefAliases((String)propVal);
+	    } else if (Context.BATCHSIZE.equals(propName)) {
+		setBatchSize((String)propVal);
+            } else if (REFERRAL_LIMIT.equals(propName)) {
+		setReferralLimit((String)propVal);
+            } else if (Context.REFERRAL.equals(propName)) {
+		setReferralMode((String)propVal, true);
+	    } else if (BINARY_ATTRIBUTES.equals(propName)) {
+		setBinaryAttributes((String)propVal);
+            } else if (CONNECT_TIMEOUT.equals(propName)) {
+		setConnectTimeout((String)propVal);
+	    } else if (READ_TIMEOUT.equals(propName)) {
+		setReadTimeout((String)propVal);
+	    } else if (WAIT_FOR_REPLY.equals(propName)) {
+		setWaitForReply((String)propVal);
+	    } else if (REPLY_QUEUE_SIZE.equals(propName)) {
+		setReplyQueueSize((String)propVal);
+		
             // The following properties affect the connection
 
-                case Context.SECURITY_PROTOCOL:
-                    closeConnection(SOFT_CLOSE);
-                    // Activate SSL and reset the context's url and port number
-                    if ("ssl".equals(propVal)) {
-                        useSsl = true;
-                        url = null;
-                        if (useDefaultPortNumber) {
-                            port_number = DEFAULT_SSL_PORT;
-                        }
-                    }
-                    break;
-                case VERSION:
-                case SOCKET_FACTORY:
-                    closeConnection(SOFT_CLOSE);
-                    break;
-                case Context.SECURITY_AUTHENTICATION:
-                case Context.SECURITY_PRINCIPAL:
-                case Context.SECURITY_CREDENTIALS:
-                    sharable = false;
-                    break;
+	    } else if (Context.SECURITY_PROTOCOL.equals(propName)) {
+		closeConnection(SOFT_CLOSE);
+		// Activate SSL and reset the context's url and port number
+		if ("ssl".equals(propVal)) {
+		    useSsl = true;
+		    url = null;
+		    if (useDefaultPortNumber) {
+			port_number = DEFAULT_SSL_PORT;
+		    }
+		}
+	    } else if (VERSION.equals(propName) ||
+		       SOCKET_FACTORY.equals(propName)) {
+		closeConnection(SOFT_CLOSE);
+	    } else if (Context.SECURITY_AUTHENTICATION.equals(propName) ||
+		       Context.SECURITY_PRINCIPAL.equals(propName) ||
+		       Context.SECURITY_CREDENTIALS.equals(propName)) {
+		sharable = false;
             }
 
             // Update environment; reconnection will use new props
@@ -2412,22 +2380,17 @@
     private void setReferralMode(String ref, boolean update) {
         // First determine the referral mode
         if (ref != null) {
-            switch (ref) {
-                case "follow-scheme":
-                    handleReferrals = LdapClient.LDAP_REF_FOLLOW_SCHEME;
-                    break;
-                case "follow":
-                    handleReferrals = LdapClient.LDAP_REF_FOLLOW;
-                    break;
-                case "throw":
-                    handleReferrals = LdapClient.LDAP_REF_THROW;
-                    break;
-                case "ignore":
-                    handleReferrals = LdapClient.LDAP_REF_IGNORE;
-                    break;
-                default:
-                    throw new IllegalArgumentException(
-                        "Illegal value for " + Context.REFERRAL + " property.");
+	    if ("follow-scheme".equals(ref)) {
+		handleReferrals = LdapClient.LDAP_REF_FOLLOW_SCHEME;
+	    } else if ("follow".equals(ref)) {
+		handleReferrals = LdapClient.LDAP_REF_FOLLOW;
+	    } else if ("throw".equals(ref)) {
+		handleReferrals = LdapClient.LDAP_REF_THROW;
+	    } else if ("ignore".equals(ref)) {
+		handleReferrals = LdapClient.LDAP_REF_IGNORE;
+	    } else {
+		throw new IllegalArgumentException(
+		    "Illegal value for " + Context.REFERRAL + " property.");
             }
         } else {
             handleReferrals = DEFAULT_REFERRAL_MODE;
@@ -2450,20 +2413,15 @@
      */
     private void setDerefAliases(String deref) {
         if (deref != null) {
-            switch (deref) {
-                case "never":
-                    derefAliases = 0; // never de-reference aliases
-                    break;
-                case "searching":
+	    if ("never".equals(deref)) {
+		derefAliases = 0; // never de-reference aliases
+	    } else if ("searching".equals(deref)) {
                     derefAliases = 1; // de-reference aliases during searching
-                    break;
-                case "finding":
-                    derefAliases = 2; // de-reference during name resolution
-                    break;
-                case "always":
-                    derefAliases = 3; // always de-reference aliases
-                    break;
-                default:
+	    } else if ("finding".equals(deref)) {
+		derefAliases = 2; // de-reference during name resolution
+	    } else if ("always".equals(deref)) {
+		derefAliases = 3; // always de-reference aliases
+	    } else {
                     throw new IllegalArgumentException("Illegal value for " +
                         DEREF_ALIASES + " property.");
             }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java	2017-12-02 04:12:34.653318334 +0000
@@ -65,17 +65,23 @@
 
     protected NTLM(String version) throws NTLMException {
         if (version == null) version = "LMv2/NTLMv2";
-        switch (version) {
-            case "LM": v = NTLM; writeLM = true; writeNTLM = false; break;
-            case "NTLM": v = NTLM; writeLM = false; writeNTLM = true; break;
-            case "LM/NTLM": v = NTLM; writeLM = writeNTLM = true; break;
-            case "NTLM2": v = NTLM2; writeLM = writeNTLM = true; break;
-            case "LMv2": v = NTLMv2; writeLM = true; writeNTLM = false; break;
-            case "NTLMv2": v = NTLMv2; writeLM = false; writeNTLM = true; break;
-            case "LMv2/NTLMv2": v = NTLMv2; writeLM = writeNTLM = true; break;
-            default: throw new NTLMException(NTLMException.BAD_VERSION,
-                    "Unknown version " + version);
-        }
+        if (version.equals("LM"))
+          { v = NTLM; writeLM = true; writeNTLM = false; }
+        else if (version.equals("NTLM"))
+          { v = NTLM; writeLM = false; writeNTLM = true; }
+        else if (version.equals("LM/NTLM"))
+          { v = NTLM; writeLM = writeNTLM = true; }
+        else if (version.equals("NTLM2"))
+          { v = NTLM2; writeLM = writeNTLM = true; }
+        else if (version.equals("LMv2"))
+          { v = NTLMv2; writeLM = true; writeNTLM = false; }
+        else if (version.equals("NTLMv2"))
+          { v = NTLMv2; writeLM = false; writeNTLM = true; }
+        else if (version.equals("LMv2/NTLMv2"))
+          { v = NTLMv2; writeLM = writeNTLM = true; }
+        else
+          throw new NTLMException(NTLMException.BAD_VERSION,
+                                  "Unknown version " + version);
         try {
             fac = SecretKeyFactory.getInstance ("DES");
             cipher = Cipher.getInstance ("DES/ECB/NoPadding");
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Base.java	2017-12-02 04:12:34.653318334 +0000
@@ -1579,21 +1579,18 @@
         KeySpec spec = null;
         SecretKeyFactory desFactory =
             SecretKeyFactory.getInstance(desStrength);
-        switch (desStrength) {
-            case "des":
-                spec = new DESKeySpec(subkey1, 0);
-                if (logger.isLoggable(Level.FINEST)) {
-                    traceOutput(DP_CLASS_NAME, "makeDesKeys",
-                        "DIGEST42:DES key input: ", input);
-                    traceOutput(DP_CLASS_NAME, "makeDesKeys",
-                        "DIGEST43:DES key parity-adjusted: ", subkey1);
-                    traceOutput(DP_CLASS_NAME, "makeDesKeys",
-                        "DIGEST44:DES key material: ", ((DESKeySpec)spec).getKey());
-                    logger.log(Level.FINEST, "DIGEST45: is parity-adjusted? {0}",
-                        Boolean.valueOf(DESKeySpec.isParityAdjusted(subkey1, 0)));
-                }
-                break;
-            case "desede":
+	if ("des".equals(desStrength)) {
+	    spec = new DESKeySpec(subkey1, 0);
+	    if (logger.isLoggable(Level.FINEST)) {
+		traceOutput(DP_CLASS_NAME, "makeDesKeys",
+			    "DIGEST42:DES key input: ", input);
+		traceOutput(DP_CLASS_NAME, "makeDesKeys",
+			    "DIGEST43:DES key parity-adjusted: ", subkey1);
+		traceOutput(DP_CLASS_NAME, "makeDesKeys",
+			    "DIGEST44:DES key material: ", ((DESKeySpec)spec).getKey());
+		logger.log(Level.FINEST, "DIGEST45: is parity-adjusted? {0}",
+			   Boolean.valueOf(DESKeySpec.isParityAdjusted(subkey1, 0)));
+	    } else if ("desede".equals(desStrength)) {
                 // Generate second subkey using second 7 bytes
                 byte[] subkey2 = addDesParity(input, 7, 7);
                 // Construct 24-byte encryption-decryption-encryption sequence
@@ -1614,10 +1611,10 @@
                     logger.log(Level.FINEST, "DIGEST49: is parity-adjusted? ",
                         Boolean.valueOf(DESedeKeySpec.isParityAdjusted(ede, 0)));
                 }
-                break;
-            default:
+	    } else {
                 throw new IllegalArgumentException("Invalid DES strength:" +
-                    desStrength);
+						   desStrength);
+	    }
         }
         return desFactory.generateSecret(spec);
     }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Server.java openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Server.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Server.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/digest/DigestMD5Server.java	2017-12-02 04:12:34.653318334 +0000
@@ -461,21 +461,17 @@
 
         // Check that QOP is one sent by server
         byte cQop;
-        switch (negotiatedQop) {
-            case "auth":
+        if ("auth".equals(negotiatedQop)) {
                 cQop = NO_PROTECTION;
-                break;
-            case "auth-int":
+	} else if ("auth-int".equals(negotiatedQop)) {
                 cQop = INTEGRITY_ONLY_PROTECTION;
                 integrity = true;
                 rawSendSize = sendMaxBufSize - 16;
-                break;
-            case "auth-conf":
+	} else if ("auth-conf".equals(negotiatedQop)) {
                 cQop = PRIVACY_PROTECTION;
                 integrity = privacy = true;
                 rawSendSize = sendMaxBufSize - 26;
-                break;
-            default:
+	} else {
                 throw new SaslException("DIGEST-MD5: digest response format " +
                     "violation. Invalid QOP: " + negotiatedQop);
         }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java	2017-12-02 04:12:34.653318334 +0000
@@ -205,13 +205,12 @@
         if (!isComplete()) {
             throw new IllegalStateException("authentication not complete");
         }
-        switch (propName) {
-            case Sasl.QOP:
-                return "auth";
-            case NTLM_DOMAIN:
-                return client.getDomain();
-            default:
-                return null;
+	if (Sasl.QOP.equals(propName)) {
+	    return "auth";
+	} else if (NTLM_DOMAIN.equals(propName)) {
+	    return client.getDomain();
+	} else {
+	    return null;
         }
     }
 
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java	2017-12-02 04:12:34.653318334 +0000
@@ -219,13 +219,12 @@
         if (!isComplete()) {
             throw new IllegalStateException("authentication not complete");
         }
-        switch (propName) {
-            case Sasl.QOP:
-                return "auth";
-            case NTLM_HOSTNAME:
-                return hostname;
-            default:
-                return null;
+	if (propName.equals(Sasl.QOP)) {
+	    return "auth";
+	} else if (propName.equals(NTLM_HOSTNAME)) {
+	    return hostname;
+	} else {
+	    return null;
         }
     }
 
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java	2017-12-02 04:12:34.653318334 +0000
@@ -155,23 +155,22 @@
         if (!completed) {
             throw new IllegalStateException("SASL authentication not completed");
         }
-        switch (propName) {
-            case Sasl.QOP:
-                if (privacy) {
-                    return "auth-conf";
-                } else if (integrity) {
-                    return "auth-int";
-                } else {
-                    return "auth";
-                }
-            case Sasl.MAX_BUFFER:
-                return Integer.toString(recvMaxBufSize);
-            case Sasl.RAW_SEND_SIZE:
-                return Integer.toString(rawSendSize);
-            case MAX_SEND_BUF:
-                return Integer.toString(sendMaxBufSize);
-            default:
-                return null;
+	if (Sasl.QOP.equals(propName)) {
+	    if (privacy) {
+		return "auth-conf";
+	    } else if (integrity) {
+		return "auth-int";
+	    } else {
+		return "auth";
+	    }
+	} else if (Sasl.MAX_BUFFER.equals(propName)) {
+	    return Integer.toString(recvMaxBufSize);
+	} else if (Sasl.RAW_SEND_SIZE.equals(propName)) {
+	    return Integer.toString(rawSendSize);
+	} else if (MAX_SEND_BUF.equals(propName)) {
+	    return Integer.toString(sendMaxBufSize);
+	} else {
+	    return null;
         }
     }
 
diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java
--- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java	2017-12-02 04:12:34.653318334 +0000
@@ -328,12 +328,11 @@
                                      Object[] appendixResult) {
         try {
             if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
-                switch (name) {
-                case "invoke":
-                    return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
-                case "invokeExact":
-                    return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
-                }
+	      if ("invoke".equals(name)) {
+		return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
+	      } else if ("invokeExact".equals(name)) {
+		return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
+	      }
             }
         } catch (Throwable ex) {
             if (ex instanceof LinkageError)
@@ -403,124 +402,120 @@
     // this method is also called by test/sun/reflect/CallerSensitiveFinder
     // to validate the hand-maintained list
     private static boolean isCallerSensitiveMethod(Class<?> defc, String method) {
-        switch (method) {
-        case "doPrivileged":
-        case "doPrivilegedWithCombiner":
+	if ("doPrivileged".equals(method) ||
+	    "doPrivilegedWithCombiner".equals(method)) {
             return defc == java.security.AccessController.class;
-        case "checkMemberAccess":
-            return defc == java.lang.SecurityManager.class;
-        case "getUnsafe":
-            return defc == sun.misc.Unsafe.class;
-        case "lookup":
-            return defc == java.lang.invoke.MethodHandles.class;
-        case "invoke":
-            return defc == java.lang.reflect.Method.class;
-        case "get":
-        case "getBoolean":
-        case "getByte":
-        case "getChar":
-        case "getShort":
-        case "getInt":
-        case "getLong":
-        case "getFloat":
-        case "getDouble":
-        case "set":
-        case "setBoolean":
-        case "setByte":
-        case "setChar":
-        case "setShort":
-        case "setInt":
-        case "setLong":
-        case "setFloat":
-        case "setDouble":
-            return defc == java.lang.reflect.Field.class;
-        case "newInstance":
-            if (defc == java.lang.reflect.Constructor.class)  return true;
-            if (defc == java.lang.Class.class)  return true;
-            break;
-        case "getFields":
-            return defc == java.lang.Class.class ||
-                   defc == javax.sql.rowset.serial.SerialJavaObject.class;
-        case "forName":
-        case "getClassLoader":
-        case "getClasses":
-        case "getMethods":
-        case "getConstructors":
-        case "getDeclaredClasses":
-        case "getDeclaredFields":
-        case "getDeclaredMethods":
-        case "getDeclaredConstructors":
-        case "getField":
-        case "getMethod":
-        case "getConstructor":
-        case "getDeclaredField":
-        case "getDeclaredMethod":
-        case "getDeclaredConstructor":
-        case "getDeclaringClass":
-        case "getEnclosingClass":
-        case "getEnclosingMethod":
-        case "getEnclosingConstructor":
-            return defc == java.lang.Class.class;
-        case "getConnection":
-        case "getDriver":
-        case "getDrivers":
-        case "deregisterDriver":
-            return defc == java.sql.DriverManager.class;
-        case "newUpdater":
-            if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class)  return true;
-            if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class)  return true;
-            if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class)  return true;
-            break;
-        case "getContextClassLoader":
-            return defc == java.lang.Thread.class;
-        case "getPackage":
-        case "getPackages":
-            return defc == java.lang.Package.class;
-        case "getParent":
-        case "getSystemClassLoader":
-            return defc == java.lang.ClassLoader.class;
-        case "load":
-        case "loadLibrary":
-            if (defc == java.lang.Runtime.class)  return true;
-            if (defc == java.lang.System.class)  return true;
-            break;
-        case "getCallerClass":
-            if (defc == sun.reflect.Reflection.class)  return true;
-            if (defc == java.lang.System.class)  return true;
-            break;
-        case "getCallerClassLoader":
-            return defc == java.lang.ClassLoader.class;
-        case "registerAsParallelCapable":
-            return defc == java.lang.ClassLoader.class;
-        case "getInvocationHandler":
-        case "getProxyClass":
-        case "newProxyInstance":
-            return defc == java.lang.reflect.Proxy.class;
-        case "asInterfaceInstance":
-            return defc == java.lang.invoke.MethodHandleProxies.class;
-        case "getBundle":
-        case "clearCache":
-            return defc == java.util.ResourceBundle.class;
-        case "getType":
-            return defc == java.io.ObjectStreamField.class;
-        case "forClass":
-            return defc == java.io.ObjectStreamClass.class;
-        case "getLogger":
-            return defc == java.util.logging.Logger.class;
-        case "getAnonymousLogger":
-            return defc == java.util.logging.Logger.class;
-        }
-        return false;
+	} else if ("checkMemberAccess".equals(method)) {
+             return defc == java.lang.SecurityManager.class;
+        } else if ("getUnsafe".equals(method)) {
+             return defc == sun.misc.Unsafe.class;
+	} else if ("lookup".equals(method)) {
+             return defc == java.lang.invoke.MethodHandles.class;
+	} else if ("invoke".equals(method)) {
+             return defc == java.lang.reflect.Method.class;
+	} else if ("get".equals(method) ||
+		   "getBoolean".equals(method) ||
+		   "getByte".equals(method) ||
+		   "getChar".equals(method) ||
+		   "getShort".equals(method) ||
+		   "getInt".equals(method) ||
+		   "getLong".equals(method) ||
+		   "getFloat".equals(method) ||
+		   "getDouble".equals(method) ||
+		   "set".equals(method) ||
+		   "setBoolean".equals(method) ||
+		   "setByte".equals(method) ||
+		   "setChar".equals(method) ||
+		   "setShort".equals(method) ||
+		   "setInt".equals(method) ||
+		   "setLong".equals(method) ||
+		   "setFloat".equals(method) ||
+		   "setDouble".equals(method)) {
+             return defc == java.lang.reflect.Field.class;
+	} else if ("newInstance".equals(method)) {
+             if (defc == java.lang.reflect.Constructor.class)  return true;
+             if (defc == java.lang.Class.class)  return true;
+	} else if ("getFields".equals(method)) {
+             return defc == java.lang.Class.class ||
+                    defc == javax.sql.rowset.serial.SerialJavaObject.class;
+	} else if ("forName".equals(method) ||
+		   "getClassLoader".equals(method) ||
+		   "getClasses".equals(method) ||
+		   "getFields".equals(method) ||
+		   "getMethods".equals(method) ||
+		   "getConstructors".equals(method) ||
+		   "getDeclaredClasses".equals(method) ||
+		   "getDeclaredFields".equals(method) ||
+		   "getDeclaredMethods".equals(method) ||
+		   "getDeclaredConstructors".equals(method) ||
+		   "getField".equals(method) ||
+		   "getMethod".equals(method) ||
+		   "getConstructor".equals(method) ||
+		   "getDeclaredField".equals(method) ||
+		   "getDeclaredMethod".equals(method) ||
+		   "getDeclaredConstructor".equals(method) ||
+		   "getDeclaringClass".equals(method) ||
+		   "getEnclosingClass".equals(method) ||
+		   "getEnclosingMethod".equals(method) ||
+		   "getEnclosingConstructor".equals(method)) {
+             return defc == java.lang.Class.class;
+	} else if ("getConnection".equals(method) ||
+		   "getDriver".equals(method) ||
+		   "getDrivers".equals(method) ||
+		   "deregisterDriver".equals(method)) {
+             return defc == java.sql.DriverManager.class;
+        } else if ("newUpdater".equals(method)) {
+             if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class)  return true;
+             if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class)  return true;
+             if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class)  return true;
+        } else if ("getContextClassLoader".equals(method)) {
+             return defc == java.lang.Thread.class;
+        } else if ("getPackage".equals(method) ||
+		   "getPackages".equals(method)) {
+             return defc == java.lang.Package.class;
+        } else if ("getParent".equals(method) ||
+		   "getSystemClassLoader".equals(method)) {
+             return defc == java.lang.ClassLoader.class;
+        } else if ("load".equals(method) ||
+		   "loadLibrary".equals(method)) {
+             if (defc == java.lang.Runtime.class)  return true;
+             if (defc == java.lang.System.class)  return true;
+        } else if ("getCallerClass".equals(method)) {
+             if (defc == sun.reflect.Reflection.class)  return true;
+             if (defc == java.lang.System.class)  return true;
+	} else if ("getCallerClassLoader".equals(method)) {
+             return defc == java.lang.ClassLoader.class;
+        } else if ("registerAsParallelCapable".equals(method)) {
+             return defc == java.lang.ClassLoader.class;
+        } else if ("getProxyClass".equals(method) ||
+                   "getInvocationHandler".equals(method) ||
+		   "newProxyInstance".equals(method)) {
+             return defc == java.lang.reflect.Proxy.class;
+        } else if ("asInterfaceInstance".equals(method)) {
+             return defc == java.lang.invoke.MethodHandleProxies.class;
+        } else if ("getBundle".equals(method) ||
+		   "clearCache".equals(method)) {
+             return defc == java.util.ResourceBundle.class;
+        } else if ("getType".equals(method)) {
+             return defc == java.io.ObjectStreamField.class;
+        } else if ("forClass".equals(method)) {
+             return defc == java.io.ObjectStreamClass.class;
+        } else if ("getLogger".equals(method)) {
+             return defc == java.util.logging.Logger.class;
+        } else if ("getAnonymousLogger".equals(method)) {
+             return defc == java.util.logging.Logger.class;
+         }
+         return false;
     }
 
 
     private static boolean canBeCalledVirtual(MemberName mem) {
         assert(mem.isInvocable());
         Class<?> defc = mem.getDeclaringClass();
-        switch (mem.getName()) {
-        case "checkMemberAccess":
+	String memName = mem.getName();
+	if ("checkMemberAccess".equals(memName)) {
             return canBeCalledVirtual(mem, java.lang.SecurityManager.class);
-        case "getContextClassLoader":
+        } else if ("getContextClassLoader".equals(memName)) {
             return canBeCalledVirtual(mem, java.lang.Thread.class);
         }
         return false;
diff -Nru openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java
--- openjdk-boot.orig/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/java/lang/invoke/MethodHandleProxies.java	2017-12-02 04:12:34.653318334 +0000
@@ -269,14 +269,16 @@
 
     private static
     boolean isObjectMethod(Method m) {
-        switch (m.getName()) {
-        case "toString":
+        String name = m.getName();
+        if ("toString".equals(name)) {
             return (m.getReturnType() == String.class
                     && m.getParameterTypes().length == 0);
-        case "hashCode":
+        }
+        if ("hashCode".equals(name)) {
             return (m.getReturnType() == int.class
                     && m.getParameterTypes().length == 0);
-        case "equals":
+        }
+        if ("equals".equals(name)) {
             return (m.getReturnType() == boolean.class
                     && m.getParameterTypes().length == 1
                     && m.getParameterTypes()[0] == Object.class);
@@ -287,12 +289,14 @@
     private static
     Object callObjectMethod(Object self, Method m, Object[] args) {
         assert(isObjectMethod(m)) : m;
-        switch (m.getName()) {
-        case "toString":
+        String name = m.getName();
+        if ("toString".equals(name)) {
             return self.getClass().getName() + "@" + Integer.toHexString(self.hashCode());
-        case "hashCode":
+        }
+        if ("hashCode".equals(name)) {
             return System.identityHashCode(self);
-        case "equals":
+        }
+        if ("equals".equals(name)) {
             return (self == args[0]);
         }
         return null;
diff -Nru openjdk-boot.orig/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/Policy.java openjdk-boot/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/Policy.java
--- openjdk-boot.orig/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/Policy.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/Policy.java	2017-12-02 04:12:34.653318334 +0000
@@ -81,56 +81,47 @@
         for (String entry : entries) {
             String[] tokens = entry.split("\\s");
             String type = tokens[0];
-            switch(type) {
-                case "disallowAlg":
-                    if (tokens.length != 2) {
-                        error(entry);
-                    }
-                    disallowedAlgs.add(URI.create(tokens[1]));
-                    break;
-                case "maxTransforms":
-                    if (tokens.length != 2) {
-                        error(entry);
-                    }
-                    maxTrans = Parsing.parseUnsignedInt(tokens[1]);
-                    break;
-                case "maxReferences":
-                    if (tokens.length != 2) {
-                        error(entry);
-                    }
-                    maxRefs = Parsing.parseUnsignedInt(tokens[1]);
-                    break;
-                case "disallowReferenceUriSchemes":
-                    if (tokens.length == 1) {
-                        error(entry);
-                    }
-                    for (int i = 1; i < tokens.length; i++) {
-                        String scheme = tokens[i];
-                        disallowedRefUriSchemes.add(
-                            scheme.toLowerCase(Locale.ROOT));
-                    }
-                    break;
-                case "minKeySize":
-                    if (tokens.length != 3) {
-                        error(entry);
-                    }
-                    minKeyMap.put(tokens[1],
-                                  Parsing.parseUnsignedInt(tokens[2]));
-                    break;
-                case "noDuplicateIds":
-                    if (tokens.length != 1) {
-                        error(entry);
-                    }
-                    noDuplicateIds = true;
-                    break;
-                case "noRetrievalMethodLoops":
-                    if (tokens.length != 1) {
-                        error(entry);
-                    }
-                    noRMLoops = true;
-                    break;
-                default:
+            if ("disallowAlg".equals(type)) {
+                if (tokens.length != 2) {
                     error(entry);
+                }
+                disallowedAlgs.add(URI.create(tokens[1]));
+            } else if ("maxTransforms".equals(type)) {
+                if (tokens.length != 2) {
+                    error(entry);
+                }
+                maxTrans = Parsing.parseUnsignedInt(tokens[1]);
+            } else if ("maxReferences".equals(type)) {
+                if (tokens.length != 2) {
+                    error(entry);
+                }
+                maxRefs = Parsing.parseUnsignedInt(tokens[1]);
+            } else if ("disallowReferenceUriSchemes".equals(type)) {
+                if (tokens.length == 1) {
+                    error(entry);
+                }
+                for (int i = 1; i < tokens.length; i++) {
+                    String scheme = tokens[i];
+                    disallowedRefUriSchemes.add(scheme.toLowerCase(Locale.ROOT));
+                }
+            } else if ("minKeySize".equals(type)) {
+                if (tokens.length != 3) {
+                    error(entry);
+                }
+                minKeyMap.put(tokens[1],
+                              Parsing.parseUnsignedInt(tokens[2]));
+            } else if ("noDuplicateIds".equals(type)) {
+                if (tokens.length != 1) {
+                    error(entry);
+                }
+                noDuplicateIds = true;
+            } else if ("noRetrievalMethodLoops".equals(type)) {
+                if (tokens.length != 1) {
+                    error(entry);
+                }
+                noRMLoops = true;
+            } else {
+                error(entry);
             }
         }
     }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/launcher/LauncherHelper.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/launcher/LauncherHelper.java	2017-12-02 04:12:34.653318334 +0000
@@ -119,24 +119,20 @@
         String optStr = (opts.length > 1 && opts[1] != null)
                 ? opts[1].trim()
                 : "all";
-        switch (optStr) {
-            case "vm":
+        if ("vm".equals(optStr))
+            printVmSettings(ostream, initialHeapSize, maxHeapSize,
+                            stackSize, isServer);
+        else if ("properties".equals(optStr))
+            printProperties(ostream);
+        else if ("locale".equals(optStr))
+            printLocale(ostream);
+        else
+            {
                 printVmSettings(ostream, initialHeapSize, maxHeapSize,
-                        stackSize, isServer);
-                break;
-            case "properties":
+                                stackSize, isServer);
                 printProperties(ostream);
-                break;
-            case "locale":
                 printLocale(ostream);
-                break;
-            default:
-                printVmSettings(ostream, initialHeapSize, maxHeapSize,
-                        stackSize, isServer);
-                printProperties(ostream);
-                printLocale(ostream);
-                break;
-        }
+            }
     }
 
     /*
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java openjdk-boot/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	2017-12-02 04:12:34.657318268 +0000
@@ -65,14 +65,12 @@
         if (paramTypes.length != 0)
             throw new AssertionError("Too many parameters for an annotation method");
 
-        switch(member) {
-        case "toString":
+	if ("toString".equals(member))
             return toStringImpl();
-        case "hashCode":
+	if ("hashCode".equals(member))
             return hashCodeImpl();
-        case "annotationType":
+	if ("annotationType".equals(member))
             return type;
-        }
 
         // Handle annotation member accessors
         Object result = memberValues.get(member);
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/krb5/Config.java openjdk-boot/jdk/src/share/classes/sun/security/krb5/Config.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/krb5/Config.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/krb5/Config.java	2017-12-02 04:12:34.657318268 +0000
@@ -428,14 +428,13 @@
         if (s == null) {
             return null;
         }
-        switch (s.toLowerCase(Locale.US)) {
-            case "yes": case "true":
+        String lCase = s.toLowerCase(Locale.US);
+        if ("yes".equals(lCase) || "true".equals(lCase)) {
                 return Boolean.TRUE;
-            case "no": case "false":
+        } else if ("no".equals(lCase) || "false".equals(lCase)) {
                 return Boolean.FALSE;
-            default:
-                return null;
         }
+        return null;
     }
 
     /**
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/pkcs11/Config.java openjdk-boot/jdk/src/share/classes/sun/security/pkcs11/Config.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/pkcs11/Config.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/pkcs11/Config.java	2017-12-02 04:12:34.657318268 +0000
@@ -574,13 +574,12 @@
 
     private boolean parseBoolean() throws IOException {
         String val = parseWord();
-        switch (val) {
-            case "true":
-                return true;
-            case "false":
-                return false;
-            default:
-                throw excToken("Expected boolean value, read:");
+	if ("true".equals(val)) {
+	    return true;
+	} else if ("false".equals(val)) {
+	    return false;
+	} else {
+	    throw excToken("Expected boolean value, read:");
         }
     }
 
@@ -917,15 +916,14 @@
 
     private String parseOperation() throws IOException {
         String op = parseWord();
-        switch (op) {
-            case "*":
-                return TemplateManager.O_ANY;
-            case "generate":
-                return TemplateManager.O_GENERATE;
-            case "import":
-                return TemplateManager.O_IMPORT;
-            default:
-                throw excLine("Unknown operation " + op);
+	if ("*".equals(op)) {
+	    return TemplateManager.O_ANY;
+	} else if ("generate".equals(op)) {
+	    return TemplateManager.O_GENERATE;
+	} else if ("import".equals(op)) {
+	    return TemplateManager.O_IMPORT;
+	} else {
+	    throw excLine("Unknown operation " + op);
         }
     }
 
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/pkcs11/P11Key.java openjdk-boot/jdk/src/share/classes/sun/security/pkcs11/P11Key.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/pkcs11/P11Key.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/pkcs11/P11Key.java	2017-12-02 04:12:34.657318268 +0000
@@ -304,22 +304,21 @@
     // we assume that all components of public keys are always accessible
     static PublicKey publicKey(Session session, long keyID, String algorithm,
             int keyLength, CK_ATTRIBUTE[] attributes) {
-        switch (algorithm) {
-            case "RSA":
-                return new P11RSAPublicKey
-                    (session, keyID, algorithm, keyLength, attributes);
-            case "DSA":
-                return new P11DSAPublicKey
-                    (session, keyID, algorithm, keyLength, attributes);
-            case "DH":
-                return new P11DHPublicKey
-                    (session, keyID, algorithm, keyLength, attributes);
-            case "EC":
-                return new P11ECPublicKey
-                    (session, keyID, algorithm, keyLength, attributes);
-            default:
-                throw new ProviderException
-                    ("Unknown public key algorithm " + algorithm);
+	if ("RSA".equals(algorithm)) {
+	    return new P11RSAPublicKey
+		(session, keyID, algorithm, keyLength, attributes);
+	} else if ("DSA".equals(algorithm)) {
+	    return new P11DSAPublicKey
+		(session, keyID, algorithm, keyLength, attributes);
+	} else if ("DH".equals(algorithm)) {
+	    return new P11DHPublicKey
+		(session, keyID, algorithm, keyLength, attributes);
+	} else if ("EC".equals(algorithm)) {
+	    return new P11ECPublicKey
+		(session, keyID, algorithm, keyLength, attributes);
+	} else {
+	    throw new ProviderException
+		("Unknown public key algorithm " + algorithm);
         }
     }
 
@@ -334,43 +333,42 @@
             return new P11PrivateKey
                 (session, keyID, algorithm, keyLength, attributes);
         } else {
-            switch (algorithm) {
-                case "RSA":
-                    // XXX better test for RSA CRT keys (single getAttributes() call)
-                    // we need to determine whether this is a CRT key
-                    // see if we can obtain the public exponent
-                    // this should also be readable for sensitive/extractable keys
-                    CK_ATTRIBUTE[] attrs2 = new CK_ATTRIBUTE[] {
-                        new CK_ATTRIBUTE(CKA_PUBLIC_EXPONENT),
-                    };
-                    boolean crtKey;
-                    try {
-                        session.token.p11.C_GetAttributeValue
-                            (session.id(), keyID, attrs2);
-                        crtKey = (attrs2[0].pValue instanceof byte[]);
-                    } catch (PKCS11Exception e) {
-                        // ignore, assume not available
-                        crtKey = false;
-                    }
-                    if (crtKey) {
-                        return new P11RSAPrivateKey
-                                (session, keyID, algorithm, keyLength, attributes);
-                    } else {
-                        return new P11RSAPrivateNonCRTKey
-                                (session, keyID, algorithm, keyLength, attributes);
-                    }
-                case "DSA":
-                    return new P11DSAPrivateKey
-                            (session, keyID, algorithm, keyLength, attributes);
-                case "DH":
-                    return new P11DHPrivateKey
-                            (session, keyID, algorithm, keyLength, attributes);
-                case "EC":
-                    return new P11ECPrivateKey
-                            (session, keyID, algorithm, keyLength, attributes);
-                default:
-                    throw new ProviderException
-                            ("Unknown private key algorithm " + algorithm);
+	    if ("RSA".equals(algorithm)) {
+		// XXX better test for RSA CRT keys (single getAttributes() call)
+		// we need to determine whether this is a CRT key
+		// see if we can obtain the public exponent
+		// this should also be readable for sensitive/extractable keys
+		CK_ATTRIBUTE[] attrs2 = new CK_ATTRIBUTE[] {
+		    new CK_ATTRIBUTE(CKA_PUBLIC_EXPONENT),
+		};
+		boolean crtKey;
+		try {
+		    session.token.p11.C_GetAttributeValue
+			(session.id(), keyID, attrs2);
+		    crtKey = (attrs2[0].pValue instanceof byte[]);
+		} catch (PKCS11Exception e) {
+		    // ignore, assume not available
+		    crtKey = false;
+		}
+		if (crtKey) {
+		    return new P11RSAPrivateKey
+			(session, keyID, algorithm, keyLength, attributes);
+		} else {
+		    return new P11RSAPrivateNonCRTKey
+			(session, keyID, algorithm, keyLength, attributes);
+		}
+	    } else if ("DSA".equals(algorithm)) {
+		return new P11DSAPrivateKey
+		    (session, keyID, algorithm, keyLength, attributes);
+	    } else if ("DH".equals(algorithm)) {
+		return new P11DHPrivateKey
+		    (session, keyID, algorithm, keyLength, attributes);
+	    } else if ("EC".equals(algorithm)) {
+		return new P11ECPrivateKey
+		    (session, keyID, algorithm, keyLength, attributes);
+	    } else {
+		throw new ProviderException
+		    ("Unknown private key algorithm " + algorithm);
             }
         }
     }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/provider/certpath/X509CertPath.java openjdk-boot/jdk/src/share/classes/sun/security/provider/certpath/X509CertPath.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/provider/certpath/X509CertPath.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/provider/certpath/X509CertPath.java	2017-12-02 04:13:08.524771964 +0000
@@ -152,15 +152,12 @@
             throws CertificateException {
         super("X.509");
 
-        switch (encoding) {
-            case PKIPATH_ENCODING:
-                certs = parsePKIPATH(is);
-                break;
-            case PKCS7_ENCODING:
-                certs = parsePKCS7(is);
-                break;
-            default:
-                throw new CertificateException("unsupported encoding");
+	if (PKIPATH_ENCODING.equals(encoding)) {
+	    certs = parsePKIPATH(is);
+	} else if (PKCS7_ENCODING.equals(encoding)) {
+	    certs = parsePKCS7(is);
+	} else {
+	    throw new CertificateException("unsupported encoding");
         }
     }
 
@@ -345,14 +342,12 @@
     @Override
     public byte[] getEncoded(String encoding)
             throws CertificateEncodingException {
-        switch (encoding) {
-            case PKIPATH_ENCODING:
-                return encodePKIPATH();
-            case PKCS7_ENCODING:
-                return encodePKCS7();
-            default:
-                throw new CertificateEncodingException("unsupported encoding");
-        }
+	if (PKIPATH_ENCODING.equals(encoding)) {
+	    return encodePKIPATH();
+	} else if (PKCS7_ENCODING.equals(encoding)) {
+	    return encodePKCS7();
+	}
+	throw new CertificateEncodingException("unsupported encoding");
     }
 
     /**
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java openjdk-boot/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java	2017-12-02 04:12:34.657318268 +0000
@@ -818,16 +818,13 @@
             sig = JsseJce.getSignature(
                         preferableSignatureAlgorithm.getAlgorithmName());
         } else {
-                switch (algorithm) {
-                    case "DSA":
-                        sig = JsseJce.getSignature(JsseJce.SIGNATURE_DSA);
-                        break;
-                    case "RSA":
-                        sig = RSASignature.getInstance();
-                        break;
-                    default:
-                        throw new SSLKeyException("neither an RSA or a DSA key");
-                }
+	    if ("DSA".equals(algorithm)) {
+		sig = JsseJce.getSignature(JsseJce.SIGNATURE_DSA);
+	    } else if ("RSA".equals(algorithm)) {
+		sig = RSASignature.getInstance();
+	    } else {
+		throw new SSLKeyException("neither an RSA or a DSA key");
+	    }
         }
 
         sig.initVerify(publicKey);
@@ -1107,14 +1104,13 @@
 
     private static Signature getSignature(String keyAlgorithm)
             throws NoSuchAlgorithmException {
-            switch (keyAlgorithm) {
-                case "EC":
-                    return JsseJce.getSignature(JsseJce.SIGNATURE_ECDSA);
-                case "RSA":
-                    return RSASignature.getInstance();
-                default:
-                    throw new NoSuchAlgorithmException("neither an RSA or a EC key");
-            }
+	if ("EC".equals(keyAlgorithm)) {
+	    return JsseJce.getSignature(JsseJce.SIGNATURE_ECDSA);
+	} else if ("RSA".equals(keyAlgorithm)) {
+	    return RSASignature.getInstance();
+	} else {
+	    throw new NoSuchAlgorithmException("neither an RSA or a EC key");
+	}
     }
 
     private void updateSignature(Signature sig, byte clntNonce[],
@@ -1622,17 +1618,16 @@
      */
     private static Signature getSignature(ProtocolVersion protocolVersion,
             String algorithm) throws GeneralSecurityException {
-            switch (algorithm) {
-                case "RSA":
-                    return RSASignature.getInternalInstance();
-                case "DSA":
-                    return JsseJce.getSignature(JsseJce.SIGNATURE_RAWDSA);
-                case "EC":
-                    return JsseJce.getSignature(JsseJce.SIGNATURE_RAWECDSA);
-                default:
-                    throw new SignatureException("Unrecognized algorithm: "
-                        + algorithm);
-            }
+	if ("RSA".equals(algorithm)) {
+	    return RSASignature.getInternalInstance();
+	} else if ("DSA".equals(algorithm)) {
+	    return JsseJce.getSignature(JsseJce.SIGNATURE_RAWDSA);
+	} else if ("EC".equals(algorithm)) {
+	    return JsseJce.getSignature(JsseJce.SIGNATURE_RAWECDSA);
+	} else {
+	    throw new SignatureException("Unrecognized algorithm: "
+					 + algorithm);
+	}
     }
 
     /*
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java openjdk-boot/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/ssl/X509KeyManagerImpl.java	2017-12-02 04:12:34.657318268 +0000
@@ -526,44 +526,39 @@
                 if (ku != null) {
                     String algorithm = cert.getPublicKey().getAlgorithm();
                     boolean kuSignature = getBit(ku, 0);
-                    switch (algorithm) {
-                        case "RSA":
-                            // require either signature bit
-                            // or if server also allow key encipherment bit
-                            if (kuSignature == false) {
-                                if ((this == CLIENT) || (getBit(ku, 2) == false)) {
-                                    return CheckResult.EXTENSION_MISMATCH;
-                                }
-                            }
-                            break;
-                        case "DSA":
-                            // require signature bit
-                            if (kuSignature == false) {
-                                return CheckResult.EXTENSION_MISMATCH;
-                            }
-                            break;
-                        case "DH":
-                            // require keyagreement bit
-                            if (getBit(ku, 4) == false) {
-                                return CheckResult.EXTENSION_MISMATCH;
-                            }
-                            break;
-                        case "EC":
-                            // require signature bit
-                            if (kuSignature == false) {
-                                return CheckResult.EXTENSION_MISMATCH;
-                            }
-                            // For servers, also require key agreement.
-                            // This is not totally accurate as the keyAgreement bit
-                            // is only necessary for static ECDH key exchange and
-                            // not ephemeral ECDH. We leave it in for now until
-                            // there are signs that this check causes problems
-                            // for real world EC certificates.
-                            if ((this == SERVER) && (getBit(ku, 4) == false)) {
-                                return CheckResult.EXTENSION_MISMATCH;
-                            }
-                            break;
-                    }
+		    if ("RSA".equals(algorithm)) {
+			// require either signature bit
+			// or if server also allow key encipherment bit
+			if (kuSignature == false) {
+			    if ((this == CLIENT) || (getBit(ku, 2) == false)) {
+				return CheckResult.EXTENSION_MISMATCH;
+			    }
+			}
+		    } else if ("DSA".equals(algorithm)) {
+			// require signature bit
+			if (kuSignature == false) {
+			    return CheckResult.EXTENSION_MISMATCH;
+			}
+		    } else if ("DH".equals(algorithm)) {
+			// require keyagreement bit
+			if (getBit(ku, 4) == false) {
+			    return CheckResult.EXTENSION_MISMATCH;
+			}
+		    } else if ("EC".equals(algorithm)) {
+			// require signature bit
+			if (kuSignature == false) {
+			    return CheckResult.EXTENSION_MISMATCH;
+			}
+			// For servers, also require key agreement.
+			// This is not totally accurate as the keyAgreement bit
+			// is only necessary for static ECDH key exchange and
+			// not ephemeral ECDH. We leave it in for now until
+			// there are signs that this check causes problems
+			// for real world EC certificates.
+			if ((this == SERVER) && (getBit(ku, 4) == false)) {
+			    return CheckResult.EXTENSION_MISMATCH;
+			}
+		    }
                 }
             } catch (CertificateException e) {
                 // extensions unparseable, return failure
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2017-12-02 04:12:34.657318268 +0000
@@ -417,19 +417,23 @@
             GE;         // ">="
 
             static Operator of(String s) {
-                switch (s) {
-                    case "==":
-                        return EQ;
-                    case "!=":
-                        return NE;
-                    case "<":
-                        return LT;
-                    case "<=":
-                        return LE;
-                    case ">":
-                        return GT;
-                    case ">=":
-                        return GE;
+                if ("==".equals(s)) {
+                    return EQ;
+                }
+                if ("!=".equals(s)) {
+                    return NE;
+                }
+                if ("<".equals(s)) {
+                    return LT;
+                }
+                if ("<=".equals(s)) {
+                    return LE;
+                }
+                if (">".equals(s)) {
+                    return GT;
+                }
+                if (">=".equals(s)) {
+                    return GE;
                 }
 
                 throw new IllegalArgumentException("Error in security " +
diff -Nru openjdk-boot.orig/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java openjdk-boot/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java
--- openjdk-boot.orig/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java	2017-11-30 03:00:27.000000000 +0000
+++ openjdk-boot/jdk/src/solaris/classes/sun/security/smartcardio/PlatformPCSC.java	2017-12-02 04:12:34.657318268 +0000
@@ -101,19 +101,17 @@
         k = lib.indexOf("$ARCH");
         if (k != -1) {
             String arch = System.getProperty("os.arch");
-            switch (arch) {
-            case "amd64":
+	    if ("amd64".equals(arch)) {
                 arch = "x86_64";
-                break;
-            case "ppc":
+	    }
+	    if ("ppc".equals(arch)) {
                 arch = "powerpc";
-                break;
-            case "ppc64":
+	    }
+	    if ("ppc64".equals(arch)) {
                 arch = "powerpc64";
-                break;
-            case "ppc64le":
+	    }
+            if ("ppc64le".equals(arch)) {
                 arch = "powerpc64le";
-                break;
             }
             lib = replace(k, lib, "$ARCH", arch);
         }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2017-12-03 19:17:30.322427755 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/util/DisabledAlgorithmConstraints.java	2017-12-03 19:31:56.128493051 +0000
@@ -1308,19 +1308,16 @@
                     type = "gregory";
                 }
             }
-            switch (type) {
-            case "gregory":
+            if ("gregory".equals(type)) {
                 cal = access.createCalendar(zone, locale);
-                break;
-            case "iso8601":
+            } else if ("iso8601".equals(type)) {
                 GregorianCalendar gcal = access.createCalendar(zone, locale);
                 // make gcal a proleptic Gregorian
                 gcal.setGregorianChange(new Date(Long.MIN_VALUE));
                 // and week definition to be compatible with ISO 8601
                 setWeekDefinition(Calendar.MONDAY, 4);
                 cal = gcal;
-                break;
-            default:
+            } else {
                 throw new IllegalArgumentException("unknown calendar type: " + type);
             }
             cal.setLenient(lenient);
diff -Nrub openjdk-boot.orig/jdk/src/share/classes/sun/security/provider/certpath/CertStoreHelper.java openjdk-boot/jdk/src/share/classes/sun/security/provider/certpath/CertStoreHelper.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/provider/certpath/CertStoreHelper.java	2017-12-05 01:53:21.272367236 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/provider/certpath/CertStoreHelper.java	2017-12-05 01:55:16.802509085 +0000
@@ -98,19 +98,17 @@
     }
 
     static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
-        switch (type) {
-            case "LDAP":
-            case "SSLServer":
+        if ("LDAP".equals(type) || "SSLServer".equals(type)) {
                 try {
                     CertStoreHelper csh = CertStoreHelper.getInstance(type);
                     return csh.isCausedByNetworkIssue(cse);
                 } catch (NoSuchAlgorithmException nsae) {
                     return false;
                 }
-            case "URI":
+        } else if ("URI".equals(type)) {
                 Throwable t = cse.getCause();
                 return (t != null && t instanceof IOException);
-            default:
+        } else {
                 // we don't know about any other remote CertStore types
                 return false;
         }
diff -Nrub openjdk-boot.orig/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java openjdk-boot/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java	2017-12-05 01:53:21.284367044 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java	2017-12-05 01:57:10.104686766 +0000
@@ -435,8 +435,7 @@
         boolean result;
         Throwable t = cse.getCause();
 
-        switch (type) {
-            case "LDAP":
+        if ("LDAP".equals(type)) {
                 if (t != null) {
                     // These two exception classes are inside java.naming module
                     String cn = t.getClass().getName();
@@ -445,14 +444,11 @@
                 } else {
                     result = false;
                 }
-                break;
-            case "SSLServer":
+        } else if("SSLServer".equals(type)) {
                 result = (t != null && t instanceof IOException);
-                break;
-            case "URI":
+        } else if ("URI".equals(type)) {
                 result = (t != null && t instanceof IOException);
-                break;
-            default:
+        } else {
                 // we don't know about any other remote CertStore types
                 return false;
         }
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/KeyUtil.java	2018-02-26 19:04:19.711389871 +0000
+++ openjdk-boot/jdk/src/share/classes/sun/security/util/KeyUtil.java	2018-02-26 19:04:16.735437821 +0000
@@ -112,36 +112,29 @@
     public static final int getKeySize(AlgorithmParameters parameters) {
 
         String algorithm = parameters.getAlgorithm();
-        switch (algorithm) {
-            case "EC":
-                try {
-                    ECParameterSpec ps = parameters.getParameterSpec(
-                            ECParameterSpec.class);
-                    if (ps != null) {
-                        return ps.getOrder().bitLength();
-                    }
-                } catch (InvalidParameterSpecException ipse) {
-                    // ignore
+        if ("EC".equals(algorithm)) {
+            try {
+                ECParameterSpec ps = parameters.getParameterSpec(ECParameterSpec.class);
+                if (ps != null) {
+                    return ps.getOrder().bitLength();
                 }
+            } catch (InvalidParameterSpecException ipse) {
+                // ignore
+            }
 
-                // Note: the ECGenParameterSpec case should be covered by the
-                // ECParameterSpec case above.
-                // See NamedCurve.getECParameterSpec(String).
-
-                break;
-            case "DiffieHellman":
-                try {
-                    DHParameterSpec ps = parameters.getParameterSpec(
-                            DHParameterSpec.class);
-                    if (ps != null) {
-                        return ps.getP().bitLength();
-                    }
-                } catch (InvalidParameterSpecException ipse) {
-                    // ignore
+            // Note: the ECGenParameterSpec case should be covered by the
+            // ECParameterSpec case above.
+            // See NamedCurve.getECParameterSpec(String).
+        } else if ("DiffieHellman".equals(algorithm)) {
+            try {
+                DHParameterSpec ps = parameters.getParameterSpec(DHParameterSpec.class);
+                if (ps != null) {
+                    return ps.getP().bitLength();
                 }
-                break;
-
-            // May support more AlgorithmParameters algorithms in the future.
+            } catch (InvalidParameterSpecException ipse) {
+                // ignore
+            }
+        // May support more AlgorithmParameters algorithms in the future.
         }
 
         return -1;
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/crypto/provider/PBES2Core.java openjdk-boot/jdk/src/share/classes/com/sun/crypto/provider/PBES2Core.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/crypto/provider/PBES2Core.java	2019-03-12 23:18:09.408619039 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/crypto/provider/PBES2Core.java	2019-03-14 02:09:56.486038418 +0000
@@ -77,23 +77,17 @@
             blkSize = AESConstants.AES_BLOCK_SIZE;
             cipher = new CipherCore(new AESCrypt(), blkSize);
 
-            switch(kdfAlgo) {
-            case "HmacSHA1":
+            if ("HmacSHA1".equals(kdfAlgo)) {
                 kdf = new PBKDF2Core.HmacSHA1();
-                break;
-            case "HmacSHA224":
+            } else if ("HmacSHA224".equals(kdfAlgo)) {
                 kdf = new PBKDF2Core.HmacSHA224();
-                break;
-            case "HmacSHA256":
+            } else if ("HmacSHA256".equals(kdfAlgo)) {
                 kdf = new PBKDF2Core.HmacSHA256();
-                break;
-            case "HmacSHA384":
+            } else if ("HmacSHA384".equals(kdfAlgo)) {
                 kdf = new PBKDF2Core.HmacSHA384();
-                break;
-            case "HmacSHA512":
+            } else if ("HmacSHA512".equals(kdfAlgo)) {
                 kdf = new PBKDF2Core.HmacSHA512();
-                break;
-            default:
+            } else {
                 throw new NoSuchAlgorithmException(
                     "No Cipher implementation for " + kdfAlgo);
             }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/crypto/provider/PBES2Parameters.java openjdk-boot/jdk/src/share/classes/com/sun/crypto/provider/PBES2Parameters.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/crypto/provider/PBES2Parameters.java	2019-03-12 23:18:09.420618852 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/crypto/provider/PBES2Parameters.java	2019-03-14 02:09:56.482038481 +0000
@@ -202,23 +202,17 @@
                 pbes2AlgorithmName);
         }
 
-        switch (kdfAlgo) {
-        case "HmacSHA1":
+        if ("HmacSHA1".equals(kdfAlgo)) {
             kdfAlgo_OID = hmacWithSHA1_OID;
-            break;
-        case "HmacSHA224":
+        } else if ("HmacSHA224".equals(kdfAlgo)) {
             kdfAlgo_OID = hmacWithSHA224_OID;
-            break;
-        case "HmacSHA256":
+        } else if ("HmacSHA256".equals(kdfAlgo)) {
             kdfAlgo_OID = hmacWithSHA256_OID;
-            break;
-        case "HmacSHA384":
+        } else if ("HmacSHA384".equals(kdfAlgo)) {
             kdfAlgo_OID = hmacWithSHA384_OID;
-            break;
-        case "HmacSHA512":
+        } else if ("HmacSHA512".equals(kdfAlgo)) {
             kdfAlgo_OID = hmacWithSHA512_OID;
-            break;
-        default:
+        } else {
             throw new NoSuchAlgorithmException(
                 "No crypto implementation for " + kdfAlgo);
         }
diff -Nru openjdk-boot.orig/jdk/src/share/classes/com/sun/crypto/provider/PBMAC1Core.java openjdk-boot/jdk/src/share/classes/com/sun/crypto/provider/PBMAC1Core.java
--- openjdk-boot.orig/jdk/src/share/classes/com/sun/crypto/provider/PBMAC1Core.java	2019-03-12 23:18:09.432618664 +0000
+++ openjdk-boot/jdk/src/share/classes/com/sun/crypto/provider/PBMAC1Core.java	2019-03-14 02:09:56.474038605 +0000
@@ -62,24 +62,18 @@
 
     private static PBKDF2Core getKDFImpl(String algo) {
         PBKDF2Core kdf = null;
-        switch(algo) {
-        case "HmacSHA1":
-                kdf = new PBKDF2Core.HmacSHA1();
-                break;
-        case "HmacSHA224":
-                kdf = new PBKDF2Core.HmacSHA224();
-                break;
-        case "HmacSHA256":
-                kdf = new PBKDF2Core.HmacSHA256();
-                break;
-        case "HmacSHA384":
-                kdf = new PBKDF2Core.HmacSHA384();
-                break;
-        case "HmacSHA512":
-                kdf = new PBKDF2Core.HmacSHA512();
-                break;
-        default:
-                throw new ProviderException(
+        if ("HmacSHA1".equals(algo)) {
+            kdf = new PBKDF2Core.HmacSHA1();
+        } else if ("HmacSHA224".equals(algo)) {
+            kdf = new PBKDF2Core.HmacSHA224();
+        } else if ("HmacSHA256".equals(algo)) {
+            kdf = new PBKDF2Core.HmacSHA256();
+        } else if ("HmacSHA384".equals(algo)) {
+            kdf = new PBKDF2Core.HmacSHA384();
+        } else if ("HmacSHA512".equals(algo)) {
+            kdf = new PBKDF2Core.HmacSHA512();
+        } else {
+            throw new ProviderException(
                     "No MAC implementation for " + algo);
         }
         return kdf;
diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/util/Preconditions.java openjdk-boot/jdk/src/share/classes/sun/security/util/Preconditions.java
--- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/Preconditions.java	2019-07-17 04:20:04.496029417 +0100
+++ openjdk-boot/jdk/src/share/classes/sun/security/util/Preconditions.java	2019-07-17 04:54:34.212283390 +0100
@@ -169,31 +169,30 @@
         }
 
         int argSize = 0;
-        switch (checkKind) {
-            case "checkIndex":
-                argSize = 2;
-                break;
-            case "checkFromToIndex":
-            case "checkFromIndexSize":
-                argSize = 3;
-                break;
-            default:
-        }
-
+	if ("checkIndex".equals(checkKind)) {
+	    argSize = 2;
+	} else if ("checkFromToIndex".equals(checkKind) ||
+		   "checkFromIndexSize".equals(checkKind)) {
+	    argSize = 3;
+	}
+	
         // Switch to default if fewer or more arguments than required are supplied
-        switch ((args.size() != argSize) ? "" : checkKind) {
-            case "checkIndex":
-                return String.format("Index %d out-of-bounds for length %d",
-                                     args.get(0), args.get(1));
-            case "checkFromToIndex":
-                return String.format("Range [%d, %d) out-of-bounds for length %d",
-                                     args.get(0), args.get(1), args.get(2));
-            case "checkFromIndexSize":
-                return String.format("Range [%d, %<d + %d) out-of-bounds for length %d",
-                                     args.get(0), args.get(1), args.get(2));
-            default:
-                return String.format("Range check failed: %s %s", checkKind, args);
-        }
+	if (args.size() != argSize) {
+	    return String.format("Range check failed: %s %s", checkKind, args);
+	}
+
+	if ("checkIndex".equals(checkKind)) {
+	    return String.format("Index %d out-of-bounds for length %d",
+				 args.get(0), args.get(1));
+	} else if ("checkFromToIndex".equals(checkKind)) {
+	    return String.format("Range [%d, %d) out-of-bounds for length %d",
+				 args.get(0), args.get(1), args.get(2));
+	} else if ("checkFromIndexSize".equals(checkKind)) {
+	    return String.format("Range [%d, %<d + %d) out-of-bounds for length %d",
+				 args.get(0), args.get(1), args.get(2));
+	} else {
+	    return String.format("Range check failed: %s %s", checkKind, args);
+	}
     }
 
     /**