]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mingw: drop Windows 7-specific work-around
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sun, 3 Aug 2025 21:25:16 +0000 (21:25 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 4 Aug 2025 01:30:38 +0000 (18:30 -0700)
In ac33519ddfa8 (mingw: restrict file handle inheritance only on Windows
7 and later, 2019-11-22), I introduced code to safe-guard the
defense-in-depth handling that restricts handles' inheritance so that it
would work with Windows 7, too.

Let's revert this patch: Git for Windows dropped supporting Windows 7 (and
Windows 8) directly after Git for Windows v2.46.2. For full details, see
https://gitforwindows.org/requirements#windows-version.

Actually, on second thought: revert only the part that makes this handle
inheritance restriction logic optional and that suggests to open a bug
report if it fails, but keep the fall-back to try again without said
logic: There have been a few false positives over the past few years
(where the warning was triggered e.g. because Defender was still
accessing a file that Git wanted to overwrite), and the fall-back logic
seems to have helped occasionally in such situations.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/core.adoc
compat/mingw.c

index 9fde1ab63a70ea3b595434e54f7e52e0ae181995..3fbe83eef1612ca2652de08e88f1a9d488f6378e 100644 (file)
@@ -696,12 +696,6 @@ core.unsetenvvars::
        Defaults to `PERL5LIB` to account for the fact that Git for
        Windows insists on using its own Perl interpreter.
 
-core.restrictinheritedhandles::
-       Windows-only: override whether spawned processes inherit only standard
-       file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be
-       `auto`, `true` or `false`. Defaults to `auto`, which means `true` on
-       Windows 7 and later, and `false` on older Windows versions.
-
 core.createObject::
        You can set this to 'link', in which case a hardlink followed by
        a delete of the source are used to make sure that object creation
index 2dd5cbcaee0d5a9b50ad08d280516d3fe3a41679..c331c3ac32a8f90a065cb340c0cf29c044adf204 100644 (file)
@@ -244,7 +244,6 @@ enum hide_dotfiles_type {
        HIDE_DOTFILES_DOTGITONLY
 };
 
-static int core_restrict_inherited_handles = -1;
 static enum hide_dotfiles_type hide_dotfiles = HIDE_DOTFILES_DOTGITONLY;
 static char *unset_environment_variables;
 
@@ -268,15 +267,6 @@ int mingw_core_config(const char *var, const char *value,
                return 0;
        }
 
-       if (!strcmp(var, "core.restrictinheritedhandles")) {
-               if (value && !strcasecmp(value, "auto"))
-                       core_restrict_inherited_handles = -1;
-               else
-                       core_restrict_inherited_handles =
-                               git_config_bool(var, value);
-               return 0;
-       }
-
        return 0;
 }
 
@@ -1667,7 +1657,6 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
                              const char *dir,
                              int prepend_cmd, int fhin, int fhout, int fherr)
 {
-       static int restrict_handle_inheritance = -1;
        STARTUPINFOEXW si;
        PROCESS_INFORMATION pi;
        LPPROC_THREAD_ATTRIBUTE_LIST attr_list = NULL;
@@ -1687,16 +1676,6 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
        /* Make sure to override previous errors, if any */
        errno = 0;
 
-       if (restrict_handle_inheritance < 0)
-               restrict_handle_inheritance = core_restrict_inherited_handles;
-       /*
-        * The following code to restrict which handles are inherited seems
-        * to work properly only on Windows 7 and later, so let's disable it
-        * on Windows Vista and 2008.
-        */
-       if (restrict_handle_inheritance < 0)
-               restrict_handle_inheritance = GetVersion() >> 16 >= 7601;
-
        do_unset_environment_variables();
 
        /* Determine whether or not we are associated to a console */
@@ -1798,7 +1777,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
        wenvblk = make_environment_block(deltaenv);
 
        memset(&pi, 0, sizeof(pi));
-       if (restrict_handle_inheritance && stdhandles_count &&
+       if (stdhandles_count &&
            (InitializeProcThreadAttributeList(NULL, 1, 0, &size) ||
             GetLastError() == ERROR_INSUFFICIENT_BUFFER) &&
            (attr_list = (LPPROC_THREAD_ATTRIBUTE_LIST)
@@ -1819,52 +1798,13 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
                             &si.StartupInfo, &pi);
 
        /*
-        * On Windows 2008 R2, it seems that specifying certain types of handles
-        * (such as FILE_TYPE_CHAR or FILE_TYPE_PIPE) will always produce an
-        * error. Rather than playing finicky and fragile games, let's just try
-        * to detect this situation and simply try again without restricting any
-        * handle inheritance. This is still better than failing to create
-        * processes.
+        * On the off-chance that something with the file handle restriction
+        * went wrong, silently fall back to trying without it.
         */
-       if (!ret && restrict_handle_inheritance && stdhandles_count) {
+       if (!ret && stdhandles_count) {
                DWORD err = GetLastError();
                struct strbuf buf = STRBUF_INIT;
 
-               if (err != ERROR_NO_SYSTEM_RESOURCES &&
-                   /*
-                    * On Windows 7 and earlier, handles on pipes and character
-                    * devices are inherited automatically, and cannot be
-                    * specified in the thread handle list. Rather than trying
-                    * to catch each and every corner case (and running the
-                    * chance of *still* forgetting a few), let's just fall
-                    * back to creating the process without trying to limit the
-                    * handle inheritance.
-                    */
-                   !(err == ERROR_INVALID_PARAMETER &&
-                     GetVersion() >> 16 < 9200) &&
-                   !getenv("SUPPRESS_HANDLE_INHERITANCE_WARNING")) {
-                       DWORD fl = 0;
-                       int i;
-
-                       setenv("SUPPRESS_HANDLE_INHERITANCE_WARNING", "1", 1);
-
-                       for (i = 0; i < stdhandles_count; i++) {
-                               HANDLE h = stdhandles[i];
-                               strbuf_addf(&buf, "handle #%d: %p (type %lx, "
-                                           "handle info (%d) %lx\n", i, h,
-                                           GetFileType(h),
-                                           GetHandleInformation(h, &fl),
-                                           fl);
-                       }
-                       strbuf_addstr(&buf, "\nThis is a bug; please report it "
-                                     "at\nhttps://github.com/git-for-windows/"
-                                     "git/issues/new\n\n"
-                                     "To suppress this warning, please set "
-                                     "the environment variable\n\n"
-                                     "\tSUPPRESS_HANDLE_INHERITANCE_WARNING=1"
-                                     "\n");
-               }
-               restrict_handle_inheritance = 0;
                flags &= ~EXTENDED_STARTUPINFO_PRESENT;
                ret = CreateProcessW(*wcmd ? wcmd : NULL, wargs, NULL, NULL,
                                     TRUE, flags, wenvblk, dir ? wdir : NULL,