reactphp/dns

Recursion and nesting level 1000 on dns resolve

DangerLifter opened this issue · 3 comments

Sometime I got ths fatal when trying to resolve some names. It is not stable but repeatable error. Last time I was able to repeat it with doing resolve for "edu.tc".

Just doing:

$factory = new DnsResolverFactory();
$resolver = $factory->create('8.8.8.8', $loop);
$resolver->resolve('edu.tc');

Here is head ot backtrace. After this part same repeatable calls promise notify.
PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php on line 140

PHP Stack trace:
PHP   1. {main}() /usr/local/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/local/bin/phpunit:612
PHP   3. PHPUnit_TextUI_Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:138
PHP   4. PHPUnit_TextUI_TestRunner->doRun() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:186
PHP   5. PHPUnit_Framework_TestSuite->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/TestRunner.php:423
PHP   6. PHPUnit_Framework_TestCase->run() /var/www/projects/DomainScrapper/vendor/phpunit/phpunit/src/Framework/TestSuite.php:751
PHP   7. PHPUnit_Framework_TestResult->run() /var/www/projects/DomainScrapper/vendor/phpunit/phpunit/src/Framework/TestCase.php:711
PHP   8. PHPUnit_Framework_TestCase->runBare() /var/www/projects/DomainScrapper/vendor/phpunit/phpunit/src/Framework/TestResult.php:643
PHP   9. PHPUnit_Framework_TestCase->runTest() /var/www/projects/DomainScrapper/vendor/phpunit/phpunit/src/Framework/TestCase.php:775
PHP  10. ReflectionMethod->invokeArgs() /var/www/projects/DomainScrapper/vendor/phpunit/phpunit/src/Framework/TestCase.php:905
PHP  11. DomainScrapper\UnitTests\Whois\BaseClientTest->testGetAvailability_edutc_Null() /var/www/projects/DomainScrapper/vendor/phpunit/phpunit/src/Framework/TestCase.php:905
PHP  12. DomainScrapper\Whois\ReactCustomClient->getAvailability() /var/www/projects/DomainScrapper/tests/DomainScrapper/UnitTests/Whois/BaseClientTest.php:19
PHP  13. React\EventLoop\LibEventLoop->run() /var/www/projects/DomainScrapper/library/DomainScrapper/Whois/Client/AsyncToSyncTrait.php:38
PHP  14. event_base_loop() /var/www/projects/DomainScrapper/vendor/react/event-loop/LibEventLoop.php:211
PHP  15. React\EventLoop\LibEventLoop->React\EventLoop\{closure}() /var/www/projects/DomainScrapper/vendor/react/event-loop/LibEventLoop.php:211
PHP  16. call_user_func:{/var/www/projects/DomainScrapper/vendor/react/event-loop/LibEventLoop.php:335}() /var/www/projects/DomainScrapper/vendor/react/event-loop/LibEventLoop.php:335
PHP  17. React\Socket\Connection->handleData() /var/www/projects/DomainScrapper/vendor/react/event-loop/LibEventLoop.php:335
PHP  18. Evenement\EventEmitter->emit() /var/www/projects/DomainScrapper/vendor/react/socket/src/Connection.php:15
PHP  19. call_user_func_array:{/var/www/projects/DomainScrapper/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:64}() /var/www/projects/DomainScrapper/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:64
PHP  20. React\Stream\Util::React\Stream\{closure}() /var/www/projects/DomainScrapper/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:64
PHP  21. React\Stream\BufferedSink->write() /var/www/projects/DomainScrapper/vendor/react/stream/src/Util.php:18
PHP  22. React\Promise\Deferred->progress() /var/www/projects/DomainScrapper/vendor/react/stream/src/BufferedSink.php:34
PHP  23. React\Promise\Deferred->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:58
PHP  24. call_user_func:{/var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:49}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:49
PHP  25. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:49
PHP  26. React\Promise\Promise->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:175
PHP  27. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:147
PHP  28. React\Promise\Deferred->progress() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:103
PHP  29. React\Promise\Deferred->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:58
PHP  30. call_user_func:{/var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:49}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:49
PHP  31. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Deferred.php:49
PHP  32. React\Promise\Promise->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:175
PHP  33. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:147
PHP  34. React\Promise\Promise->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:175
PHP  35. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:147
PHP  36. React\Promise\Promise->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:175
PHP  37. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:147
PHP  38. React\Promise\Promise->notify() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:175
PHP  39. React\Promise\Promise->React\Promise\{closure}() /var/www/projects/DomainScrapper/vendor/react/promise/src/Promise.php:147
.....

Probably it is not issue of dns. Close for now. Will check more.

clue commented

Your above test script works fine locally (promise is being rejected because name can not be resolved). Feel free to update this ticket if you manage to reproduce this, thanks!

Thank you for quick response. I found trouble in myself code. No problem with react. ;)