Integer division by -1 on INT64_MIN raises a misclassified floating-point exception (22P01) instead of bigint out of range
メンテナーはふだん 2 日以内に返信
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 74/100
調査の方向性
まず再現から始めます。LOAD 'age' の後に Cypher クエリ RETURN (-9223372036854775807 - 1) / -1 を実行し、22P01(浮動小数点エラー)を確認してください。AGE の agtype 演算で、C 言語による整数除算のうち、検査されていない除算がどこで行われているかを特定します。PostgreSQL の int8.c にある int84div と比較してください。int84div は、この場合 22003(bigint out of range)を発生させます。Cypher クエリが bigint の範囲外エラーで失敗し、それ以外の既存の演算の動作が変わらなければ完了です。
索引モデルが issue の本文から書いたものです。
説明
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
- 主要言語
- C
- スター
- 4.9k
- フォーク
- 532
- 平均マージ
- 9日 18時間
- マージ済み PR(30日)
- 10
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/age のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 2 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
メンテナーはふだん 2 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
メンテナーはふだん 2 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 72/100
メンテナーはふだん 2 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 50/100
メンテナーはふだん 2 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
DaveGamble/cJSON#1100 ·
-
UB: (int) cast of a user double outside int range in dispatch / vm_index_is_int / flat_index_atオープンarea:runtime-vm
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
InauguralSystems/EigenScript#1748 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
leanprover/lean4#15677 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 2 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
wasm-micro-runtime/wasm-micro-runtime#5159 ·
メンテナーはふだん 7 日以内に返信