路径bug 2+非法字符检测+Lua os.osversion()函数

This commit is contained in:
2026-02-12 00:22:12 +08:00
parent b80c5b45a3
commit 269c61ffdb
5 changed files with 103 additions and 1 deletions

View File

@@ -1 +1 @@
b36e3ba
b80c5b4

View File

@@ -14,6 +14,19 @@ namespace CMLeonOS
currentDirectory = @"0:\";
}
private static bool ContainsInvalidChars(string input)
{
char[] invalidChars = { '<', '>', ':', '"', '|', '?', '*' };
foreach (char c in invalidChars)
{
if (input.Contains(c.ToString()))
{
return true;
}
}
return false;
}
public FileSystem(string initialPath)
{
if (string.IsNullOrEmpty(initialPath))
@@ -67,6 +80,12 @@ namespace CMLeonOS
public void MakeDirectory(string path)
{
if (ContainsInvalidChars(path))
{
Console.WriteLine("Error: Directory name contains invalid characters: < > : \" | ?");
return;
}
string fullPath = GetFullPath(path);
try
@@ -363,6 +382,28 @@ namespace CMLeonOS
return currentDirectory;
}
if (path.Length > 255)
{
Console.WriteLine("Error: Path too long (maximum 255 characters)");
return currentDirectory;
}
char[] invalidChars = { '<', '>', ':', '"', '|', '?', '*' };
foreach (char c in invalidChars)
{
if (path.Contains(c.ToString()))
{
Console.WriteLine($"Error: Invalid character in path: '{c}'");
return currentDirectory;
}
}
if (path.Contains("//") || path.Contains("\\\\"))
{
Console.WriteLine("Error: Path contains consecutive slashes");
return currentDirectory;
}
if (path.StartsWith(@"0:\"))
{
return path;
@@ -467,6 +508,16 @@ namespace CMLeonOS
string normalizedPath = path;
while (normalizedPath.Contains("//"))
{
normalizedPath = normalizedPath.Replace("//", "/");
}
while (normalizedPath.Contains("\\\\"))
{
normalizedPath = normalizedPath.Replace("\\\\", "\\");
}
if (normalizedPath.StartsWith("/"))
{
normalizedPath = normalizedPath.Substring(1);

View File

@@ -53,6 +53,19 @@ namespace CMLeonOS
return Convert.ToBase64String(sha256.GetHash());
}
private static bool ContainsInvalidChars(string input)
{
char[] invalidChars = { '<', '>', ':', '"', '|', '?', '*', '/', '\\' };
foreach (char c in invalidChars)
{
if (input.Contains(c.ToString()))
{
return true;
}
}
return false;
}
public UserSystem()
{
EnsureSysDirectoryExists();
@@ -388,6 +401,17 @@ namespace CMLeonOS
username = global::System.Console.ReadLine();
}
while (ContainsInvalidChars(username))
{
CMLeonOS.UI.TUIHelper.SetColors(global::System.ConsoleColor.Red, global::System.ConsoleColor.Black);
global::System.Console.SetCursorPosition(7, 24);
global::System.Console.Write("Username contains invalid characters: < > : \" | ? / \\ ");
CMLeonOS.UI.TUIHelper.SetColors(global::System.ConsoleColor.White, global::System.ConsoleColor.Black);
global::System.Console.SetCursorPosition(7, 7);
global::System.Console.Write("Username: ");
username = global::System.Console.ReadLine();
}
CMLeonOS.UI.TUIHelper.SetColors(global::System.ConsoleColor.White, global::System.ConsoleColor.Black);
global::System.Console.SetCursorPosition(7, 8);
global::System.Console.Write("Password: ");

View File

@@ -39,6 +39,7 @@ namespace UniLua
new NameFuncPair("base64decrypt", OS_Base64Decrypt),
new NameFuncPair("timerstart", OS_TimerStart),
new NameFuncPair("timerstop", OS_TimerStop),
new NameFuncPair("osversion", OS_Osversion),
new NameFuncPair("tui_drawbox", OS_TUIDrawBox),
new NameFuncPair("tui_drawtext", OS_TUIDrawText),
new NameFuncPair("tui_setcolor", OS_TUISetColor),
@@ -240,6 +241,13 @@ namespace UniLua
return 1;
}
private static int OS_Osversion(ILuaState lua)
{
string version = CMLeonOS.Version.FullVersion;
lua.PushString(version);
return 1;
}
private static int OS_TUIDrawBox(ILuaState lua)
{
int x = (int)lua.L_CheckNumber(1);

View File

@@ -8,6 +8,19 @@ namespace CMLeonOS.Commands.User
{
private static CMLeonOS.UserSystem userSystem;
private static bool ContainsInvalidChars(string input)
{
char[] invalidChars = { '<', '>', ':', '"', '|', '?', '*', '/', '\\' };
foreach (char c in invalidChars)
{
if (input.Contains(c.ToString()))
{
return true;
}
}
return false;
}
public static void SetUserSystem(CMLeonOS.UserSystem system)
{
userSystem = system;
@@ -80,6 +93,12 @@ namespace CMLeonOS.Commands.User
string password = parts[3];
bool isAdmin = userType == "admin";
if (ContainsInvalidChars(username))
{
showError("Error: Username contains invalid characters: < > : \" | ? / \\");
return;
}
userSystem.AddUser($"{username} {password}", isAdmin);
}
else if (subCommand == "delete")