fix(db): strip NUL bytes from SNMP strings before PostgreSQL insert

Made-with: Cursor
This commit is contained in:
PTah
2026-04-13 12:59:13 +10:00
parent 2ee86598f6
commit 9cdd966039
+20 -15
View File
@@ -10,6 +10,11 @@ import (
"time" "time"
) )
// pgText убирает U+0000: PostgreSQL text/json не принимают нулевой байт в UTF-8 (SQLSTATE 22021).
func pgText(s string) string {
return strings.ReplaceAll(s, "\x00", "")
}
type PostgresStore struct { type PostgresStore struct {
db *sql.DB db *sql.DB
} }
@@ -61,8 +66,8 @@ func (s *PostgresStore) CreateScan(req CreateScanRequest) (ScanJob, error) {
} }
var snmpID any var snmpID any
if job.SNMPCredentialsID != "" { if v := pgText(job.SNMPCredentialsID); v != "" {
snmpID = job.SNMPCredentialsID snmpID = v
} }
query := ` query := `
@@ -74,7 +79,7 @@ insert into scan_jobs (
_, err = s.db.ExecContext(context.Background(), query, _, err = s.db.ExecContext(context.Background(), query,
job.ID, job.ID,
job.Name, pgText(job.Name),
job.Status, job.Status,
string(cidrsJSON), string(cidrsJSON),
string(excludeJSON), string(excludeJSON),
@@ -375,10 +380,10 @@ values ($1, $2, $3, $4, $5, $6, $7, $8)`
scanID, scanID,
result.IP, result.IP,
result.Success, result.Success,
result.SysName, pgText(result.SysName),
result.SysDescr, pgText(result.SysDescr),
result.SysObjectID, pgText(result.SysObjectID),
result.Error, pgText(result.Error),
result.CheckedAt, result.CheckedAt,
) )
return err return err
@@ -433,10 +438,10 @@ values ($1, $2, $3, $4, $5, $6, $7)`
query, query,
scanID, scanID,
result.IP, result.IP,
result.LocalPortNum, pgText(result.LocalPortNum),
result.RemoteChassisID, pgText(result.RemoteChassisID),
result.RemotePortID, pgText(result.RemotePortID),
result.RemoteSysName, pgText(result.RemoteSysName),
result.CheckedAt, result.CheckedAt,
) )
return err return err
@@ -487,9 +492,9 @@ values ($1, $2, $3, $4, $5, $6, $7)`
scanID, scanID,
result.IP, result.IP,
result.IfIndex, result.IfIndex,
result.IfDescr, pgText(result.IfDescr),
result.IfName, pgText(result.IfName),
result.IfOperStatus, pgText(result.IfOperStatus),
result.CheckedAt, result.CheckedAt,
) )
return err return err
@@ -589,7 +594,7 @@ values ($1, $2, $3, $4, $5, $6, $7, $8)`
result.IfIndex, result.IfIndex,
result.BridgePort, result.BridgePort,
result.Vlan, result.Vlan,
result.MAC, pgText(result.MAC),
learnedIP, learnedIP,
result.CheckedAt, result.CheckedAt,
) )