Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork939
Commitc551e91
committed
Extract shared logic for using Popen safely on Windows
This creates git.util.safer_popen that, on non-Windows systems, isbound to subprocess.Popen (to avoid introducing unnecessarylatency). On Windows, it is a function that wraps subprocess.Popen,consolidating two pieces of logic that had previously beenduplicated:1. Temporarily setting NoDefaultCurrentDirectoryInExePath in the calling environment and, when shell=True is used, setting it in the subprocess environment as well. This prevents executables specified as single names (which are mainly "git" and, for hooks, "bash.exe") from being searched for in the current working directory of GitPython or, when a shell is used, the current working directory of the shell used to run them.2. Passing the CREATE_NO_WINDOW and CREATE_NEW_PROCESS_GROUP flags as creationflags. This is not a security measure. It is indirectly related to safety in that CREATE_NO_WINDOW eliminated at least some, and possibly all, cases where calling Git.execute (directly, or indirectly via a dynamic method) with shell=True conferred an advantage over the inherently more secure default of shell=False; and CREATE_NEW_PROCESS facilitates some ways of terminating subprocesses that would otherwise be unavailable, thereby making resource exhaustion less likely. But really the reason I included creationflags here is that it seems it should always be used in the same situations as preventing the current directory from being searched (and always was), and including it further reduces code duplication and simplifies calling code.This commit does not improve security or robustness, because thesefeatures were already present. Instead, this moves them to a singlelocation. It also documents them by giving the function bound tosafer_popen on Windows, _safer_popen_windows, a detailed docstring.Because there would otherwise be potential for confusion on thedifferent ways to perform or customize path searches, I have alsoadded a doctring to py_where noting its limited use case and itsrelationship to shutil.which and non-shell search.(The search in _safer_popen_windows is typically a non-shellsearch, which is why it cannot be reimplemented to do its ownlookup by calling an only slightly modified version ofshutil.which, without a risk of breaking some currently workinguses. It may, however, be possible to fix the race condition bydoing something analogous for Windows non-shell search behavior,which is largely but not entirely described in the documentationfor CreateProcessW.)1 parent15ebb25 commitc551e91
4 files changed
+106
-59
lines changedLines changed: 15 additions & 33 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
29 | 29 |
| |
30 | 30 |
| |
31 | 31 |
| |
32 |
| - | |
33 | 32 |
| |
| 33 | + | |
34 | 34 |
| |
35 | 35 |
| |
36 | 36 |
| |
| |||
225 | 225 |
| |
226 | 226 |
| |
227 | 227 |
| |
228 |
| - | |
229 |
| - | |
230 |
| - | |
231 |
| - | |
232 |
| - | |
233 |
| - | |
234 |
| - | |
235 |
| - | |
236 | 228 |
| |
237 | 229 |
| |
238 | 230 |
| |
| |||
985 | 977 |
| |
986 | 978 |
| |
987 | 979 |
| |
988 |
| - | |
989 |
| - | |
990 |
| - | |
991 | 980 |
| |
992 | 981 |
| |
993 | 982 |
| |
994 | 983 |
| |
995 | 984 |
| |
996 | 985 |
| |
997 | 986 |
| |
998 |
| - | |
999 |
| - | |
1000 |
| - | |
1001 |
| - | |
1002 |
| - | |
1003 |
| - | |
1004 | 987 |
| |
1005 | 988 |
| |
1006 |
| - | |
1007 | 989 |
| |
1008 | 990 |
| |
1009 | 991 |
| |
| 992 | + | |
| 993 | + | |
1010 | 994 |
| |
1011 | 995 |
| |
1012 | 996 |
| |
| |||
1016 | 1000 |
| |
1017 | 1001 |
| |
1018 | 1002 |
| |
1019 |
| - | |
1020 |
| - | |
1021 |
| - | |
1022 |
| - | |
1023 |
| - | |
1024 |
| - | |
1025 |
| - | |
1026 |
| - | |
1027 |
| - | |
1028 |
| - | |
1029 |
| - | |
1030 |
| - | |
1031 |
| - | |
1032 |
| - | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
1033 | 1015 |
| |
1034 | 1016 |
| |
1035 | 1017 |
| |
|
Lines changed: 9 additions & 16 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
3 | 3 |
| |
4 | 4 |
| |
5 | 5 |
| |
6 |
| - | |
7 | 6 |
| |
8 | 7 |
| |
9 | 8 |
| |
| |||
19 | 18 |
| |
20 | 19 |
| |
21 | 20 |
| |
22 |
| - | |
| 21 | + | |
23 | 22 |
| |
24 | 23 |
| |
25 | 24 |
| |
26 | 25 |
| |
27 | 26 |
| |
28 | 27 |
| |
29 | 28 |
| |
30 |
| - | |
| 29 | + | |
31 | 30 |
| |
32 | 31 |
| |
33 | 32 |
| |
| |||
91 | 90 |
| |
92 | 91 |
| |
93 | 92 |
| |
94 |
| - | |
95 |
| - | |
96 |
| - | |
97 |
| - | |
98 | 93 |
| |
99 | 94 |
| |
100 | 95 |
| |
| |||
103 | 98 |
| |
104 | 99 |
| |
105 | 100 |
| |
106 |
| - | |
107 |
| - | |
108 |
| - | |
109 |
| - | |
110 |
| - | |
111 |
| - | |
112 |
| - | |
113 |
| - | |
114 |
| - | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
115 | 108 |
| |
116 | 109 |
| |
117 | 110 |
| |
|
Lines changed: 73 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
33 | 33 |
| |
34 | 34 |
| |
35 | 35 |
| |
| 36 | + | |
36 | 37 |
| |
37 | 38 |
| |
38 | 39 |
| |
| |||
327 | 328 |
| |
328 | 329 |
| |
329 | 330 |
| |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
330 | 342 |
| |
331 | 343 |
| |
332 | 344 |
| |
| |||
524 | 536 |
| |
525 | 537 |
| |
526 | 538 |
| |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
527 | 600 |
| |
528 | 601 |
| |
529 | 602 |
| |
|
Lines changed: 9 additions & 10 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
25 | 25 |
| |
26 | 26 |
| |
27 | 27 |
| |
28 |
| - | |
| 28 | + | |
29 | 29 |
| |
30 | 30 |
| |
31 | 31 |
| |
| |||
115 | 115 |
| |
116 | 116 |
| |
117 | 117 |
| |
118 |
| - | |
| 118 | + | |
119 | 119 |
| |
120 | 120 |
| |
121 | 121 |
| |
122 | 122 |
| |
123 |
| - | |
| 123 | + | |
124 | 124 |
| |
125 | 125 |
| |
126 | 126 |
| |
127 | 127 |
| |
128 | 128 |
| |
129 |
| - | |
130 |
| - | |
131 |
| - | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
132 | 132 |
| |
133 | 133 |
| |
134 | 134 |
| |
135 | 135 |
| |
136 | 136 |
| |
137 | 137 |
| |
138 |
| - | |
139 |
| - | |
| 138 | + | |
| 139 | + | |
140 | 140 |
| |
141 | 141 |
| |
142 | 142 |
| |
| |||
405 | 405 |
| |
406 | 406 |
| |
407 | 407 |
| |
408 |
| - | |
| 408 | + | |
409 | 409 |
| |
410 | 410 |
| |
411 | 411 |
| |
412 | 412 |
| |
413 | 413 |
| |
414 |
| - | |
415 | 414 |
| |
416 | 415 |
| |
417 | 416 |
| |
|
0 commit comments
Comments
(0)