You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by pa...@apache.org on 2015/06/08 13:40:22 UTC
[12/13] incubator-groovy git commit: GROOVY-7459: leverage Ant
javadoc fix rather than have our own copy of Oracle fix class
GROOVY-7459: leverage Ant javadoc fix rather than have our own copy of Oracle fix class
Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/ed269cf1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/ed269cf1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/ed269cf1
Branch: refs/heads/GROOVY_2_4_X
Commit: ed269cf1156be0af503bf10d0035319a28f0162d
Parents: fbf33fd
Author: Paul King <pa...@asert.com.au>
Authored: Mon Jun 8 15:34:32 2015 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Mon Jun 8 21:37:02 2015 +1000
----------------------------------------------------------------------
LICENSE | 87 ------
buildSrc/src/main/java/JavadocFixTool.java | 350 ------------------------
gradle/docs.gradle | 16 +-
licenses/javadocfixtool.txt | 85 ------
4 files changed, 11 insertions(+), 527 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/ed269cf1/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index 8825713..b54541b 100644
--- a/LICENSE
+++ b/LICENSE
@@ -291,93 +291,6 @@ WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
---------------------------------------------------------------------
-Oracle Javadoc FixTool License
-
-Copyright (c) 2013 Oracle and/or its affiliates.
-All rights reserved. Use is subject to license terms.
-
-License Agreement
-
-PLEASE READ THE FOLLOWING LICENSE TERMS CAREFULLY BEFORE USING THE
-ACCOMPANYING PROGRAM. THESE TERMS CONSTITUTE A LEGAL AGREEMENT BETWEEN
-YOU AND US.
-
-"Oracle" refers to Oracle America, Inc., for and on behalf of itself and its
-subsidiaries and affiliates under common control. "We," "us," and "our"
-refers to Oracle and any Program contributors. "You" and "your" refers to
-the individual or entity that wishes to use the Program. "Program" refers to
-the Java API Documentation Updater Tool, Copyright (c) 2013, Oracle America,
-Inc., and updates or error corrections provided by Oracle or contributors.
-
-WARNING:
-The Program will analyze directory information on your computer
-system and may modify software components on such computer system. You
-should only use the Program on computer systems that you maintain sufficient
-rights to update software components.
-
-If your computer system is owned by a person or entity other than you,
-you should check with such person or entity before using the Program.
-
-It is possible that you may lose some software functionality, and make
-Java API Documentation pages unusable on your computer system after you use
-the Program to update software components.
-
-License Rights and Obligations
-We grant you a perpetual, nonexclusive, limited license to use, modify and
-distribute the Program in binary and/or source code form, only for the
-purpose of analyzing the directory structure of your computer system and
-updating Java API Documentation files. If you distribute the Program, in
-either or both binary or source form, including as modified by you, you
-shall include this License Agreement ("Agreement") with your distribution.
-
-All rights not expressly granted above are hereby reserved. If you want to
-use the Program for any purpose other than as permitted under this
-Agreement, you must obtain a valid license permitting such use from Oracle.
-Neither the name of Oracle nor the names of any Program contributors may be
-used to endorse or promote products derived from this software without
-specific prior written permission.
-
-Ownership and Restrictions
-We retain all ownership and intellectual property rights in the Program as
-provided by us. You retain all ownership and intellectual property rights
-in your modifications.
-
-Export
-You agree to comply fully with export laws and regulations of the United
-States and any other applicable export laws ("Export Laws") to assure that
-neither the Program nor any direct products thereof are: (1) exported,
-directly or indirectly, in violation of this Agreement or Export Laws; or
-(2) used for any purposes prohibited by the Export Laws, including, without
-limitation, nuclear, chemical, or biological weapons proliferation, or
-development of missile technology.
-
-Disclaimer of Warranty and Limitation of Liability
-THE PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. USE AT YOUR
-OWN RISK. WE FURTHER DISCLAIM ALL WARRANTIES, EXPRESS AND IMPLIED,
-INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
-
-IN NO EVENT SHALL WE BE LIABLE FOR ANY INDIRECT, DIRECT, INCIDENTAL,
-SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS,
-REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD PARTY, WHETHER IN AN
-ACTION IN CONTRACT OR TORT, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES. ORACLE SHALL HAVE NO LIABILITY FOR MODIFICATIONS MADE BY
-YOU OR ANY THIRD PARTY.
-
-Entire Agreement
-You agree that this Agreement is the complete agreement for the Program, and
-this Agreement supersedes all prior or contemporaneous agreements or
-representations. If any term of this Agreement is found to be invalid or
-unenforceable, the remaining provisions will remain effective. This
-Agreement is governed by the substantive and procedural laws of California.
-You and Oracle agree to submit to the exclusive jurisdiction of, and venue
-in, the courts of San Francisco or Santa Clara counties in California in
-any dispute between you and Oracle arising out of or relating to this
-Agreement.
-
-Last updated: 14 June 2013
-
----------------------------------------------------------------------
JLine License
Copyright (c) 2002-2012, the original author or authors.
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/ed269cf1/buildSrc/src/main/java/JavadocFixTool.java
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/java/JavadocFixTool.java b/buildSrc/src/main/java/JavadocFixTool.java
deleted file mode 100644
index a85a47b..0000000
--- a/buildSrc/src/main/java/JavadocFixTool.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (c) 2013 Oracle and/or its affiliates.
- * All rights reserved. Use is subject to license terms.
- *
- * License Agreement
- *
- * PLEASE READ THE FOLLOWING LICENSE TERMS CAREFULLY BEFORE USING THE
- * ACCOMPANYING PROGRAM. THESE TERMS CONSTITUTE A LEGAL AGREEMENT BETWEEN
- * YOU AND US.
- *
- * "Oracle" refers to Oracle America, Inc., for and on behalf of itself and its
- * subsidiaries and affiliates under common control. "We," "us," and "our"
- * refers to Oracle and any Program contributors. "You" and "your" refers to
- * the individual or entity that wishes to use the Program. "Program" refers to
- * the Java API Documentation Updater Tool, Copyright (c) 2013, Oracle America,
- * Inc., and updates or error corrections provided by Oracle or contributors.
- *
- * WARNING:
- * The Program will analyze directory information on your computer
- * system and may modify software components on such computer system. You
- * should only use the Program on computer systems that you maintain sufficient
- * rights to update software components.
- *
- * If your computer system is owned by a person or entity other than you,
- * you should check with such person or entity before using the Program.
- *
- * It is possible that you may lose some software functionality, and make
- * Java API Documentation pages unusable on your computer system after you use
- * the Program to update software components.
- *
- * License Rights and Obligations
- * We grant you a perpetual, nonexclusive, limited license to use, modify and
- * distribute the Program in binary and/or source code form, only for the
- * purpose of analyzing the directory structure of your computer system and
- * updating Java API Documentation files. If you distribute the Program, in
- * either or both binary or source form, including as modified by you, you
- * shall include this License Agreement ("Agreement") with your distribution.
- *
- * All rights not expressly granted above are hereby reserved. If you want to
- * use the Program for any purpose other than as permitted under this
- * Agreement, you must obtain a valid license permitting such use from Oracle.
- * Neither the name of Oracle nor the names of any Program contributors may be
- * used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * Ownership and Restrictions
- * We retain all ownership and intellectual property rights in the Program as
- * provided by us. You retain all ownership and intellectual property rights
- * in your modifications.
- *
- * Export
- * You agree to comply fully with export laws and regulations of the United
- * States and any other applicable export laws ("Export Laws") to assure that
- * neither the Program nor any direct products thereof are: (1) exported,
- * directly or indirectly, in violation of this Agreement or Export Laws; or
- * (2) used for any purposes prohibited by the Export Laws, including, without
- * limitation, nuclear, chemical, or biological weapons proliferation, or
- * development of missile technology.
- *
- * Disclaimer of Warranty and Limitation of Liability
- * THE PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. USE AT YOUR
- * OWN RISK. WE FURTHER DISCLAIM ALL WARRANTIES, EXPRESS AND IMPLIED,
- * INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
- *
- * IN NO EVENT SHALL WE BE LIABLE FOR ANY INDIRECT, DIRECT, INCIDENTAL,
- * SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS,
- * REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD PARTY, WHETHER IN AN
- * ACTION IN CONTRACT OR TORT, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGES. ORACLE SHALL HAVE NO LIABILITY FOR MODIFICATIONS MADE BY
- * YOU OR ANY THIRD PARTY.
- *
- * Entire Agreement
- * You agree that this Agreement is the complete agreement for the Program, and
- * this Agreement supersedes all prior or contemporaneous agreements or
- * representations. If any term of this Agreement is found to be invalid or
- * unenforceable, the remaining provisions will remain effective. This
- * Agreement is governed by the substantive and procedural laws of California.
- * You and Oracle agree to submit to the exclusive jurisdiction of, and venue
- * in, the courts of San Francisco or Santa Clara counties in California in
- * any dispute between you and Oracle arising out of or relating to this
- * Agreement.
- *
- * Last updated: 14 June 2013
- */
-import java.io.*;
-
-/*
- * Tool for finding and addressing files related to CVE-2013-1571.
- * See README file for details.
- */
-public class JavadocFixTool {
- // Usual suspects
- private static final String[] fileNames = {"index.html",
- "index.htm",
- "toc.html",
- "toc.htm"};
-
- // If we locate this function but not validURL - we are in trouble
- private final String patchString = "function loadFrames() {";
- // Main fix - should be inserted before the loadFrames() function alongside
- // the code that calls this function
- private static final String[] patchData =
- {" if (targetPage != \"\" && !validURL(targetPage))",
- " targetPage = \"undefined\";",
- " function validURL(url) {",
- " var pos = url.indexOf(\".html\");",
- " if (pos == -1 || pos != url.length - 5)",
- " return false;",
- " var allowNumber = false;",
- " var allowSep = false;",
- " var seenDot = false;",
- " for (var i = 0; i < url.length - 5; i++) {",
- " var ch = url.charAt(i);",
- " if ('a' <= ch && ch <= 'z' ||",
- " 'A' <= ch && ch <= 'Z' ||",
- " ch == '$' ||",
- " ch == '_') {",
- " allowNumber = true;",
- " allowSep = true;",
- " } else if ('0' <= ch && ch <= '9'",
- " || ch == '-') {",
- " if (!allowNumber)",
- " return false;",
- " } else if (ch == '/' || ch == '.') {",
- " if (!allowSep)",
- " return false;",
- " allowNumber = false;",
- " allowSep = false;",
- " if (ch == '.')",
- " seenDot = true;",
- " if (ch == '/' && seenDot)",
- " return false;",
- " } else {",
- " return false;",
- " }",
- " }",
- " return true;",
- " }",
- " function loadFrames() {"};
-
- private final String quickFixString = "if (!(url.indexOf(\".html\") == url.length - 5))";
- private final String[] quickFix = {" var pos = url.indexOf(\".html\");",
- " if (pos == -1 || pos != url.length - 5)"};
- private static String readme = null;
- private static String version = "Java Documentation Updater Tool version 1.2 06/14/2013\n";
-
- private static boolean doPatch = true; // By default patch file
- private static boolean recursive = false; // By default only look in the folder in parameter
-
- public static void main(String[] args) {
- System.out.println(version);
-
- if (args.length < 1) {
- // No arguments - lazily initialize readme, print readme and usage
- initReadme();
- if (readme != null) {
- System.out.println(readme);
- }
- printUsage(System.out);
- return;
- }
-
- // Last argument should be a path to the document root
- String name = args[args.length-1];
-
- // Analyze the rest of parameters
- for (int i = 0 ; i < args.length -1; i++) {
- if ("-R".equalsIgnoreCase(args[i])) {
- recursive = true;
- } else if ("-C".equalsIgnoreCase(args[i])) {
- doPatch = false;
- } else {
- System.err.println("Unknown option passed: "+args[i]);
- printUsage(System.err);
- return;
- }
- }
- new JavadocFixTool().proceed(name);
- }
-
- /*
- * Print usage information into the provided PrintStream
- * @param out PrintStream to write usage information
- */
- public static void printUsage(PrintStream out) {
- out.println("Usage: java -jar JavadocPatchTool.jar [-R] [-C] <Path to Javadoc root>");
- out.println(" -R : Proceed recursively starting from given folder");
- out.println(" -C : Check only - program will find vulnerable files and print their full paths");
- }
-
- /*
- * Lazily initialize the readme document, reading it from README file inside the jar
- */
- public static void initReadme() {
- try {
- InputStream readmeStream = JavadocFixTool.class.getResourceAsStream("/README");
- if (readmeStream != null) {
- BufferedReader readmeReader = new BufferedReader(new InputStreamReader(readmeStream));
- StringBuilder readmeBuilder = new StringBuilder();
- String s;
- while ((s = readmeReader.readLine()) != null) {
- readmeBuilder.append(s);
- readmeBuilder.append("\n");
- }
- readme = readmeBuilder.toString();
- }
- } catch (IOException ignore) {} // Ignore exception - readme not initialized
- }
-
- /*
- * Main procedure - proceed with the searching and/or fixing depending on
- * the command line parameters
- * @param name Path to the document root
- */
- public void proceed(String name) {
- try {
- File folder = new File(name);
- if (folder.exists() && folder.isDirectory() && folder.canRead()) {
- searchAndPatch(folder);
- } else {
- System.err.println("Invalid folder in parameter \""+name+"\"");
- printUsage(System.err);
- }
- } catch (Exception ignored) {} // Die silently
- }
-
- /*
- * Find all the files that match the list given in the fileNames array.
- * If file found attempt to patch it.
- * If global parameter recursive is set to true attempt to go into the enclosed subfolders
- * otherwise only patch said files in the folder directly pointed in parameter.
- */
- public void searchAndPatch(File folder) {
- if (folder == null || !folder.isDirectory() || folder.list() == null) {
- // Silently return
- return;
- }
-
- for (File file : folder.listFiles()) {
- if (file.isDirectory()) {
- if(recursive) {
- searchAndPatch(file);
- }
- continue;
- }
- String name = file.getName();
- for (String s : fileNames) {
- if (s.equalsIgnoreCase(name)) {
- try {
- applyPatch(file, folder);
- } catch (Exception ex) {
- String filePath;
- try {
- filePath = file.getCanonicalPath();
- } catch (IOException ioe) {
- System.err.println("Can not resolve path to "+file.getName()+" in folder "+folder.getName());
- continue;
- }
- System.err.println("Patch failed on: "+filePath+" due to the "+ex);
- }
- }
- }
- }
- }
-
- /*
- * Try to apply patch to the single file in the specific folder
- * If global parameter doPatch is false we should only print the location of the vulnerable html file
- * and return
- */
- public void applyPatch(File file, File currentFolder) throws Exception {
- FileInputStream fis = new FileInputStream(file);
- BufferedReader br = new BufferedReader(new InputStreamReader(fis));
- String line;
- String failedString = patchString;
- String[] patch = patchData;
- // Attempt to look if file is vulnerable
- for (int i = 0 ; i < 80 ; i++) { // Check first 80 lines - if there is no signature it is not our file
- line = br.readLine();
- if (line == null) {
- // File less than 80 lines long, no signature encountered
- return;
- }
- if (line.trim().equals("function validURL(url) {")) { // Already patched
- failedString = null;
- patch = null;
- continue;
- }
- if (line.trim().equals(quickFixString)) { // The patch had famous 2-letter bug, update it
- failedString = quickFixString;
- patch = quickFix;
- continue;
- }
- if (line.trim().equals("function loadFrames() {")) {
- fis.close(); // It should not interfere with the file renaming process
- if (failedString != null) {
- // Vulnerable file
- if (!doPatch) { // Report and return
- System.out.println("Vulnerable file found: "+file.getCanonicalPath());
- } else {
- replaceStringInFile(currentFolder, file, failedString, patch);
- }
- }
- return;
- }
- }
- }
-
- /*
- * Replace one line in the given file in the given folder with the lines given
- * @param folder Folder in which file should be created
- * @param file Original file to patch
- * @param template Trimmed String with the pattern we are have to find
- * @param replacement Array of String that has to be written in the place of first line matching the template
- */
- public void replaceStringInFile(File folder, File file, String template, String[] replacement)
- throws IOException {
- System.out.println("Patching file: "+file.getCanonicalPath());
- String name = file.getName();
- File origFile = new File(folder, name+".orig");
- file.renameTo(origFile);
- File temporaryFile = new File(folder, name+".tmp");
- if (temporaryFile.exists()) {
- temporaryFile.delete();
- }
- temporaryFile.createNewFile();
- String line;
- FileInputStream fis = new FileInputStream(origFile);
- PrintWriter pw = new PrintWriter(temporaryFile);
- BufferedReader br = new BufferedReader(new InputStreamReader(fis));
- while ((line = br.readLine()) != null) {
- if (line.trim().equals(template)) {
- for (String s : replacement) {
- pw.println(s);
- }
- } else {
- pw.println(line);
- }
- }
- pw.flush();
- pw.close();
- if (!temporaryFile.renameTo(new File(folder, name))) {
- throw new IOException("Unable to rename file in folder "+folder.getName()+
- " from \""+temporaryFile.getName()+"\" into \""+name +
- "\n Original file saved as "+origFile.getName());
- }
- origFile.delete();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/ed269cf1/gradle/docs.gradle
----------------------------------------------------------------------
diff --git a/gradle/docs.gradle b/gradle/docs.gradle
index f5f3abb..42f4041 100644
--- a/gradle/docs.gradle
+++ b/gradle/docs.gradle
@@ -187,11 +187,17 @@ task docGDK {
allprojects {
tasks.withType(Javadoc).all {
doLast {
- logger.lifecycle("Applying Javadoc fix tool (see http://www.kb.cert.org/vuls/id/225657) into $destinationDir".toString())
- def javadocFix = new JavadocFixTool()
- javadocFix.recursive = true
- javadocFix.doPatch = true
- javadocFix.searchAndPatch(destinationDir)
+ logger.lifecycle("Fixing Javadoc (see http://www.kb.cert.org/vuls/id/225657) for $destinationDir".toString())
+ def fixtext = org.apache.tools.ant.taskdefs.Javadoc.getResourceAsStream('javadoc-frame-injections-fix.txt').text.trim()
+ ant {
+ replace(encoding: 'UTF-8', summary: true) {
+ fileset(dir: destinationDir, casesensitive: false, includes: '**/index.html,**/index.htm,**/toc.html,**/toc.htm') {
+ not { contains(text: 'function validURL(url) {', casesensitive: true) }
+ }
+ replaceToken('function loadFrames() {')
+ replaceValue(expandProperties: false, fixtext)
+ }
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/ed269cf1/licenses/javadocfixtool.txt
----------------------------------------------------------------------
diff --git a/licenses/javadocfixtool.txt b/licenses/javadocfixtool.txt
deleted file mode 100644
index ca81be8..0000000
--- a/licenses/javadocfixtool.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-Oracle Javadoc FixTool License
-
-Copyright (c) 2013 Oracle and/or its affiliates.
-All rights reserved. Use is subject to license terms.
-
-License Agreement
-
-PLEASE READ THE FOLLOWING LICENSE TERMS CAREFULLY BEFORE USING THE
-ACCOMPANYING PROGRAM. THESE TERMS CONSTITUTE A LEGAL AGREEMENT BETWEEN
-YOU AND US.
-
-"Oracle" refers to Oracle America, Inc., for and on behalf of itself and its
-subsidiaries and affiliates under common control. "We," "us," and "our"
-refers to Oracle and any Program contributors. "You" and "your" refers to
-the individual or entity that wishes to use the Program. "Program" refers to
-the Java API Documentation Updater Tool, Copyright (c) 2013, Oracle America,
-Inc., and updates or error corrections provided by Oracle or contributors.
-
-WARNING:
-The Program will analyze directory information on your computer
-system and may modify software components on such computer system. You
-should only use the Program on computer systems that you maintain sufficient
-rights to update software components.
-
-If your computer system is owned by a person or entity other than you,
-you should check with such person or entity before using the Program.
-
-It is possible that you may lose some software functionality, and make
-Java API Documentation pages unusable on your computer system after you use
-the Program to update software components.
-
-License Rights and Obligations
-We grant you a perpetual, nonexclusive, limited license to use, modify and
-distribute the Program in binary and/or source code form, only for the
-purpose of analyzing the directory structure of your computer system and
-updating Java API Documentation files. If you distribute the Program, in
-either or both binary or source form, including as modified by you, you
-shall include this License Agreement ("Agreement") with your distribution.
-
-All rights not expressly granted above are hereby reserved. If you want to
-use the Program for any purpose other than as permitted under this
-Agreement, you must obtain a valid license permitting such use from Oracle.
-Neither the name of Oracle nor the names of any Program contributors may be
-used to endorse or promote products derived from this software without
-specific prior written permission.
-
-Ownership and Restrictions
-We retain all ownership and intellectual property rights in the Program as
-provided by us. You retain all ownership and intellectual property rights
-in your modifications.
-
-Export
-You agree to comply fully with export laws and regulations of the United
-States and any other applicable export laws ("Export Laws") to assure that
-neither the Program nor any direct products thereof are: (1) exported,
-directly or indirectly, in violation of this Agreement or Export Laws; or
-(2) used for any purposes prohibited by the Export Laws, including, without
-limitation, nuclear, chemical, or biological weapons proliferation, or
-development of missile technology.
-
-Disclaimer of Warranty and Limitation of Liability
-THE PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. USE AT YOUR
-OWN RISK. WE FURTHER DISCLAIM ALL WARRANTIES, EXPRESS AND IMPLIED,
-INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
-
-IN NO EVENT SHALL WE BE LIABLE FOR ANY INDIRECT, DIRECT, INCIDENTAL,
-SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS,
-REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD PARTY, WHETHER IN AN
-ACTION IN CONTRACT OR TORT, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES. ORACLE SHALL HAVE NO LIABILITY FOR MODIFICATIONS MADE BY
-YOU OR ANY THIRD PARTY.
-
-Entire Agreement
-You agree that this Agreement is the complete agreement for the Program, and
-this Agreement supersedes all prior or contemporaneous agreements or
-representations. If any term of this Agreement is found to be invalid or
-unenforceable, the remaining provisions will remain effective. This
-Agreement is governed by the substantive and procedural laws of California.
-You and Oracle agree to submit to the exclusive jurisdiction of, and venue
-in, the courts of San Francisco or Santa Clara counties in California in
-any dispute between you and Oracle arising out of or relating to this
-Agreement.
-
-Last updated: 14 June 2013