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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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 02:01:28 2024 UTC