Reading a large interval as TimeSpan returns a wrong value instead of throwing
Maintainer antworten meist innerhalb von 6 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 66/100
Rechercherichtung
Beginne damit nachzuverfolgen, wie Npgsql PostgreSQL-Intervalle in TimeSpan einliest, und sieh dir anschließend die Tests in der Nähe zu Intervallkonvertierungen und Überlauffällen an. Reproduziere den Fehler mit der bereitgestellten Abfrage, die interval '300000000 hours' verwendet; fertig ist die Aufgabe, wenn Intervalle außerhalb des Wertebereichs eine Ausnahme auslösen, statt einen übergelaufenen Wert zurückzugeben, während unterstützte Intervalle weiterhin korrekt eingelesen werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Steps to reproduce
await using var dataSource = NpgsqlDataSource.Create("Host=localhost;Username=test;Password=test;Database=test");
await using var cmd = dataSource.CreateCommand("SELECT interval '300000000 hours'");
var value = (TimeSpan)(await cmd.ExecuteScalarAsync())!;
Console.WriteLine(value);
The issue
The interval is larger than TimeSpan.MaxValue, but reading it as TimeSpan doesn't throw. The tick computation overflows and the read returns a wrapped value with the wrong sign, -8850398.05:36:10.9551616. interval '-300000000 hours' comes back positive, and interval '20000000 days' wraps the same way. PostgreSQL itself returns 300000000:00:00.
Reading an interval that has months as TimeSpan already throws InvalidCastException. An interval outside the range of TimeSpan should throw too, instead of returning a wrong value.
Further technical details
Npgsql version: main at b35800b47764b9bb5e0fce3c6d06132ca8107c52
PostgreSQL version: 17.11
Operating system: Linux x86_64
Other details about my project setup: .NET SDK 10.0.403
- Vorherrschende Sprache
- C#
- Sterne
- 3.7k
- Forks
- 890
- Ø Merge
- 4 T. 11 Std.
- Gemergte PRs (30 T.)
- 19
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus npgsql/npgsql
-
Writing a decimal as numeric allocates a short[9] per valueEvtl. vergeben @tamasprincz97-dot hat das vor 13 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 89/100
Maintainer antworten meist innerhalb von 6 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 6 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
npgsql/npgsql#6569 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 6 Tagen
-
ReadReplicationSlot returns the slot name as passed, not the one the server readEvtl. vergeben @Brar hat das vor 8 Tagen übernommen. Offenreplication
npgsql/npgsql#6735 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 6 Tagen
-
Multi-host: a host that accepts TCP but never responds is never marked offline, so every new connection waits for the full TimeoutEvtl. vergeben @mt89vein hat das vor 7 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 22/100
Maintainer antworten meist innerhalb von 6 Tagen
Ähnliche Issues
-
Issue-Bug Needs-Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
JiaFeiMiao-K-Cat/DiscImageStudio#281 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/access-management Frontend onboarding candidate :handshake:
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Altinn/altinn-auth#4941 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
aws/aws-sdk-net#4586 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag