php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #66877 Invalid return value checkdnsrr / getmxrr
Submitted: 2014-03-10 11:35 UTC Modified: 2020-08-10 19:48 UTC
Votes:4
Avg. Score:4.5 ± 0.9
Reproduced:4 of 4 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (25.0%)
From: nschoenmaker at hostnet dot nl Assigned: nikic (profile)
Status: Closed Package: URL related
PHP Version: 5.5.10 OS: Ubuntu 13.10
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: nschoenmaker at hostnet dot nl
New email:
PHP Version: OS:

 

 [2014-03-10 11:35 UTC] nschoenmaker at hostnet dot nl
Description:
------------
The return type of checkdnsrr and getmxrr are described as: Returns TRUE if any records are found; returns FALSE if no records were found or if an error occurred.

So if we check for a non-existant domain name, the result should be false.

The following command gives the expected result on my system, empty:
dig +short non-existant-domain-name.com MX

Bug found using Zend server 6.3, which is released with PHP 5.5.7. Also confirmed for current master.

Related to (closed) bug https://bugs.php.net/bug.php?id=8264

Test script:
---------------
Two test scripts:

php -r 'var_dump(checkdnsrr("non-existant-domain-name.com"));'
  bool(true)

php -r 'var_dump(getmxrr("non-existant-domain-name.com",$mxhosts));var_dump($mxhosts);'
  bool(true)
  array(0) {
  }


Expected result:
----------------
I would expect checkdnsrr("non-existant-domain-name.com") and getmxrr("non-existant-domain-name.com",$a) to return false.

Actual result:
--------------
They return true.

The case of getmxrr() is even stranger, this is the description of the meaning of the second parameter:
    A list of the MX records found is placed into the array mxhosts.

This list is empty! So the return type indicates there are records, but the second in/out argument indicates there are no records...

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-03-10 11:41 UTC] nschoenmaker at hostnet dot nl
-Summary: Invalid return type checkdnsrr / getmxrr +Summary: Invalid return value checkdnsrr / getmxrr
 [2014-03-10 11:41 UTC] nschoenmaker at hostnet dot nl
The return value is incorrect, not the return type.
 [2015-06-10 12:55 UTC] cmb@php.net
I can't reproduce this issue, see <http://3v4l.org/P0nsE>.

Interestingly, on Windows 7 (PHP 5.5.25 and 5.6.9) I get:

    bool(false)
    bool(false)
    NULL
    
That is, however, another (albeit minor) issue, and should be
handled in a separate ticket.

However, a user contributed note[1] claims even stranger behavior,
which I couldn't reproduce either: <http://3v4l.org/Tf5sT>.

[1] <http://php.net/manual/en/function.getmxrr.php#103123>
 [2020-08-10 19:48 UTC] nikic@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: nikic
 [2020-08-10 19:48 UTC] nikic@php.net
I expect that this issue has been resolved by the fixes for bug #78008 and bug #79944. Those are for Alpine, but the basic issue can occur on other OSes depending on the used DNS resolution library.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Nov 24 00:01:27 2024 UTC