UndefinedBehaviorSanitizer crash in SQLite3 BLOB fseek(PHP_INT_MIN, SEEK_END)
Aperta
Adatta ai principianti
Nessuno ha ancora preso questa issue.
Bug
Category: Streams
Extension: sqlite3
Status: Needs Triage
- Lingua principale
- C
- Stelle
- 40.4k
- Fork
- 8.1k
- Merge medio
- 2g 13h
- PR unite (30g)
- 96
Descrizione
Description
The following code:
<?php
$db = new SQLite3(':memory:');
$db->exec('CREATE TABLE test (id TEXT, data BLOB)');
$stmt = $db->prepare('INSERT INTO test (id, data) VALUES (:id, :data)');
$stmt->bindValue(':id', 'a', SQLITE3_TEXT);
$stmt->bindValue(':data', 'TEST TEST', SQLITE3_BLOB);
$stmt->execute();
$row = $db->querySingle("SELECT data FROM test WHERE id='a'", true);
$stream = $db->openBlob('test', 'data', 1);
var_dump(fseek($stream, PHP_INT_MIN, SEEK_END));
Resulted in this output:
php-src/ext/sqlite3/sqlite3.c:1193:47: runtime error: negation of -9223372036854775808 cannot be represented in type 'zend_off_t' (aka 'long long'); cast to an unsigned type to negate this value to itself
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /Users/arshid/Downloads/php-src/ext/sqlite3/sqlite3.c:1193:47
[2] 88129 abort sapi/cli/php z.php
But I expected this output instead:
int(-1)
PHP Version
PHP 8.4.11 (cli) (built: Jul 29 2025 15:30:21) (NTS)
Copyright (c) The PHP Group
Built by Homebrew
Zend Engine v4.4.11, Copyright (c) Zend Technologies
with Xdebug v3.5.0, Copyright (c) 2002-2025, by Derick Rethans
with Zend OPcache v8.4.11, Copyright (c), by Zend Technologies
Operating System
No response
Guida per i contributori
Apri 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.
Direzione di ricerca
Inizia in ext/sqlite3/sqlite3.c alla riga 1193, usando lo script PHP fornito per riprodurre il fallimento di UndefinedBehaviorSanitizer. Controlla la gestione di fseek per PHP_INT_MIN con SEEK_END e aggiungi o aggiorna il test dello stream SQLite3 pertinente in modo che la chiamata termini senza comportamento indefinito e restituisca -1.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, php, sqlite
- Ambito
- database
- Tipo di issue
- Bug
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Tranquilla
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 72/100