From: Vijay Kiran Kamuju <infyquest(a)gmail.com> --- programs/schtasks/schtasks.c | 69 ++++++++++++++++-------------- programs/schtasks/tests/schtasks.c | 22 ++++++++++ 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/programs/schtasks/schtasks.c b/programs/schtasks/schtasks.c index c9434801db8..10f17d7601b 100644 --- a/programs/schtasks/schtasks.c +++ b/programs/schtasks/schtasks.c @@ -111,7 +111,7 @@ static BSTR read_file_to_bstr(const WCHAR *file_name) if (read_size > 2 && data[0] == 0xff && data[1] == 0xfe) { /* UTF-16 BOM */ ret = SysAllocStringLen((const WCHAR *)(data + 2), (read_size - 2) / sizeof(WCHAR)); - }else { + } else { size = MultiByteToWideChar(CP_ACP, 0, (const char *)data, read_size, NULL, 0); ret = SysAllocStringLen(NULL, size); if (ret) @@ -131,13 +131,13 @@ static int change_command(int argc, WCHAR *argv[]) while (argc) { if (!wcsicmp(argv[0], L"/tn")) { - if (argc < 2) { - FIXME("Missing /tn value\n"); + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tn value\n"); return 1; } if (task_name) { - FIXME("Duplicated /tn argument\n"); + ERR("Duplicated /tn argument\n"); return 1; } @@ -150,8 +150,8 @@ static int change_command(int argc, WCHAR *argv[]) argc--; argv++; } else if (!wcsicmp(argv[0], L"/tr")) { - if (argc < 2) { - FIXME("Missing /tr value\n"); + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tr value\n"); return 1; } @@ -159,19 +159,19 @@ static int change_command(int argc, WCHAR *argv[]) have_option = TRUE; argc -= 2; argv += 2; - }else { + } else { FIXME("Unsupported arguments %s\n", debugstr_w(argv[0])); return 1; } } if (!task_name) { - FIXME("Missing /tn option\n"); + ERR("Missing /tn option\n"); return 1; } if (!have_option) { - FIXME("Missing change options\n"); + ERR("Missing change options\n"); return 1; } @@ -204,28 +204,28 @@ static int create_command(int argc, WCHAR *argv[]) while (argc) { if (!wcsicmp(argv[0], L"/xml")) { - if (argc < 2) { - FIXME("Missing /xml value\n"); - return 1; + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /xml value\n"); + return E_FAIL; } if (xml_file) { - FIXME("Duplicated /xml argument\n"); - return 1; + ERR("Duplicated /xml argument\n"); + return E_FAIL; } xml_file = argv[1]; argc -= 2; argv += 2; } else if (!wcsicmp(argv[0], L"/tn")) { - if (argc < 2) { - FIXME("Missing /tn value\n"); - return 1; + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tn value\n"); + return E_FAIL; } if (task_name) { - FIXME("Duplicated /tn argument\n"); - return 1; + ERR("Duplicated /tn argument\n"); + return E_FAIL; } task_name = argv[1]; @@ -236,33 +236,33 @@ static int create_command(int argc, WCHAR *argv[]) argc--; argv++; } else if (!wcsicmp(argv[0], L"/ru")) { - if (argc < 2) { - FIXME("Missing /ru value\n"); - return 1; + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /ru value\n"); + return E_FAIL; } FIXME("Unsupported /ru option %s\n", debugstr_w(argv[1])); argc -= 2; argv += 2; - }else { + } else { FIXME("Unsupported argument %s\n", debugstr_w(argv[0])); - return 1; + return E_FAIL; } } if (!task_name) { - FIXME("Missing /tn argument\n"); - return 1; + ERR("Missing /tn argument\n"); + return E_FAIL; } if (!xml_file) { - FIXME("Missing /xml argument\n"); + ERR("Missing /xml argument\n"); return E_FAIL; } xml = read_file_to_bstr(xml_file); if (!xml) - return 1; + return E_FAIL; root = get_tasks_root_folder(); if (!root) { @@ -297,27 +297,27 @@ static int delete_command(int argc, WCHAR *argv[]) argc--; argv++; } else if (!wcsicmp(argv[0], L"/tn")) { - if (argc < 2) { - FIXME("Missing /tn value\n"); + if (argc < 2 || !wcsncmp(argv[1], L"/", 1)) { + ERR("Missing /tn value\n"); return 1; } if (task_name) { - FIXME("Duplicated /tn argument\n"); + ERR("Duplicated /tn argument\n"); return 1; } task_name = argv[1]; argc -= 2; argv += 2; - }else { + } else { FIXME("Unsupported argument %s\n", debugstr_w(argv[0])); return 1; } } if (!task_name) { - FIXME("Missing /tn argument\n"); + ERR("Missing /tn argument\n"); return 1; } @@ -354,7 +354,10 @@ int __cdecl wmain(int argc, WCHAR *argv[]) else if (!wcsicmp(argv[1], L"/delete")) ret = delete_command(argc - 2, argv + 2); else + { FIXME("Unsupported command %s\n", debugstr_w(argv[1])); + ret = 1; + } CoUninitialize(); return ret; diff --git a/programs/schtasks/tests/schtasks.c b/programs/schtasks/tests/schtasks.c index 3ed2378c90c..e896449fa32 100644 --- a/programs/schtasks/tests/schtasks.c +++ b/programs/schtasks/tests/schtasks.c @@ -222,11 +222,17 @@ START_TEST(schtasks) r = run_command("schtasks"); ok(r == 0, "r = %lu\n", r); + r = run_command("schtasks /wine"); + ok(r == 1, "r = %lu\n", r); + register_task("winetest"); r = run_command("schtasks /change /tn winetest /enable"); ok(r == 0, "r = %lu\n", r); + r = run_command("schtasks /change /tn winetest /tn /enable"); + ok(r == 1, "r = %lu\n", r); + unregister_task("winetest"); r = run_command("schtasks /change /tn winetest /enable"); @@ -237,6 +243,9 @@ START_TEST(schtasks) r = run_command("schtasks /CHANGE /tn wine\\test\\winetest /enable"); ok(r == 0, "r = %lu\n", r); + r = run_command("schtasks /delete /f /tn /tn wine\\test\\winetest"); + ok(r == 1, "r = %lu\n", r); + r = run_command("schtasks /delete /f /tn wine\\test\\winetest"); ok(r == 0, "r = %lu\n", r); @@ -248,6 +257,18 @@ START_TEST(schtasks) r = run_command("schtasks /create /xml test.xml /tn wine\\winetest"); ok(r == 0, "r = %lu\n", r); + r = run_command("schtasks /create /xml test.xml /tn wine\\winetest /tn"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + + r = run_command("schtasks /create /xml test.xml /tn wine\\winetest /xml"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + + r = run_command("schtasks /create /xml test.xml /tn wine\\winetest /tn test"); + ok(r == E_FAIL, "r = %lx\n", r); /* duplicate arguments */ + + r = run_command("schtasks /create /xml test.xml /tn wine\\winetest /xml empty.xml"); + ok(r == E_FAIL, "r = %lx\n", r); /* duplicate arguments */ + r = run_command("schtasks /change /tn wine\\winetest /enable"); ok(r == 0, "r = %lu\n", r); @@ -268,6 +289,7 @@ START_TEST(schtasks) r = ITaskFolder_DeleteFolder(root, wine_testW, 0); ok(r == S_OK, "DeleteFolder(\\wine\\test) failed: %lx\n", r); + r = ITaskFolder_DeleteFolder(root, wineW, 0); ok(r == S_OK, "DeleteFolder(\\wine) failed: %lx\n", r); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5151