From 8628439ede1a71203285db36286e85ad98662f03 Mon Sep 17 00:00:00 2001 From: Dariton4000 <184837391+Dariton4000@users.noreply.github.com> Date: Thu, 11 Jun 2026 14:27:13 +0200 Subject: [PATCH] fix: running unsloth inside of System32 now refuses to run and quits with an error (#5934) * -Added catch for unsloth running inside of system32 (for windows) - changed import statement to import os as _os instead of only os.path as _osp - replaced __osp mention with __os.path * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Adressed geminis codereview. Did not change Error message as "System32" is precise enough and the _system32 variable is lowercase only * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Etherll <61019402+Etherll@users.noreply.github.com> --- unsloth_cli/__init__.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/unsloth_cli/__init__.py b/unsloth_cli/__init__.py index c8ec4c66c0..e1047a6515 100644 --- a/unsloth_cli/__init__.py +++ b/unsloth_cli/__init__.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: AGPL-3.0-only # Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0 -import os.path as _osp +import os as _os import sys as _sys import typer @@ -20,7 +20,7 @@ from unsloth_cli.commands.studio import ( # Canonicalise `-np` only under the `unsloth` console-script; # third-party scripts that import unsloth_cli keep their argv intact. -_entry_base = _osp.basename(_sys.argv[0]).lower() if _sys.argv else "" +_entry_base = _os.path.basename(_sys.argv[0]).lower() if _sys.argv else "" if _entry_base in {"unsloth", "unsloth.exe"}: _expand_attached_np_short() del _entry_base @@ -53,7 +53,21 @@ def main( help = "Show version and exit.", ), ): - pass + if ( + _sys.platform == "win32" + ): # this block catches unsloth running inside of System32 or any subdirs, this WILL cause errors if not prevented. + _cwd = _os.path.normcase(_os.path.normpath(_os.getcwd())) + _system32 = _os.path.normcase( + _os.path.normpath(_os.path.join(_os.environ.get("WINDIR", r"C:\Windows"), "System32")) + ) + if _cwd == _system32 or _cwd.startswith(_system32 + _os.sep): + typer.secho( + "Refusing to run Unsloth inside System32 as it will lead to Errors.\n" + "cd to a normal working directory and try again.", + fg = "red", + err = True, + ) + raise typer.Exit(code = 1) app.command()(train)