[BUG] uint / uint fails with "int overflow" when the quotient is >= 2^63

Aperta Adatta ai principianti
#361 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
84/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
node.js, typescript

Direzione di ricerca

L’issue indica packages/cel/src/std/math.ts e safeDivide, condivisa dagli overload int e uint. Leggi questa funzione e le definizioni degli overload, poi controlla i test di divisione per i valori con e senza segno. Il lavoro è completato quando i quozienti uint validi nell’intero intervallo di uint hanno esito positivo e il comportamento in caso di divisione per zero e di overflow con segno rimane corretto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Description

Dividing two uint values throws int overflow during divide by ... whenever the quotient is larger than 9223372036854775807, although it is a valid uint. Per the language definition, uint / uint only errors on division by zero.

Steps to Reproduce

import { run } from "@bufbuild/cel";

for (const e of [
  "18446744073709551615u / 1u",
  "10000000000000000000u / 1u",
  "uint(9223372036854775808.0) / 1u",
  "18446744073709551615u / 2u",
]) {
  try {
    console.log(e, "=>", run(e, {}));
  } catch (x) {
    console.log(e, "THROWS", x.message);
  }
}

node div.mjs

Expected Behavior

18446744073709551615u, 10000000000000000000u, 9223372036854775808u and 9223372036854775807u (as cel-go returns).

Actual Behavior

18446744073709551615u / 1u => _CelError: int overflow during divide by 1
10000000000000000000u / 1u => _CelError: int overflow during divide by 1
uint(9223372036854775808.0) / 1u => _CelError: int overflow during divide by 1
18446744073709551615u / 2u => Uint { _value: 9223372036854775807n, Symbol(@bufbuild/cel/uint): {} }

(run returns the error object; the stack traces are trimmed.)

Screenshots/Logs

See above.

Environment

  • @bufbuild/cel version: 0.6.2 (also main at 34f0bee)
  • @bufbuild/cel-spec version: not used
  • Node.js version: v26.13.0

Possible Solution

safeDivide in packages/cel/src/std/math.ts is shared by the int and uint overloads and always ends with safeInt(l / r, ...), so unsigned quotients get the signed int64 range check; the uint overload should use the uint range check.

Additional Context

None.

Credit: https://ucsbplse.github.io/

Lingua principale
TypeScript
Stelle
42
Fork
8
Merge medio
1g 12h
PR unite (30g)
5

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di bufbuild/cel-es

Tutte le issue di bufbuild/cel-es

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.