php / php/php-src

Behaviour difference in ip2long() between AIX and Linux for IPs with leading zeros

Ouverte
#21,295 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

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

Description

Description

We observed behaviour difference in ip2long() between AIX and LINUX when handling IPv4 addresses with leading zeros in one or more of their octets.
On AIX, IP address strings with leading zeros are accepted and processed successfully by ip2long().
On LINUX, same input is considered invalid and ip2long() returns FALSE.

The following code:

<?php

$tests = [
    '192.168.42.42',
    '192.168.042.42',
    '010.000.000.001',
    '127.0.0.1',
];

foreach ($tests as $ip) {
    $val = ip2long($ip);

    if ($val === false) {
        echo "$ip => ip2long() returned FALSE\n";
    } else {
        echo "$ip => ip2long() = $val, normalized = " . long2ip($val) . "\n";
    }
}

Resulted in this output:

192.168.42.42 => ip2long() = -1062720982, normalized = 192.168.42.42
192.168.042.42 => ip2long() = -1062720982, normalized = 192.168.42.42
010.000.000.001 => ip2long() = 167772161, normalized = 10.0.0.1
127.0.0.1 => ip2long() = 2130706433, normalized = 127.0.0.1

But I expected this output instead:

192.168.42.42 => ip2long() = -1062720982, normalized = 192.168.42.42
192.168.042.42 => ip2long() returned FALSE
010.000.000.001 => ip2long() returned FALSE
127.0.0.1 => ip2long() = 2130706433, normalized = 127.0.0.1

To maintain same behaviour as LINUX, we convert back the IP(ip) into a string and verify that it matches the original string. If not, the IP is considered invalid and returns FALSE. I will submit these changes via a PR. Please let me know your suggestions.

PHP Version
PHP 8.5.1 (cli) (built: Jan 20 2026 09:33:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.5.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.1, Copyright (c), by Zend Technologies
Operating System

AIX 7.2

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 par reproduire les exemples de ip2long() sur AIX et Linux, en comparant le traitement des octets IPv4 comportant des zéros en tête ainsi que la sortie résultante de long2ip(). Suivez l’implémentation de ip2long() et son analyse dépendante de la plateforme, puis vérifiez que les entrées invalides attendues renvoient FALSE, tandis que les autres exemples conservent les résultats affichés.

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

Évaluation

Stack technique
php
Domaine
networking
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

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