fails in unusual situation on php 7
authordemeritcowboy <demeritcowboy@hotmail.com>
Sat, 8 Jan 2022 01:41:57 +0000 (20:41 -0500)
committerdemeritcowboy <demeritcowboy@hotmail.com>
Sat, 8 Jan 2022 01:41:57 +0000 (20:41 -0500)
CRM/Utils/File.php
tests/phpunit/CRM/Utils/FileTest.php

index 493597cc005b2bf0dd1816987d5a5627b1040bb6..dbdcca1608e8f8a11b7709323855d515a3b1cef9 100644 (file)
@@ -1124,9 +1124,10 @@ HTACCESS;
    * It should either return FALSE, or the value returned from is_dir().
    *
    * @param string|null $dir
-   * @return bool
+   * @return bool|null
+   *   In php8 the return value from is_dir() is always bool but in php7 it can be null.
    */
-  public static function isDir(?string $dir): bool {
+  public static function isDir(?string $dir) {
     set_error_handler(function($errno, $errstr) {
       // If this is open_basedir-related, convert it to an exception so we
       // can catch it.
index 5af809fda0b7a898d76299f7190fdc146805757a..d1e2c59ba36e03c0aeca8b45d0878dfad75c4e3c 100644 (file)
@@ -253,9 +253,16 @@ class CRM_Utils_FileTest extends CiviUnitTestCase {
 
     // Note that in php8 is_dir changed in php itself to return false with no warning for these. It used to give `is_dir() expects parameter 1 to be a valid path, string given`. See https://github.com/php/php-src/commit/7bc7a80445f2bb349891d3cccfef2d589c48607e
     clearstatcache();
-    $this->assertFalse(CRM_Utils_File::isDir('./testIsDir/' . chr(0)));
-    clearstatcache();
-    $this->assertFalse(CRM_Utils_File::isDir("testIsDir\0"));
+    if (version_compare(PHP_VERSION, '8.0.0', '<')) {
+      $this->assertNull(CRM_Utils_File::isDir('./testIsDir/' . chr(0)));
+      clearstatcache();
+      $this->assertNull(CRM_Utils_File::isDir("testIsDir\0"));
+    }
+    else {
+      $this->assertFalse(CRM_Utils_File::isDir('./testIsDir/' . chr(0)));
+      clearstatcache();
+      $this->assertFalse(CRM_Utils_File::isDir("testIsDir\0"));
+    }
 
     $this->assertTrue(chdir($old_cwd));
     rmdir($a_dir);