From faae0a6514c2565a10f9a62dd18c5d79fbbe4156 Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 31 Jul 2014 22:27:26 -0400 Subject: fixed bug with save mappings menu gui shows deobfuscated classes list now working on name validation/sanitization --- src/cuchaz/enigma/mapping/NameValidator.java | 67 ++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/cuchaz/enigma/mapping/NameValidator.java (limited to 'src/cuchaz/enigma/mapping/NameValidator.java') diff --git a/src/cuchaz/enigma/mapping/NameValidator.java b/src/cuchaz/enigma/mapping/NameValidator.java new file mode 100644 index 0000000..30982dc --- /dev/null +++ b/src/cuchaz/enigma/mapping/NameValidator.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2014 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Jeff Martin - initial API and implementation + ******************************************************************************/ +package cuchaz.enigma.mapping; + +import java.util.regex.Pattern; + +public class NameValidator +{ + private static final String IdentifierPattern; + private static final Pattern ClassPattern; + + static + { + // java allows all kinds of weird characters... + StringBuilder startChars = new StringBuilder(); + StringBuilder partChars = new StringBuilder(); + for( int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++ ) + { + if( Character.isJavaIdentifierStart( i ) ) + { + startChars.appendCodePoint( i ); + } + if( Character.isJavaIdentifierPart( i ) ) + { + partChars.appendCodePoint( i ); + } + } + + IdentifierPattern = String.format( "[\\Q%s\\E][\\Q%s\\E]*", startChars.toString(), partChars.toString() ); + ClassPattern = Pattern.compile( String.format( "^(%s(\\.|/))*(%s)$", IdentifierPattern, IdentifierPattern ) ); + } + + public String validateClassName( String name ) + { + if( !ClassPattern.matcher( name ).matches() ) + { + throw new IllegalArgumentException( "Illegal name: " + name ); + } + + return classNameToJavaName( name ); + } + + public static String fileNameToClassName( String fileName ) + { + final String suffix = ".class"; + + if( !fileName.endsWith( suffix ) ) + { + return null; + } + + return fileName.substring( 0, fileName.length() - suffix.length() ).replace( "/", "." ); + } + + public static String classNameToJavaName( String className ) + { + return className.replace( ".", "/" ); + } +} -- cgit v1.2.3