php / php/php-src

UndefinedBehaviorSanitizer crash in SQLite3 BLOB fseek(PHP_INT_MIN, SEEK_END)

Ouverte Adaptée aux débutants
#20,962 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Category: Streams Extension: sqlite3 Status: Needs Triage
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez dans ext/sqlite3/sqlite3.c à la ligne 1193, en utilisant le script PHP fourni pour reproduire l’échec de UndefinedBehaviorSanitizer. Vérifiez la gestion de fseek pour PHP_INT_MIN avec SEEK_END et ajoutez ou mettez à jour le test de flux SQLite3 concerné afin que l’appel se termine sans comportement indéfini et retourne -1.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
c, php, sqlite
Domaine
database
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
Calme
Clarté
Clairement spécifiée
Accessibilité débutants
72/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.