php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52260 Windows implementation of dns_get_record fails with non-existing domain
Submitted: 2010-07-06 02:08 UTC Modified: 2020-05-04 08:24 UTC
Votes:2
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: a_jelly_doughnut at phpbb dot com Assigned: cmb (profile)
Status: Closed Package: Network related
PHP Version: 5.3.2 OS: Windows (All)
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: a_jelly_doughnut at phpbb dot com
New email:
PHP Version: OS:

 

 [2010-07-06 02:08 UTC] a_jelly_doughnut at phpbb dot com
Description:
------------
Windows implementation of dns_get_record fails with non-existing domain

---
var_dump(dns_get_record('dalfkjdaslfj.net')); // return false, throw E_WARNING
---

This is inconsistent with the *NIX implementation, which never (in our testing, see * note at bottom) throws E_WARNING on a non-existing domain, and returns an empty array, as demonstrated below:

---
afischer@miraculix:~$ php -v
PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:01:00)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans

afischer@miraculix:~$ php -r "error_reporting(E_ALL); var_dump(dns_get_record('dalfkjdaslfj.net'));"
array(0) {
}
---

There is code in dns_win32.c to attempt to catch some cases of non-existing domains, but it does not seem to be complete.

Changing
---
		if (status) {
				if (status == DNS_INFO_NO_RECORDS) {
					continue;
---
to 
---
			if (status) {
				if (status == DNS_INFO_NO_RECORDS || status == DNS_ERROR_RCODE_NAME_ERROR) {
					continue;

---
Seems to fix the problems for me.  For reference, all error codes which can be returned by DNSQuery_A are listed by Microsoft: http://msdn.microsoft.com/en-us/library/ms681391

* I cannot say for sure if reports like http://bugs.php.net/bug.php?id=50903 are valid.  I do know from reading the PHP source that there are three separate *NIX implementations of php_dns_search(), but Andreas has not investigated which one his Ubuntu server is using.  It seems likely that this inconsistency affects NIX implementations as well.

Test script:
---------------
<?php
var_dump(dns_get_record('dalfkjdaslfj.net')); // return false, throw E_WARNING
?>

Expected result:
----------------
array(0) {
}

Actual result:
--------------
bool(false)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-07-10 16:32 UTC] felipe@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: pajoye
 [2010-09-06 12:57 UTC] pajoye@php.net
Automatic comment from SVN on behalf of pajoye
Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=303069
Log: - fix bug #52260, catch all DNS not found error
 [2010-09-06 12:58 UTC] pajoye@php.net
The not found error has been fixed in svn (5.3/trunk).

However I keep this issue open and assigned to me as I think the DNS function should not be as noisy as they are now (what's the point of raising a warning if all one wants is to actually check a domain...).
 [2017-10-24 07:33 UTC] kalle@php.net
-Status: Assigned +Status: Open -Assigned To: pajoye +Assigned To:
 [2020-05-04 08:24 UTC] cmb@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: cmb
 [2020-05-04 08:24 UTC] cmb@php.net
The actual bug has been fixed long ago, so I'm closing this
ticket.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Feb 02 10:01:30 2025 UTC