diff --git a/ext/standard/dir.c b/ext/standard/dir.c index 0ad886cb4f4..5ac26e721b5 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -102,8 +102,12 @@ static void php_set_default_dir(int id DIRLS_DC) if (DIRG(default_dir)!=-1) { zend_list_delete(DIRG(default_dir)); } - DIRG(default_dir) = id; - zend_list_addref(id); + + if (id != -1) { + zend_list_addref(id); + } + + DIRG(default_dir) = id; } @@ -211,6 +215,10 @@ PHP_FUNCTION(closedir) FETCH_DIRP(); zend_list_delete(dirp->id); + + if (dirp->id == DIRG(default_dir)) { + php_set_default_dir(-1); + } } /* }}} */