Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Integer division by -1 on INT64_MIN raises a misclassified floating-point exception (22P01) instead of bigint out of range

オープン 初心者向け
#2,590 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 2 日以内に返信

@sean0407 がすでに取り組んでいます。

2026年10月11日 から。

  • #2591 @sean0407 による — オープン

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
74/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
c, postgresql
領域
database

調査の方向性

まず再現から始めます。LOAD 'age' の後に Cypher クエリ RETURN (-9223372036854775807 - 1) / -1 を実行し、22P01(浮動小数点エラー)を確認してください。AGE の agtype 演算で、C 言語による整数除算のうち、検査されていない除算がどこで行われているかを特定します。PostgreSQL の int8.c にある int84div と比較してください。int84div は、この場合 22003(bigint out of range)を発生させます。Cypher クエリが bigint の範囲外エラーで失敗し、それ以外の既存の演算の動作が変わらなければ完了です。

索引モデルが issue の本文から書いたものです。

説明

bug

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

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/age のほかの issue

apache/age の issue をすべて見る

似ている issue

C の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。