mirror of
https://github.com/dscalzi/HeliosLauncher.git
synced 2024-12-22 11:42:14 -08:00
More updates for Java validations on darwin.
Also, now require version 8u52+, as pack200 algo changed after 8u45.
This commit is contained in:
parent
2a551f18ba
commit
fc81016dc6
@ -612,7 +612,27 @@ class AssetGuard extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates the output of a JVM's properties. Currently validates that a JRE is x64.
|
* Parses a **full** Java Runtime version string and resolves
|
||||||
|
* the version information. Uses Java 8 formatting.
|
||||||
|
*
|
||||||
|
* @param {string} verString Full version string to parse.
|
||||||
|
* @returns Object containing the version information.
|
||||||
|
*/
|
||||||
|
static parseJavaRuntimeVersion(verString){
|
||||||
|
// 1.{major}.0_{update}-b{build}
|
||||||
|
// ex. 1.8.0_152-b16
|
||||||
|
const ret = {}
|
||||||
|
let pts = verString.split('-')
|
||||||
|
ret.build = parseInt(pts[1].substring(1))
|
||||||
|
pts = verString[0].split('_')
|
||||||
|
ret.update = parseInt(pts[1])
|
||||||
|
ret.major = parseInt(pts[0].split['.'][1])
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates the output of a JVM's properties. Currently validates that a JRE is x64
|
||||||
|
* and that the major = 8, update > 52.
|
||||||
*
|
*
|
||||||
* @param {string} stderr The output to validate.
|
* @param {string} stderr The output to validate.
|
||||||
*
|
*
|
||||||
@ -622,15 +642,34 @@ class AssetGuard extends EventEmitter {
|
|||||||
static _validateJVMProperties(stderr){
|
static _validateJVMProperties(stderr){
|
||||||
const res = stderr
|
const res = stderr
|
||||||
const props = res.split('\n')
|
const props = res.split('\n')
|
||||||
|
|
||||||
|
const goal = 2
|
||||||
|
let checksum = 0
|
||||||
|
|
||||||
for(let i=0; i<props.length; i++){
|
for(let i=0; i<props.length; i++){
|
||||||
if(props[i].indexOf('sun.arch.data.model') > -1){
|
if(props[i].indexOf('sun.arch.data.model') > -1){
|
||||||
let arch = props[i].split('=')[1].trim()
|
let arch = props[i].split('=')[1].trim()
|
||||||
console.log(props[i].trim())
|
console.log(props[i].trim())
|
||||||
return parseInt(arch) >= 64
|
if(parseInt(arch) === 64){
|
||||||
|
++checksum
|
||||||
|
if(checksum === goal){
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(props[i].indexOf('java.runtime.version') > -1){
|
||||||
|
let verString = props[i].split('=')[1].trim()
|
||||||
|
console.log(props[i].trim())
|
||||||
|
const verOb = AssetGuard.parseJavaRuntimeVersion(verString)
|
||||||
|
if(verOb.major === 8 && verOb.update > 52){
|
||||||
|
++checksum
|
||||||
|
if(checksum === goal){
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// sun.arch.data.model not found?
|
|
||||||
return false
|
return checksum === goal
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -722,7 +761,12 @@ class AssetGuard extends EventEmitter {
|
|||||||
console.log(err)
|
console.log(err)
|
||||||
} else {
|
} else {
|
||||||
for(let i=0; i<files.length; i++){
|
for(let i=0; i<files.length; i++){
|
||||||
res.add(path.join(x64RuntimeDir, files[i]))
|
if(process.platform === 'darwin'){
|
||||||
|
// On darwin, Java home is root/Contents/Home
|
||||||
|
res.add(path.join(x64RuntimeDir, files[i], 'Contents', 'Home'))
|
||||||
|
} else {
|
||||||
|
res.add(path.join(x64RuntimeDir, files[i]))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
resolve(res)
|
resolve(res)
|
||||||
}
|
}
|
||||||
@ -902,17 +946,24 @@ class AssetGuard extends EventEmitter {
|
|||||||
|
|
||||||
const pathSet = new Set()
|
const pathSet = new Set()
|
||||||
|
|
||||||
|
// Check Internet Plugins folder.
|
||||||
const iPPath = AssetGuard._scanInternetPlugins()
|
const iPPath = AssetGuard._scanInternetPlugins()
|
||||||
if(iPPath != null){
|
if(iPPath != null){
|
||||||
pathSet.add(iPPath)
|
pathSet.add(iPPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check the JAVA_HOME environment variable.
|
||||||
const jHome = AssetGuard._scanJavaHome()
|
const jHome = AssetGuard._scanJavaHome()
|
||||||
if(jHome != null){
|
if(jHome != null){
|
||||||
pathSet.add(jHome)
|
pathSet.add(jHome)
|
||||||
}
|
}
|
||||||
|
|
||||||
let pathArr = Array.from(pathSet)
|
// Get possible paths from the data directory.
|
||||||
|
const pathSet2 = await AssetGuard._scanDataFolder(dataDir)
|
||||||
|
|
||||||
|
// TODO Sort by highest version.
|
||||||
|
|
||||||
|
let pathArr = Array.from(pathSet2).concat(Array.from(pathSet))
|
||||||
for(let i=0; i<pathArr.length; i++) {
|
for(let i=0; i<pathArr.length; i++) {
|
||||||
const execPath = AssetGuard.javaExecFromRoot(pathArr[i])
|
const execPath = AssetGuard.javaExecFromRoot(pathArr[i])
|
||||||
let res = await AssetGuard._validateJavaBinary(execPath)
|
let res = await AssetGuard._validateJavaBinary(execPath)
|
||||||
|
Loading…
Reference in New Issue
Block a user