`Time\Duration::__unserialize()` accepts a "negative zero" payload.
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 71/100
Piste de recherche
Commencez par localiser Time\Duration::__unserialize() dans le code source de PHP et lisez sa validation ainsi que les contrôles qui rejettent les secondes négatives et les nanosecondes hors limites. Reproduisez la charge utile fournie et vérifiez comment est traité zéro avec l’indicateur négatif activé. Le travail est terminé lorsque la désérialisation le rejette avec l’exception indiquée ou le normalise en zéro non négatif, avec un test de régression couvrant la charge utile.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
The following code:
<?php
$payload = 'O:13:"Time\Duration":3:{s:7:"seconds";i:0;s:11:"nanoseconds";i:0;s:8:"negative";b:1;}';
$d = unserialize($payload);
var_dump($d->negative); // expected: exception, or false. actual: true
var_dump(Time\Duration::compare($d, Time\Duration::fromSeconds(0))); // int(0)
var_dump($d->absolute()->negative); // actual: true (absolute() of a value is still "negative")
echo json_encode($d), "\n"; // actual: {"seconds":0,"nanoseconds":0,"negative":true}
echo serialize(Time\Duration::fromSeconds(0)->negate()), "\n"; // canonical zero: ...s:8:"negative";b:0;}
// For comparison, other non-canonical payloads are rejected:
try {
unserialize('O:13:"Time\Duration":3:{s:7:"seconds";i:-1;s:11:"nanoseconds";i:0;s:8:"negative";b:0;}');
} catch (Exception $e) {
echo get_class($e), ': ', $e->getMessage(), "\n";
}
Expected: an exception ("Invalid serialization data for Time\Duration object"), as for the other non-canonical payloads (negative seconds, nanoseconds >= 1e9), or a canonicalized zero with $negative === false. No public factory or arithmetic method can produce a zero duration with $negative === true.
Actual: the object is created with seconds = 0, nanoseconds = 0, negative = true. compare() and == treat it as zero, but the public $negative property, json_encode(), serialize() and absolute() all expose the non-canonical sign.
PHP Version
PHP 8.6.0RC3 (cli) (built: Oct 20 2026 18:44:56) (NTS)
Copyright © The PHP Group and Contributors
Zend Engine v4.6.0RC3, Copyright © Zend by Perforce
with Zend OPcache v8.6.0RC3, Copyright ©, by Zend by Perforce
Operating System
MacOS
- Langage dominant
- C
- Étoiles
- 40.7k
- Forks
- 8.3k
- Merge moyen
- 17 h 29 min
- PR mergées (30 j)
- 10
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de php/php-src
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
php/php-src#24552 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
master: part of the mbstring bailout fix got lost in a mergePeut-être pris @lazerg l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
Les mainteneurs répondent en général sous 1 jour
-
quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFFPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de php/php-src
Issues similaires
-
TLS: a stale OpenSSL error makes non-blocking reads fail with "Resource temporarily unavailable"Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 82/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
bigtreetech/BIGTREETECH-TouchScreenFirmware#3056 ·
Les mainteneurs répondent en général sous 1 jour
-
Allow pillow 13Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
[pico][astrocade] emu/apply.sh edits src/mame/midway/astrohome.cpp, which current MAME has in bally/Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
FujiNetWIFI/fujinet-firmware#2120 ·
Les mainteneurs répondent en général sous 1 jour