diff --git a/app/build.gradle b/app/build.gradle index 5405da7..c195b8c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk minApi targetSdk targetApi versionCode 21 - versionName "v2.9.5-3dfx-profiterole" + versionName "v2.9.5-3dfx-quincejelly" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } diff --git a/app/src/main/java/com/vectras/vm/MainActivity.java b/app/src/main/java/com/vectras/vm/MainActivity.java index 3a01e52..c0ecc0a 100644 --- a/app/src/main/java/com/vectras/vm/MainActivity.java +++ b/app/src/main/java/com/vectras/vm/MainActivity.java @@ -990,8 +990,8 @@ public class MainActivity extends AppCompatActivity { File romDir = new File(Config.getCacheDir()+ "/" + Config.vmID); romDir.mkdirs(); - if (!VMManager.isthiscommandsafe(env)) { - VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected), true, false, activity); + if (!VMManager.isthiscommandsafe(env, activity.getApplicationContext())) { + VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected) + " " + activity.getResources().getString(R.string.reason) + ": " + VMManager.latestUnsafeCommandReason, true, false, activity); return; } @@ -1197,22 +1197,23 @@ public class MainActivity extends AppCompatActivity { doneonstart = true; if (!AppConfig.pendingCommand.isEmpty()) { - if (!VMManager.isthiscommandsafe(AppConfig.pendingCommand)) { + if (!VMManager.isthiscommandsafe(AppConfig.pendingCommand, getApplicationContext())) { AppConfig.pendingCommand = ""; - VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected), true, false, activity); - return; - } - if (AppConfig.pendingCommand.startsWith("qemu-img")) { - if (!VMManager.isthiscommandsafeimg(AppConfig.pendingCommand)) { - return; - } - Terminal _vterm = new Terminal(MainActivity.this); - _vterm.executeShellCommand2(AppConfig.pendingCommand, false, MainActivity.activity); - Toast.makeText(getApplicationContext(), getResources().getString(R.string.done), Toast.LENGTH_LONG).show(); + VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected) + " " + activity.getResources().getString(R.string.reason) + ": " + VMManager.latestUnsafeCommandReason, true, false, activity); } else { - StartVM.cdrompath = ""; - String env = StartVM.env(MainActivity.activity, AppConfig.pendingCommand, "", "1"); - MainActivity.startVM("Quick run", env, AppConfig.pendingCommand, ""); + if (AppConfig.pendingCommand.startsWith("qemu-img")) { + if (!VMManager.isthiscommandsafeimg(AppConfig.pendingCommand, getApplicationContext())) { + VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.size_too_large_try_qcow2_format), true, false, activity); + } else { + Terminal _vterm = new Terminal(MainActivity.this); + _vterm.executeShellCommand2(AppConfig.pendingCommand, false, MainActivity.activity); + Toast.makeText(getApplicationContext(), getResources().getString(R.string.done), Toast.LENGTH_LONG).show(); + } + } else { + StartVM.cdrompath = ""; + String env = StartVM.env(MainActivity.activity, AppConfig.pendingCommand, "", "1"); + MainActivity.startVM("Quick run", env, AppConfig.pendingCommand, ""); + } } AppConfig.pendingCommand = ""; } diff --git a/app/src/main/java/com/vectras/vm/VMManager.java b/app/src/main/java/com/vectras/vm/VMManager.java index a475286..5515eba 100644 --- a/app/src/main/java/com/vectras/vm/VMManager.java +++ b/app/src/main/java/com/vectras/vm/VMManager.java @@ -45,6 +45,8 @@ public class VMManager { public static int restoredVMs = 0; public static boolean isKeptSomeFiles = false; + public static String latestUnsafeCommandReason = ""; + public static void createNewVM(String name, String thumbnail, String drive, String arch, String cdrom, String params, String vmID, int port) { mapForCreateNewVM.clear(); mapForCreateNewVM.put("imgName", name); @@ -717,35 +719,61 @@ public class VMManager { movetoRecycleBin(); } - public static boolean isthiscommandsafe(String _command) { + public static boolean isthiscommandsafe(String _command, Context _context) { if (_command.startsWith("qemu")) { if (!_command.contains("&")) { if (!_command.contains("\n")) { if (!_command.contains(";")) { if (!_command.contains("|")) { return true; + } else { + latestUnsafeCommandReason = _context.getString(R.string.command_are_not_allowed_to_contain_vertical_bars); } + } else { + latestUnsafeCommandReason = _context.getString(R.string.command_are_not_allowed_to_contain_semicolons); } + } else { + latestUnsafeCommandReason = _context.getString(R.string.command_are_not_allowed_to_contain_multiple_lines); } + } else { + latestUnsafeCommandReason = _context.getString(R.string.command_are_not_allowed_to_contain_amp); } + } else { + latestUnsafeCommandReason = _context.getString(R.string.not_the_command_to_run_qemu); } return false; } - public static boolean isthiscommandsafeimg(String _command) { + public static boolean isthiscommandsafeimg(String _command, Context _context) { if (!_command.contains("qcow2")) { String _getsize = _command.substring(_command.lastIndexOf(" ") + 1); if (_getsize.toLowerCase().endsWith("t") || _getsize.toLowerCase().endsWith("p") || _getsize.toLowerCase().endsWith("e")) { + latestUnsafeCommandReason = _context.getString(R.string.size_too_large_try_qcow2_format); return false; } if (_getsize.toLowerCase().endsWith("g")) { - return _getsize.length() <= 2; + if (_getsize.length() <= 2) { + return true; + } else { + latestUnsafeCommandReason = _context.getString(R.string.size_too_large_try_qcow2_format); + return false; + } } if (_getsize.toLowerCase().endsWith("m")) { - return _getsize.length() <= 4; + if (_getsize.length() <= 4) { + return true; + } else { + latestUnsafeCommandReason = _context.getString(R.string.size_too_large_try_qcow2_format); + return false; + } } if (_getsize.toLowerCase().endsWith("k")) { - return _getsize.length() <= 8; + if (_getsize.length() <= 8) { + return true; + } else { + latestUnsafeCommandReason = _context.getString(R.string.size_too_large_try_qcow2_format); + return false; + } } } return true; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5961a5c..1d9c16a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ Vectras VM - v2.9.5 (3dfx - Profiterole) + v2.9.5 (3dfx - Quince Jelly) Stable Home Logger @@ -419,6 +419,13 @@ You need to complete Vectras VM setup before importing this file. Unable to create directory to create virtual machine, this may be because you have not granted permission, there is not enough free space of internal storage or other. With + Not the command to run Qemu. + Commands are not allowed to contain \"&\". + Commands are not allowed to contain multiple lines. + Commands are not allowed to contain \";\". + Commands are not allowed to contain \"|\". + Reason + Size too large, try qcow2 format. Vterm diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json index e5a2a05..e476333 100644 --- a/web/data/UpdateConfig.json +++ b/web/data/UpdateConfig.json @@ -1,15 +1,15 @@ { "versionCode":"21", - "versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan,v2.9.5-3dfx-gugelhupf,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice,v2.9.5-3dfx-ladyfingers,v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole", + "versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan,v2.9.5-3dfx-gugelhupf,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice,v2.9.5-3dfx-ladyfingers,v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole,v2.9.5-3dfx-quincejelly", "size": "46 MB", "url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5", "Message": "

v2.9.5-3dfx



New updates are live!", "cancellable": true, "versionCodeBeta":"21", - "versionNameBeta":"v2.9.5-3dfx-profiterole", - "versionNameBetas":"v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole", + "versionNameBeta":"v2.9.5-3dfx-quincejelly", + "versionNameBetas":"v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole,v2.9.5-3dfx-quincejelly", "sizeBeta": "48 MB", "urlBeta": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases", - "MessageBeta": "

Profiterole

Bugs fixed.", + "MessageBeta": "

Quince Jelly

Bugs fixed.", "cancellableBeta": true }