1. 개요
서버 구동시 Java에서 기본 Exception 중 NumberFormatException이 발생한다.
Integer.parseInt(String number);
Java에서 Integer.parseInt의 경우 "2,147,483,647" 을 초과할 수 없으며, "앞단에 0"이 붙는 경우 바로 오류가 발생한다.
해당 오류 추적 *최초 발생원인 분석
원인 소스
public static void loadWorldEdit() {
try {
boolean validVersion = true;
String version = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getVersion();
if (!version.contains(";") && !version.contains("+")) {
if (version.contains(".")) {
String[] worldEditVersion = version.split("-|\\.");
if (worldEditVersion.length >= 2) {
worldEditVersion[0] = worldEditVersion[0].replaceAll("[^0-9]", "");
worldEditVersion[1] = worldEditVersion[1].replaceAll("[^0-9]", "");
if (worldEditVersion[0].length() == 0 || worldEditVersion[1].length() == 0 || newVersion(worldEditVersion[0] + "." + worldEditVersion[1], "7.1")) {
validVersion = false;
}
}
} else if (version.equals("unspecified")) {
validVersion = false;
Plugin fawe = Bukkit.getServer().getPluginManager().getPlugin("FastAsyncWorldEdit");
if (fawe != null) {
String apiVersion = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getAPIVersion();
String faweVersion = fawe.getDescription().getVersion();
double apiDouble = Double.parseDouble(apiVersion);
double faweDouble = Double.parseDouble(faweVersion);
if (apiDouble >= 1.13D && faweDouble >= 1.0D) {
validVersion = true;
}
}
} else {
validVersion = false;
}
} else {
int value;
if (version.contains("-beta-")) {
version = version.split(";")[0];
version = version.split("-beta-")[1];
value = Integer.parseInt(version.replaceAll("[^0-9]", ""));
if (value < 6) {
validVersion = false;
}
} else {
if (version.contains("+")) {
version = version.split("\\+")[1];
} else {
version = version.split(";")[1];
}
if (version.contains("-")) {
value = Integer.parseInt(version.split("-")[0].replaceAll("[^0-9]", ""));
if (value > 0 && value < 4268) {
validVersion = false;
}
}
}
}
if (validVersion) {
CoreProtectEditSessionEvent.register();
} else {
Chat.console(Phrase.build(Phrase.INTEGRATION_VERSION, new String[]{"WorldEdit"}));
}
} catch (Exception var9) {
var9.printStackTrace();
}
}
소스 분석
WorldEdit 플러그인의 plugin.yml 에서 Version 정보를 추출 한 후 각종 기호를 제거 ==> 숫자(Number) 값으로 정보를 생성하는 과정에서 오류가 발생 하였다.
String version = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getVersion();
value = Integer.parseInt(version.replaceAll("[^0-9]", ""));
value = Integer.parseInt(version.split("-")[0].replaceAll("[^0-9]", ""));
2. 작업
작업 대상 : WorldEdit 7.2.11 Beta 1 (1.13.2 - 1.19)
수정 방법
1. plugin.yml 을 열람한다.
01+6200-0877589 정보를 임의로 변경한다.
0877589 으로 변경한다.
※ 가장 중요 : api-version: 1.13 ==> api-version: 1.13.1 등으로 변경한다.
변경하지 않는 경우 기 업로드되어 있는 기타 연동된 플러그인과 충돌 발생으로 옳바르게 동작하지 않는다.