2018-09-17 10:20:34 +03:00
package ru.gravit.utils.helper ;
2018-09-17 10:07:32 +03:00
import java.util.HashMap ;
import java.util.Locale ;
import java.util.Map ;
import java.util.StringTokenizer ;
import java.util.regex.Pattern ;
import ru.gravit.launcher.LauncherAPI ;
public class EnvHelper {
private static final boolean TST ;
private static final boolean HASXM ;
public static final String [ ] toTest ;
public static final Pattern [ ] test ;
static {
toTest = new String [ ] { " _JAVA_OPTIONS " , " _JAVA_OPTS " , " JAVA_OPTS " , " JAVA_OPTIONS " } ;
test = new Pattern [ ] { Pattern . compile ( " -Xm.* \\ d+[KMG] " ) } ;
TST = check0 ( ) ;
HASXM = check1 ( ) ;
}
public static void addEnv ( ProcessBuilder builder ) {
if ( hasOptsVar ( ) ) {
Map < String , String > repl = new HashMap < > ( ) ;
for ( String str : toTest ) {
repl . put ( str , " " ) ;
repl . put ( str . toLowerCase ( Locale . ENGLISH ) , " " ) ;
}
JVMHelper . appendVars ( builder , repl ) ;
}
}
2018-10-21 20:09:32 +03:00
public static void checkDangerousParametrs ( )
{
for ( String t : toTest )
{
String env = System . getenv ( t ) ;
if ( env . contains ( " -javaagent " ) | | env . contains ( " -agentpath " ) | | env . contains ( " -agentlib " ) ) throw new SecurityException ( " JavaAgent in global optings not allow " ) ;
}
}
2018-09-17 10:07:32 +03:00
private static boolean check0 ( ) {
for ( String test : toTest ) if ( System . getProperty ( test ) ! = null ) return true ;
return false ;
}
/ * *
* Вынужденное решение ибо тест на наличие - Xm * этакой нужен .
* /
private static boolean check1 ( ) {
if ( hasOptsVar ( ) )
2018-09-22 17:33:00 +03:00
for ( String testStr : toTest )
2018-09-17 10:07:32 +03:00
if ( System . getProperty ( testStr ) ! = null ) {
String str = System . getenv ( testStr ) ;
StringTokenizer st = new StringTokenizer ( str ) ;
while ( st . hasMoreTokens ( ) )
if ( CommonHelper . multiMatches ( test , st . nextToken ( ) ) ) return true ;
}
return false ;
}
@LauncherAPI
public static boolean hasMemPreDef ( ) {
return HASXM ;
}
@LauncherAPI
public static boolean hasOptsVar ( ) {
return TST ;
}
}