Skip to content

Commit dd49885

Browse files
authored
fix(go/binary): check file mode (fanal#281)
1 parent eec42da commit dd49885

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

analyzer/language/golang/binary/binary.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,13 @@ func (a gobinaryLibraryAnalyzer) Analyze(target analyzer.AnalysisTarget) (*analy
2828
}
2929

3030
func (a gobinaryLibraryAnalyzer) Required(_ string, fileInfo os.FileInfo) bool {
31+
mode := fileInfo.Mode()
32+
if !mode.IsRegular() {
33+
return false
34+
}
35+
3136
// Check executable file
32-
if fileInfo.Mode()&0111 != 0 {
37+
if mode.Perm()&0111 != 0 {
3338
return true
3439
}
3540
return false

analyzer/language/golang/binary/binary_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,16 @@ func Test_gobinaryLibraryAnalyzer_Required(t *testing.T) {
8181
filePath: "testdata/0644",
8282
want: false,
8383
},
84+
{
85+
name: "symlink",
86+
filePath: "testdata/symlink",
87+
want: false,
88+
},
8489
}
8590
for _, tt := range tests {
8691
t.Run(tt.name, func(t *testing.T) {
8792
a := gobinaryLibraryAnalyzer{}
88-
fileInfo, err := os.Stat(tt.filePath)
93+
fileInfo, err := os.Lstat(tt.filePath)
8994
require.NoError(t, err)
9095
got := a.Required(tt.filePath, fileInfo)
9196
assert.Equal(t, tt.want, got, fileInfo.Mode().Perm())

analyzer/language/golang/binary/testdata/foo

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo

0 commit comments

Comments
 (0)