8238225: Issues reported after replacing symlink at Contents/MacOS/libjli.dylib with binary

Reviewed-by: clanger, alanb, ihse
This commit is contained in:
Erik Joelsson 2020-02-05 09:33:25 -08:00
parent a7a82b0c79
commit f1332640d4
2 changed files with 41 additions and 5 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -515,11 +515,27 @@ GetJREPath(char *path, jint pathsize, jboolean speculative)
}
size_t indexOfLastPathComponent = pathLen - sizeOfLastPathComponent;
if (0 == strncmp(realPathToSelf + indexOfLastPathComponent, lastPathComponent, sizeOfLastPathComponent - 1)) {
if (0 == strncmp(realPathToSelf + indexOfLastPathComponent, lastPathComponent, sizeOfLastPathComponent)) {
realPathToSelf[indexOfLastPathComponent + 1] = '\0';
return JNI_TRUE;
}
// If libjli.dylib is loaded from a macos bundle MacOS dir, find the JRE dir
// in ../Home.
const char altLastPathComponent[] = "/MacOS/libjli.dylib";
size_t sizeOfAltLastPathComponent = sizeof(altLastPathComponent) - 1;
if (pathLen < sizeOfLastPathComponent) {
return JNI_FALSE;
}
size_t indexOfAltLastPathComponent = pathLen - sizeOfAltLastPathComponent;
if (0 == strncmp(realPathToSelf + indexOfAltLastPathComponent, altLastPathComponent, sizeOfAltLastPathComponent)) {
JLI_Snprintf(realPathToSelf + indexOfAltLastPathComponent, sizeOfAltLastPathComponent, "%s", "/Home");
if (access(realPathToSelf, F_OK) == 0) {
return JNI_TRUE;
}
}
if (!speculative)
JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL);
return JNI_FALSE;