Open
Description
The bug was uncovered by a certificate that defines the empty string for subjectAltName
, which our code does not expect and PHP therefore throws an error. Our error handling then only logs the error, but does not mark the target as processed. However, the scan is not completed until all targets have been processed and therefore hangs forever.
Our error handling must be fixed so that it also marks the targets as processed in such cases.
Importing certificate: ...
Undefined offset: 1
#0 /usr/share/icingaweb2/modules/x509/library/X509/CertificateUtils.php(165): Icinga\Application\ApplicationBootstrap->Icinga\Application\{closure}(8, 'Undefined offse...', '/usr/share/icin...', 165, Array)
#1 /usr/share/icingaweb2/modules/x509/library/X509/CertificateUtils.php(249): Icinga\Module\X509\CertificateUtils::splitSANs('')
#2 /usr/share/icingaweb2/modules/x509/library/X509/Job.php(693): Icinga\Module\X509\CertificateUtils::findOrInsertCert(Object(ipl\Sql\Connection), Resource id #1607)
#3 [internal function]: Icinga\Module\X509\Job->Icinga\Module\X509\{closure}(Object(ipl\Sql\Connection))
#4 /usr/share/icinga-php/ipl/vendor/ipl/sql/src/Connection.php(539): call_user_func(Object(Closure), Object(ipl\Sql\Connection))
#5 /usr/share/icingaweb2/modules/x509/library/X509/Job.php(745): ipl\Sql\Connection->transaction(Object(Closure))
#6 /usr/share/icingaweb2/modules/x509/library/X509/Job.php(501): Icinga\Module\X509\Job->processChain(Object(stdClass), Array)
#7 /usr/share/icinga-php/vendor/vendor/react/promise/src/FulfilledPromise.php(28): Icinga\Module\X509\Job->Icinga\Module\X509\{closure}(Object(React\Socket\Connection))
#8 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(134): React\Promise\FulfilledPromise->then(Object(Closure), Object(Closure))
#9 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(168): React\Promise\Promise::React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#10 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(231): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#11 /usr/share/icinga-php/vendor/vendor/react/socket/src/TimeoutConnector.php(35): React\Promise\Promise::React\Promise\{closure}(Object(React\Socket\Connection))
#12 /usr/share/icinga-php/vendor/vendor/react/promise/src/FulfilledPromise.php(28): React\Socket\TimeoutConnector->React\Socket\{closure}(Object(React\Socket\Connection))
#13 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(134): React\Promise\FulfilledPromise->then(Object(Closure), Object(Closure))
#14 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(168): React\Promise\Promise::React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#15 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(231): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#16 /usr/share/icinga-php/vendor/vendor/react/promise/src/FulfilledPromise.php(28): React\Promise\Promise::React\Promise\{closure}(Object(React\Socket\Connection))
#17 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(134): React\Promise\FulfilledPromise->then(Object(Closure), Object(Closure))
#18 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(168): React\Promise\Promise::React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#19 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(231): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#20 /usr/share/icinga-php/vendor/vendor/react/promise/src/FulfilledPromise.php(42): React\Promise\Promise::React\Promise\{closure}(Object(React\Socket\Connection))
#21 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(66): React\Promise\FulfilledPromise->done(Object(Closure), Object(Closure))
#22 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(168): React\Promise\Promise::React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#23 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(231): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#24 /usr/share/icinga-php/vendor/vendor/react/promise/src/FulfilledPromise.php(42): React\Promise\Promise::React\Promise\{closure}(Object(React\Socket\Connection))
#25 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(135): React\Promise\FulfilledPromise->done(Object(Closure), Object(Closure), Object(Closure))
#26 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(168): React\Promise\Promise::React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#27 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(231): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#28 /usr/share/icinga-php/vendor/vendor/react/promise/src/FulfilledPromise.php(42): React\Promise\Promise::React\Promise\{closure}(Object(React\Socket\Connection))
#29 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(135): React\Promise\FulfilledPromise->done(Object(Closure), Object(Closure), Object(Closure))
#30 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(168): React\Promise\Promise::React\Promise\{closure}(Object(React\Promise\FulfilledPromise))
#31 /usr/share/icinga-php/vendor/vendor/react/promise/src/Promise.php(231): React\Promise\Promise->settle(Object(React\Promise\FulfilledPromise))
#32 /usr/share/icinga-php/vendor/vendor/react/promise/src/Deferred.php(36): React\Promise\Promise::React\Promise\{closure}(NULL)
#33 /usr/share/icinga-php/vendor/vendor/react/socket/src/StreamEncryption.php(135): React\Promise\Deferred->resolve(NULL)
#34 /usr/share/icinga-php/vendor/vendor/react/socket/src/StreamEncryption.php(85): React\Socket\StreamEncryption->toggleCrypto(Resource id #383, Object(React\Promise\Deferred), true, 57)
#35 /usr/share/icinga-php/vendor/vendor/react/event-loop/src/StreamSelectLoop.php(246): React\Socket\StreamEncryption->React\Socket\{closure}(Resource id #383)
#36 /usr/share/icinga-php/vendor/vendor/react/event-loop/src/StreamSelectLoop.php(213): React\EventLoop\StreamSelectLoop->waitForStreamActivity(4311137)
#37 /usr/share/icinga-php/vendor/vendor/react/event-loop/src/Loop.php(55): React\EventLoop\StreamSelectLoop->run()
#38 [internal function]: React\EventLoop\Loop::React\EventLoop\{closure}()
#39 {main}
ref/IP/56318