Integer division by -1 on INT64_MIN raises a misclassified floating-point exception (22P01) instead of bigint out of range
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 74/100
Direzione di ricerca
Parti dalla riproduzione: esegui la query Cypher RETURN (-9223372036854775807 - 1) / -1 dopo LOAD 'age' e osserva l'errore in virgola mobile 22P01. Trova la divisione intera nell'aritmetica agtype di AGE in C, dove avviene la divisione non controllata. Confrontala con int84div in int8.c di PostgreSQL, che in questo caso genera 22003 bigint out of range. È completato quando la query Cypher fallisce con un errore di bigint fuori intervallo e il comportamento esistente dell'aritmetica resta invariato per il resto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
AGE Version: Apache AGE extension 1.8.0 on PostgreSQL 18.6
Installation Method: Docker
API: Cypher
Steps to reproduce
LOAD 'age';
SET search_path = ag_catalog, public;
SELECT * FROM ag_catalog.create_graph('gdbug');
SELECT * FROM cypher('gdbug', $$ RETURN (-9223372036854775807 - 1) / -1 $$) AS (r agtype);
Expected behavior
+9223372036854775808 is outside the signed 64-bit range, so this should fail with a range error. The host database already does exactly that for the identical expression, and AGE inherits that behaviour everywhere except in its own agtype arithmetic:
SELECT (-9223372036854775807 - 1) / -1;
-- ERROR: 22003: bigint out of range
-- LOCATION: int84div, int8.c:986
Actual behavior
The Cypher path does not report a range error. The integer division is executed unchecked; the hardware raises #DE/SIGFPE, and PostgreSQL's signal handler converts it into a floating-point exception:
ERROR: 22P01: floating-point exception
DETAIL: An invalid floating-point operation was signaled. This probably means
an out-of-range result or an invalid operation, such as division by zero.
LOCATION: FloatExceptionHandler, postgres.c:3077
- Lingua principale
- C
- Stelle
- 4.9k
- Fork
- 532
- Merge medio
- 9g 18h
- PR unite (30g)
- 10
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/age
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
I maintainer di solito rispondono entro 2 giorni
Issue simili
-
UB: (int) cast of a user double outside int range in dispatch / vm_index_is_int / flat_index_atApertaarea:runtime-vm
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
InauguralSystems/EigenScript#1748 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 Mezza giornata Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
foomatic-rip: dstrtrim_right() underflows mid-loop on an all-whitespace stringForse già presa @ManasBagul23 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
OpenPrinting/cups-filters#759 ·
I maintainer di solito rispondono entro 11 giorni