From 6d55d39737be0c97a02e04b8acdf01019aa0650d Mon Sep 17 00:00:00 2001
From: clawbot <35+clawbot@noreply.example.org>
Date: Tue, 27 Oct 2026 01:50:34 +0100
Subject: [PATCH] Keep accented letters in AS names (closes #165)
The built-in AS list had no letter outside ASCII, and make asupdate
rejected today's as.csv, which added a country code column.
The generator now checks only the first three header columns and reads
past the rest; the parsing moved into parseCSV. The list is regenerated.
The new source spells some names differently and no longer lists AS 0
or the documentation AS numbers, so the tests that relied on those
entries changed.
A WHOIS answer that is not valid UTF-8 is now decoded as Latin-1, which
RIPE and APNIC send, before it is parsed and stored. LACNIC answers in
UTF-8.
Model: opus-5-5
---
TODO.md | 5 ++
cmd/asinfo-gen/main.go | 76 +++++++++++-------
cmd/asinfo-gen/main_test.go | 55 +++++++++++++
go.mod | 1 +
go.sum | 2 +
internal/server/handlers_internal_test.go | 93 ++++++----------------
internal/whois/whois.go | 27 ++++++-
internal/whois/whois_test.go | 50 ++++++++++++
pkg/asinfo/asdata.json.gz | Bin 2503694 -> 2625411 bytes
pkg/asinfo/asinfo_test.go | 22 ++---
pkg/asinfo/example_test.go | 2 +-
11 files changed, 224 insertions(+), 109 deletions(-)
create mode 100644 cmd/asinfo-gen/main_test.go
diff --git a/TODO.md b/TODO.md
index 34187e8..94c3490 100644
--- a/TODO.md
+++ b/TODO.md
@@ -33,6 +33,11 @@ tested.
# Completed Steps
+- 2026-10-27: AS names keep their accented letters. The AS list built into
+ RouteWatch is rebuilt from today's `as.csv`, which added a country code
+ column. That file no longer lists AS 0 or the documentation AS numbers. A
+ WHOIS answer that is not valid UTF-8 is decoded as Latin-1, which RIPE and
+ APNIC send, before it is parsed and stored (closes #165)
- 2026-10-27: the Age column on the AS and prefix pages reads in words, such as
"5 minutes ago" or "2 weeks ago", instead of Go durations such as "360h0m0s
ago". An age under a minute reads in seconds, and one over a month in months
diff --git a/cmd/asinfo-gen/main.go b/cmd/asinfo-gen/main.go
index fbc0a50..50040e4 100644
--- a/cmd/asinfo-gen/main.go
+++ b/cmd/asinfo-gen/main.go
@@ -6,6 +6,7 @@ import (
"encoding/csv"
"encoding/json"
"errors"
+ "fmt"
"io"
"log"
"net/http"
@@ -16,6 +17,17 @@ import (
const asCsvURL = "https://github.com/ipverse/asn-info/raw/refs/heads/master/as.csv"
+// The first columns of as.csv, the ones the generator reads. It reads past
+// the columns after them, such as the country code.
+const (
+ asnColumn = "asn"
+ handleColumn = "handle"
+ descriptionColumn = "description"
+ columnsRead = 3
+)
+
+var errUnexpectedHeader = errors.New("unexpected CSV header")
+
// ASInfo represents information about an Autonomous System
type ASInfo struct {
ASN int `json:"asn"`
@@ -45,24 +57,50 @@ func main() {
log.Fatalf("Failed to fetch CSV: HTTP %d", resp.StatusCode)
}
- // Parse CSV
- reader := csv.NewReader(resp.Body)
+ asInfos, err := parseCSV(resp.Body)
+
+ // Closed here rather than deferred: log.Fatalf exits without running
+ // deferred calls.
+ _ = resp.Body.Close()
+
+ if err != nil {
+ log.Fatalf("Failed to parse CSV: %v", err)
+ }
+
+ log.Printf("Parsed %d AS records", len(asInfos))
+
+ // Convert to JSON and output to stdout
+ encoder := json.NewEncoder(os.Stdout)
+ encoder.SetIndent("", "\t")
+
+ err = encoder.Encode(asInfos)
+ if err != nil {
+ log.Fatalf("Failed to encode JSON: %v", err)
+ }
+}
+
+// parseCSV reads as.csv from r and returns its ASes, with the handle and the
+// description as the file spells them. A header whose first columns are not
+// the AS number, the handle and the description is an error. A record that
+// does not parse is logged and skipped.
+func parseCSV(r io.Reader) ([]ASInfo, error) {
+ reader := csv.NewReader(r)
- // Read header
header, err := reader.Read()
if err != nil {
- log.Fatalf("Failed to read CSV header: %v", err)
+ return nil, fmt.Errorf("read CSV header: %w", err)
}
- if len(header) != 3 || header[0] != "asn" || header[1] != "handle" ||
- header[2] != "description" {
- log.Fatalf("Unexpected CSV header: %v", header)
+ if len(header) < columnsRead || header[0] != asnColumn ||
+ header[1] != handleColumn || header[2] != descriptionColumn {
+ return nil, fmt.Errorf("%w: %v", errUnexpectedHeader, header)
}
- // Read all records
var asInfos []ASInfo
for {
+ // The reader returns an error for a record with a different number
+ // of fields than the header.
record, err := reader.Read()
if errors.Is(err, io.EOF) {
break
@@ -74,13 +112,6 @@ func main() {
continue
}
- const expectedFields = 3
- if len(record) != expectedFields {
- log.Printf("Skipping invalid record: %v", record)
-
- continue
- }
-
asn, err := strconv.Atoi(record[0])
if err != nil {
log.Printf("Invalid ASN %q: %v", record[0], err)
@@ -95,18 +126,5 @@ func main() {
})
}
- // Closed here rather than deferred: log.Fatalf exits without running
- // deferred calls.
- _ = resp.Body.Close()
-
- log.Printf("Parsed %d AS records", len(asInfos))
-
- // Convert to JSON and output to stdout
- encoder := json.NewEncoder(os.Stdout)
- encoder.SetIndent("", "\t")
-
- err = encoder.Encode(asInfos)
- if err != nil {
- log.Fatalf("Failed to encode JSON: %v", err)
- }
+ return asInfos, nil
}
diff --git a/cmd/asinfo-gen/main_test.go b/cmd/asinfo-gen/main_test.go
new file mode 100644
index 0000000..aac62a1
--- /dev/null
+++ b/cmd/asinfo-gen/main_test.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+ "slices"
+ "strings"
+ "testing"
+)
+
+// TestParseCSVReadsTodaysLayout parses an as.csv with the country code column
+// that the source added after the description. It expects each AS with its
+// handle and description spelled exactly as in the file, accents included.
+func TestParseCSVReadsTodaysLayout(t *testing.T) {
+ t.Parallel()
+
+ const asCSV = `asn,handle,description,country-code
+1,LVLT-1,Level 3 Parent LLC,US
+1251,FUNDACAO-AMPARO-PESQUISA,FUNDAÇÃO DE AMPARO À PESQUISA DO ESTADO SÃO PAULO,BR
+`
+
+ got, err := parseCSV(strings.NewReader(asCSV))
+ if err != nil {
+ t.Fatalf("parseCSV: %v", err)
+ }
+
+ want := []ASInfo{
+ {ASN: 1, Handle: "LVLT-1", Description: "Level 3 Parent LLC"},
+ {
+ ASN: 1251,
+ Handle: "FUNDACAO-AMPARO-PESQUISA",
+ Description: "FUNDAÇÃO DE AMPARO À PESQUISA DO ESTADO " +
+ "SÃO PAULO",
+ },
+ }
+
+ if !slices.Equal(got, want) {
+ t.Errorf("parseCSV = %+v, want %+v", got, want)
+ }
+}
+
+// TestParseCSVRejectsAnotherHeader parses files whose first columns are not
+// the AS number, the handle and the description. It expects an error rather
+// than a list read from the wrong columns.
+func TestParseCSVRejectsAnotherHeader(t *testing.T) {
+ t.Parallel()
+
+ for _, asCSV := range []string{
+ "asn,handle\n1,LVLT-1\n",
+ "asn,description,handle\n1,Level 3 Parent LLC,LVLT-1\n",
+ } {
+ _, err := parseCSV(strings.NewReader(asCSV))
+ if err == nil {
+ t.Errorf("parseCSV(%q): no error", asCSV)
+ }
+ }
+}
diff --git a/go.mod b/go.mod
index 10d57f5..e2f91ee 100644
--- a/go.mod
+++ b/go.mod
@@ -10,6 +10,7 @@ require (
github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9
go.uber.org/fx v1.24.0
golang.org/x/term v0.33.0
+ golang.org/x/text v0.43.0
)
require (
diff --git a/go.sum b/go.sum
index 4e183bc..64fe7a1 100644
--- a/go.sum
+++ b/go.sum
@@ -28,5 +28,7 @@ golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
+golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc=
+golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/internal/server/handlers_internal_test.go b/internal/server/handlers_internal_test.go
index 0110958..620276a 100644
--- a/internal/server/handlers_internal_test.go
+++ b/internal/server/handlers_internal_test.go
@@ -458,8 +458,8 @@ func TestPrefixDetailShowsOriginNames(t *testing.T) {
// TestPagesSayOriginZeroIsNoKnownOrigin stores a route with origin 0, as the
// prefix handler stores a route whose AS path ends in an AS set of several
// members, and checks that the prefix page and the prefix length page say it
-// has no known origin, without a link to AS0 or the description of the
-// reserved AS 0 (https://git.eeqj.de/sneak/routewatch/issues/75).
+// has no known origin, without a link to AS0
+// (https://git.eeqj.de/sneak/routewatch/issues/75).
func TestPagesSayOriginZeroIsNoKnownOrigin(t *testing.T) {
t.Parallel()
@@ -479,11 +479,6 @@ func TestPagesSayOriginZeroIsNoKnownOrigin(t *testing.T) {
t.Fatalf("UpsertLiveRouteBatch: %v", err)
}
- reserved, ok := asinfo.Get(0)
- if !ok {
- t.Fatal("AS0 is not in the AS info data")
- }
-
s := New(db, streamer.New(logger.New(), metrics.New()), logger.New(), &config.Config{})
for _, path := range []string{"/prefix/" + testPrefixV4, prefixLengthPagePath} {
@@ -505,10 +500,6 @@ func TestPagesSayOriginZeroIsNoKnownOrigin(t *testing.T) {
if strings.Contains(page, `href="/as/0"`) {
t.Errorf("%s links to AS0", path)
}
-
- if strings.Contains(page, html.EscapeString(reserved.Description)) {
- t.Errorf("%s shows AS0's description %q", path, reserved.Description)
- }
}
}
@@ -1327,7 +1318,7 @@ func TestASSearchAnswersMatches(t *testing.T) {
}
cloudflare := asinfo.Info{
- ASN: 13335, Handle: "CLOUDFLARENET", Description: "Cloudflare, Inc.",
+ ASN: 13335, Handle: "CLOUDFLARENET", Description: "Cloudflare Inc.",
}
if !slices.Contains(data.Results, cloudflare) {
t.Errorf("results %v do not hold %v", data.Results, cloudflare)
@@ -1400,8 +1391,9 @@ func TestASSearchShowsFirstMatchesAndTotal(t *testing.T) {
// The AS numbers the AS detail tests ask for. storedASN originates the route
// for testPrefixV4 and is in the database. routeOnlyASN originates the route
// for testPrefixV6, but the database has no record of the AS itself, as when
-// a route is stored before its AS. builtInOnlyASN is in the AS list built into
-// asinfo but not in the database. unknownASN is in neither.
+// a route is stored before its AS. Both are documentation AS numbers, which
+// the AS list built into asinfo does not hold. builtInOnlyASN is in that list
+// but not in the database. unknownASN is in neither.
const (
storedASN = 64500
routeOnlyASN = 64501
@@ -1417,14 +1409,12 @@ const firstSeenCard = `
First Seen
`
// newServerWithStoredAS returns newServerWithTestRoutes's server with storedASN
// added to the database. It fails the test when the AS list built into asinfo
-// lacks routeOnlyASN or builtInOnlyASN, or holds unknownASN.
+// lacks builtInOnlyASN or holds unknownASN.
func newServerWithStoredAS(t *testing.T) *Server {
t.Helper()
- for _, asn := range []int{routeOnlyASN, builtInOnlyASN} {
- if _, ok := asinfo.Get(asn); !ok {
- t.Fatalf("AS%d is not in the AS info data", asn)
- }
+ if _, ok := asinfo.Get(builtInOnlyASN); !ok {
+ t.Fatalf("AS%d is not in the AS info data", builtInOnlyASN)
}
if _, ok := asinfo.Get(unknownASN); ok {
@@ -1442,10 +1432,10 @@ func newServerWithStoredAS(t *testing.T) *Server {
}
// TestASDetailJSONAnswersBuiltInAS asks /api/v1/as/ for each of the ASes above.
-// All but unknownASN answer 200 with the handle and description from the
-// built-in AS list and their prefixes, as lists even when empty. Only storedASN
-// has a first_seen time. unknownASN answers 404. Before the fix builtInOnlyASN
-// and routeOnlyASN answered 404 too
+// All but unknownASN answer 200 with the handle and description the built-in
+// AS list has for them, if any, and their prefixes, as lists even when empty.
+// Only storedASN has a first_seen time. unknownASN answers 404. Before the fix
+// builtInOnlyASN and routeOnlyASN answered 404 too
// (https://git.eeqj.de/sneak/routewatch/issues/151).
func TestASDetailJSONAnswersBuiltInAS(t *testing.T) {
t.Parallel()
@@ -1499,13 +1489,13 @@ func TestASDetailJSONAnswersBuiltInAS(t *testing.T) {
continue
}
- info, _ := asinfo.Get(tt.asn)
+ handle, description := asinfo.GetHandle(tt.asn), asinfo.GetDescription(tt.asn)
got := body.Data.ASN
- if got.ASN != tt.asn || got.Handle != info.Handle ||
- got.Description != info.Description {
+ if got.ASN != tt.asn || got.Handle != handle ||
+ got.Description != description {
t.Errorf("%s: AS %d %q %q, want %d %q %q", path, got.ASN,
- got.Handle, got.Description, tt.asn, info.Handle, info.Description)
+ got.Handle, got.Description, tt.asn, handle, description)
}
if body.Data.IPv4Prefixes == nil || body.Data.IPv6Prefixes == nil {
@@ -1532,11 +1522,11 @@ func TestASDetailJSONAnswersBuiltInAS(t *testing.T) {
}
// TestASDetailPageShowsBuiltInAS asks /as/ for each of the ASes above. All but
-// unknownASN answer 200 with the handle and description from the built-in AS
-// list. storedASN and routeOnlyASN list their prefixes, and builtInOnlyASN says
-// the AS announces none. Only storedASN shows a first-seen date, and no page
-// shows a date that was never set. unknownASN answers 404. Before the fix
-// builtInOnlyASN and routeOnlyASN answered 404 too
+// unknownASN answer 200 with the handle and description the built-in AS list
+// has for them, if any. storedASN and routeOnlyASN list their prefixes, and
+// builtInOnlyASN says the AS announces none. Only storedASN shows a first-seen
+// date, and no page shows a date that was never set. unknownASN answers 404.
+// Before the fix builtInOnlyASN and routeOnlyASN answered 404 too
// (https://git.eeqj.de/sneak/routewatch/issues/151).
func TestASDetailPageShowsBuiltInAS(t *testing.T) {
t.Parallel()
@@ -1572,12 +1562,11 @@ func TestASDetailPageShowsBuiltInAS(t *testing.T) {
continue
}
- info, _ := asinfo.Get(tt.asn)
page := rec.Body.String()
for _, want := range []string{
- html.EscapeString(info.Handle),
- html.EscapeString(info.Description),
+ html.EscapeString(asinfo.GetHandle(tt.asn)),
+ html.EscapeString(asinfo.GetDescription(tt.asn)),
tt.wantText,
} {
if !strings.Contains(page, want) {
@@ -1599,17 +1588,11 @@ func TestASDetailPageShowsBuiltInAS(t *testing.T) {
// TestNoOriginHasNoASAnswers stores a route with no known origin, which has
// origin AS 0 (https://git.eeqj.de/sneak/routewatch/issues/75). It expects
-// /as/0 and /api/v1/as/0 to answer 404. It expects a search for "iana" to leave
-// AS 0 out of its results and its total, although the AS list built into
-// asinfo holds AS 0. That search has more matches than an answer holds, so it
-// still lists maxASSearchResults of them.
+// /as/0 and /api/v1/as/0 to answer 404.
func TestNoOriginHasNoASAnswers(t *testing.T) {
t.Parallel()
- const (
- noOriginPrefix = "203.0.113.0/24"
- query = "iana"
- )
+ const noOriginPrefix = "203.0.113.0/24"
s := newServerWithTestRoutes(t)
@@ -1635,30 +1618,6 @@ func TestNoOriginHasNoASAnswers(t *testing.T) {
path, rec.Code, http.StatusNotFound, rec.Body)
}
}
-
- first, total := asinfo.Search(query, 1)
- if len(first) != 1 || first[0].ASN != ristypes.NoOrigin {
- t.Fatalf("AS%d is not the first match for %q in the AS info data",
- ristypes.NoOrigin, query)
- }
-
- data := searchAS(t, s, "q="+query)
-
- for _, info := range data.Results {
- if info.ASN == ristypes.NoOrigin {
- t.Errorf("the search for %q lists AS%d", query, info.ASN)
- }
- }
-
- if data.Total != total-1 {
- t.Errorf("the search for %q has a total of %d, want %d",
- query, data.Total, total-1)
- }
-
- if len(data.Results) != maxASSearchResults {
- t.Errorf("the search for %q lists %d matches, want %d",
- query, len(data.Results), maxASSearchResults)
- }
}
// settledGoroutineCount lets transient goroutines finish, then reports the
diff --git a/internal/whois/whois.go b/internal/whois/whois.go
index 2427260..042ec2b 100644
--- a/internal/whois/whois.go
+++ b/internal/whois/whois.go
@@ -11,6 +11,9 @@ import (
"regexp"
"strings"
"time"
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding/charmap"
)
// Timeout constants for WHOIS queries.
@@ -213,8 +216,8 @@ func (c *Client) queryRIR(
return answer, nil
}
-// query performs a raw WHOIS query to the specified server. An answer that
-// reaches maxAnswerSize is an error.
+// query performs a raw WHOIS query to the specified server and returns the
+// answer in UTF-8. An answer that reaches maxAnswerSize is an error.
func (c *Client) query(ctx context.Context, server, query string) (string, error) {
conn, err := c.DialContext(ctx, "tcp", server)
if err != nil {
@@ -261,7 +264,25 @@ func (c *Client) query(ctx context.Context, server, query string) (string, error
return "", fmt.Errorf("read response: %w", errAnswerTooLarge)
}
- return sb.String(), nil
+ return toUTF8(sb.String())
+}
+
+// toUTF8 returns a WHOIS answer in UTF-8. An answer that is valid UTF-8 is
+// returned as it is. Any other answer is decoded as Latin-1, which RIPE and
+// APNIC send. LACNIC, ARIN and AFRINIC send UTF-8. RIPE's database working
+// group lists the five here:
+// https://www.ripe.net/ripe/mail/archives/db-wg/2024-May/008075.html
+func toUTF8(answer string) (string, error) {
+ if utf8.ValidString(answer) {
+ return answer, nil
+ }
+
+ decoded, err := charmap.ISO8859_1.NewDecoder().String(answer)
+ if err != nil {
+ return "", fmt.Errorf("decode Latin-1 answer: %w", err)
+ }
+
+ return decoded, nil
}
// parseIANAReferral extracts the RIR and WHOIS server from an IANA response.
diff --git a/internal/whois/whois_test.go b/internal/whois/whois_test.go
index 0fee412..18b1550 100644
--- a/internal/whois/whois_test.go
+++ b/internal/whois/whois_test.go
@@ -12,6 +12,7 @@ import (
"syscall"
"testing"
"time"
+ "unicode/utf8"
"git.eeqj.de/sneak/routewatch/internal/whois"
)
@@ -273,6 +274,55 @@ func TestLookupASNAsksAPNICAndAFRINICToLeaveOutPersonalData(t *testing.T) {
}
}
+// The name of an organisation with accented letters, in Latin-1, one byte for
+// each letter, and in UTF-8.
+const (
+ latin1OrgName = "Fundaci\xf3n Ra\xedces de Espa\xf1a"
+ utf8OrgName = "Fundación Raíces de España"
+)
+
+// TestLookupASNStoresAnswersInUTF8 looks up an AS at RIPE, which answers in
+// Latin-1, and at LACNIC, which answers in UTF-8. Both answers give the
+// organisation's name with its accented letters in UTF-8, in the parsed field
+// and in the stored answer. Before the fix the Latin-1 answer was kept as
+// received, which is not valid UTF-8.
+func TestLookupASNStoresAnswersInUTF8(t *testing.T) {
+ t.Parallel()
+
+ for name, answers := range map[string]map[string]string{
+ "RIPE in Latin-1": {
+ ianaQuery: ianaReferral,
+ ripeQuery: "aut-num: AS3333\n" +
+ "org-name: " + latin1OrgName + "\n",
+ },
+ "LACNIC in UTF-8": {
+ ianaQuery: "refer: whois.lacnic.net\n",
+ "whois.lacnic.net:43 " + asQuery: "aut-num: AS3333\n" +
+ "owner: " + utf8OrgName + "\n",
+ },
+ } {
+ t.Run(name, func(t *testing.T) {
+ t.Parallel()
+
+ info, err := lookUp(t, answers)
+ if err != nil {
+ t.Fatalf("LookupASN: %v", err)
+ }
+
+ if info.OrgName != utf8OrgName {
+ t.Errorf("LookupASN org name = %q, want %q",
+ info.OrgName, utf8OrgName)
+ }
+
+ if !utf8.ValidString(info.RawResponse) ||
+ !strings.Contains(info.RawResponse, utf8OrgName) {
+ t.Errorf("LookupASN answer = %q, want UTF-8 holding %q",
+ info.RawResponse, utf8OrgName)
+ }
+ })
+ }
+}
+
// TestLookupASNReportsARefusal looks up an AS IANA refers to RIPE when RIPE
// refuses the query, with each of the error lines RIPE refuses with. The
// error holds RIPE's line, so the log says why the lookup failed.
diff --git a/pkg/asinfo/asdata.json.gz b/pkg/asinfo/asdata.json.gz
index 5e6b4684dc1feceaaf2adb0d7cc2a100a303393f..0b9ba994b97cd62fe240cad6d7db6034ce90ab0d 100644
GIT binary patch
literal 2625411
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