Skip to content

Commit 8d5ee27

Browse files
committed
fix(detection/terminalshell): use absolute path to shell if available
1 parent 1c2c664 commit 8d5ee27

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

src/detection/terminalshell/terminalshell.c

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,12 @@ static bool extractBashVersion(const char* line, FF_MAYBE_UNUSED uint32_t len, v
6464
return false;
6565
}
6666

67-
static bool getShellVersionBash(FFstrbuf* exe, FFstrbuf* exePath, FFstrbuf* version)
67+
static bool getShellVersionBash(FFstrbuf* exePath, FFstrbuf* version)
6868
{
69-
const char* path = exePath->chars;
70-
if (*path == '\0')
71-
path = exe->chars;
72-
ffBinaryExtractStrings(path, extractBashVersion, version, (uint32_t) strlen("@(#)Bash version 0.0.0(0) release GNU"));
69+
ffBinaryExtractStrings(exePath->chars, extractBashVersion, version, (uint32_t) strlen("@(#)Bash version 0.0.0(0) release GNU"));
7370
if (version->length > 0) return true;
7471

75-
if(!getExeVersionRaw(exe, version))
72+
if(!getExeVersionRaw(exePath, version))
7673
return false;
7774

7875
// GNU bash, version 5.1.16(1)-release (x86_64-pc-msys)\nCopyright...
@@ -230,16 +227,12 @@ static bool extractZshVersion(const char* line, FF_MAYBE_UNUSED uint32_t len, vo
230227
return false;
231228
}
232229

233-
static bool getShellVersionZsh(FFstrbuf* exe, FFstrbuf* exePath, FFstrbuf* version)
230+
static bool getShellVersionZsh(FFstrbuf* exePath, FFstrbuf* version)
234231
{
235-
const char* path = exePath->chars;
236-
if (*path == '\0')
237-
path = exe->chars;
238-
239-
ffBinaryExtractStrings(path, extractZshVersion, version, (uint32_t) strlen("zsh-0.0-0"));
232+
ffBinaryExtractStrings(exePath->chars, extractZshVersion, version, (uint32_t) strlen("zsh-0.0-0"));
240233
if (version->length) return true;
241234

242-
return getExeVersionGeneral(exe, version); //zsh 5.9 (arm-apple-darwin21.3.0)
235+
return getExeVersionGeneral(exePath, version); //zsh 5.9 (arm-apple-darwin21.3.0)
243236
}
244237

245238
#ifdef _WIN32
@@ -270,38 +263,41 @@ bool fftsGetShellVersion(FFstrbuf* exe, const char* exeName, FFstrbuf* exePath,
270263
if(ffStrEqualsIgnCase(exeName, "sh")) // #849
271264
return false;
272265

266+
if (exePath->length == 0)
267+
exePath = exe;
268+
273269
if(ffStrEqualsIgnCase(exeName, "bash"))
274-
return getShellVersionBash(exe, exePath, version);
270+
return getShellVersionBash(exePath, version);
275271
if(ffStrEqualsIgnCase(exeName, "zsh"))
276-
return getShellVersionZsh(exe, exePath, version);
272+
return getShellVersionZsh(exePath, version);
277273
if(ffStrEqualsIgnCase(exeName, "fish"))
278-
return getShellVersionFish(exe, version);
274+
return getShellVersionFish(exePath, version);
279275
if(ffStrEqualsIgnCase(exeName, "pwsh"))
280-
return getShellVersionPwsh(exe, version);
276+
return getShellVersionPwsh(exePath, version);
281277
if(ffStrEqualsIgnCase(exeName, "csh") || ffStrEqualsIgnCase(exeName, "tcsh"))
282-
return getExeVersionGeneral(exe, version); //tcsh 6.24.07 (Astron) 2022-12-21 (aarch64-apple-darwin) options wide,nls,dl,al,kan,sm,rh,color,filec
278+
return getExeVersionGeneral(exePath, version); //tcsh 6.24.07 (Astron) 2022-12-21 (aarch64-apple-darwin) options wide,nls,dl,al,kan,sm,rh,color,filec
283279
if(ffStrEqualsIgnCase(exeName, "nu"))
284-
return getShellVersionNushell(exe, version);
280+
return getShellVersionNushell(exePath, version);
285281
if(ffStrEqualsIgnCase(exeName, "ksh"))
286-
return getShellVersionKsh(exe, version);
282+
return getShellVersionKsh(exePath, version);
287283
if(ffStrEqualsIgnCase(exeName, "oksh"))
288-
return getShellVersionOksh(exe, version);
284+
return getShellVersionOksh(exePath, version);
289285
if(ffStrEqualsIgnCase(exeName, "oil.ovm"))
290-
return getShellVersionOils(exe, version);
286+
return getShellVersionOils(exePath, version);
291287
if(ffStrEqualsIgnCase(exeName, "elvish"))
292-
return getExeVersionRaw(exe, version);
288+
return getExeVersionRaw(exePath, version);
293289
if(ffStrEqualsIgnCase(exeName, "ash"))
294-
return getShellVersionAsh(exe, version);
290+
return getShellVersionAsh(exePath, version);
295291
if(ffStrEqualsIgnCase(exeName, "xonsh"))
296-
return getShellVersionXonsh(exe, version);
292+
return getShellVersionXonsh(exePath, version);
297293
if(ffStrEqualsIgnCase(exeName, "brush"))
298-
return getExeVersionGeneral(exe, version); // brush 0.2.23 (git:2835487)
294+
return getExeVersionGeneral(exePath, version); // brush 0.2.23 (git:2835487)
299295

300296
#ifdef _WIN32
301297
if(ffStrEqualsIgnCase(exeName, "powershell") || ffStrEqualsIgnCase(exeName, "powershell_ise"))
302-
return getShellVersionWinPowerShell(exe, version);
298+
return getShellVersionWinPowerShell(exePath, version);
303299

304-
return getFileVersion(exe, NULL, version);
300+
return getFileVersion(exePath, NULL, version);
305301
#endif
306302

307303
return false;

0 commit comments

Comments
 (0)