refactor: replace panic calls with structured error handling

Replace ~25 panic() calls in non-fatal code paths with proper
s.logger.Error + return patterns. Panics in handler code crashed
goroutines (caught by defer/recover but still disruptive) instead
of failing gracefully.

Key changes:
- SJISToUTF8 now returns (string, error); all 30+ callers updated
- Handler DB/IO panics replaced with log + return/ack fail
- Unhandled switch-case panics replaced with logger.Error
- Sign server Accept() panic replaced with log + continue
- Dead unreachable panic in guild_model.go removed
- deltacomp patch error logs and returns partial data

Panics intentionally kept: ByteFrame sentinel, unimplemented
packet stubs, os.Exit in main.go.
This commit is contained in:
Houmgaor
2026-02-20 19:11:41 +01:00
parent 06cb3afa57
commit d32e77efba
31 changed files with 141 additions and 130 deletions

View File

@@ -32,7 +32,10 @@ func TestUTF8ToSJIS(t *testing.T) {
func TestSJISToUTF8(t *testing.T) {
// Test ASCII characters (which are the same in SJIS and UTF-8)
asciiBytes := []byte("Hello World")
result := SJISToUTF8(asciiBytes)
result, err := SJISToUTF8(asciiBytes)
if err != nil {
t.Fatalf("SJISToUTF8() unexpected error: %v", err)
}
if result != "Hello World" {
t.Errorf("SJISToUTF8() = %q, want %q", result, "Hello World")
}
@@ -42,7 +45,7 @@ func TestUTF8ToSJIS_RoundTrip(t *testing.T) {
// Test round-trip conversion for ASCII
original := "Hello World 123"
sjis := UTF8ToSJIS(original)
back := SJISToUTF8(sjis)
back, _ := SJISToUTF8(sjis)
if back != original {
t.Errorf("Round-trip failed: got %q, want %q", back, original)
@@ -509,7 +512,7 @@ func TestUTF8ToSJIS_PreservesValidContent(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sjis := UTF8ToSJIS(tt.input)
roundTripped := SJISToUTF8(sjis)
roundTripped, _ := SJISToUTF8(sjis)
if roundTripped != tt.expected {
t.Errorf("UTF8ToSJIS(%q) round-tripped to %q, want %q", tt.input, roundTripped, tt.expected)
}
@@ -544,7 +547,7 @@ func BenchmarkSJISToUTF8(b *testing.B) {
text := []byte("Hello World")
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = SJISToUTF8(text)
_, _ = SJISToUTF8(text)
}
}