33package verify
44
55import (
6+ "bytes"
67 "encoding/csv"
78 "errors"
89 "fmt"
910 "io"
10- "log"
1111 "net/netip"
12+ "os"
1213 "path/filepath"
1314 "strings"
15+ "unicode/utf8"
1416
15- "github.com/TomOnTime/utfutil"
1617 "github.com/oschwald/maxminddb-golang/v2"
1718)
1819
@@ -62,20 +63,20 @@ func ProcessGeofeed(
6263 c := NewCheckResult ()
6364 var diffLines []string
6465
65- // Use utfutil to remove a BOM, if present (common on files from Windows).
66- // See https://github.com/golang/go/issues/33887.
67- geofeedFH , err := utfutil .OpenFile (filepath .Clean (geofeedFilename ), utfutil .UTF8 )
66+ geofeedData , err := os .ReadFile (filepath .Clean (geofeedFilename ))
6867 if err != nil {
6968 if opts .HideFilePathsInErrorMessages {
7069 return c , diffLines , nil , fmt .Errorf ("unable to open file: %w" , err )
7170 }
7271 return c , diffLines , nil , fmt .Errorf ("unable to open %s: %w" , geofeedFilename , err )
7372 }
74- defer func () {
75- if err := geofeedFH .Close (); err != nil {
76- log .Println (err )
77- }
78- }()
73+
74+ // Strip UTF-8 BOM if present (common on files from Windows).
75+ geofeedData = bytes .TrimPrefix (geofeedData , []byte {0xEF , 0xBB , 0xBF })
76+
77+ if ! utf8 .Valid (geofeedData ) {
78+ return c , diffLines , nil , ErrNotUTF8
79+ }
7980
8081 db , err := maxminddb .Open (filepath .Clean (mmdbFilename ))
8182 if err != nil {
@@ -99,7 +100,7 @@ func ProcessGeofeed(
99100 }
100101 asnCounts := map [uint ]int {}
101102
102- csvReader := csv .NewReader (geofeedFH )
103+ csvReader := csv .NewReader (bytes . NewReader ( geofeedData ) )
103104 csvReader .ReuseRecord = true
104105 csvReader .Comment = '#'
105106 csvReader .FieldsPerRecord = - 1
0 commit comments