From 07157944b4c40cbf9542ad3ac86023e7358bcd5e Mon Sep 17 00:00:00 2001
From: Kirill Roskolii <kirill.roskolii@catalyst.net.nz>
Date: Thu, 16 Jan 2025 15:05:51 +1300
Subject: [PATCH 1/2] Issue #3500125: Improve error handling during image type
 detection

---
 composer.json                                   | 3 ++-
 ldap_user/src/Processor/DrupalUserProcessor.php | 9 ++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/composer.json b/composer.json
index 9efafbd8..973c56fd 100644
--- a/composer.json
+++ b/composer.json
@@ -10,7 +10,8 @@
     "drupal/externalauth": "^2.0"
   },
   "provide": {
-    "ext-ldap": "*"
+    "ext-ldap": "*",
+    "ext-exif": "*"
   },
   "repositories": {
     "drupal": {
diff --git a/ldap_user/src/Processor/DrupalUserProcessor.php b/ldap_user/src/Processor/DrupalUserProcessor.php
index 532cb1b2..3e10f693 100644
--- a/ldap_user/src/Processor/DrupalUserProcessor.php
+++ b/ldap_user/src/Processor/DrupalUserProcessor.php
@@ -600,8 +600,15 @@ class DrupalUserProcessor implements LdapUserAttributesInterface {
 
       return NULL;
     }
-    // @todo Declare dependency on exif or resolve it.
     $image_type = exif_imagetype($unmanagedFile);
+    if ($image_type === FALSE) {
+      $this->detailLog
+        ->log('Unable to detect image type of @file. Possibly invalid or corrupted image',
+          ['@file' => $unmanagedFile]
+        );
+
+      return NULL;
+    }
     $extension = image_type_to_extension($image_type, FALSE);
     unlink($unmanagedFile);
 
-- 
GitLab


From 719f07dd4ff1a8851ec7b4864b58fbaf7e7e8550 Mon Sep 17 00:00:00 2001
From: bluegeek9 <5614-bluegeek9@users.noreply.drupalcode.org>
Date: Mon, 27 Jan 2025 12:35:00 -0600
Subject: [PATCH 2/2] Issue #3500125: Improve error handling during image type
 detection in
 \Drupal\ldap_user\Processor\DrupalUserProcessor::saveUserPicture()

---
 ldap_authentication/src/Form/LdapAuthenticationAdminForm.php   | 1 +
 ldap_servers/src/Helper/ConversionHelper.php                   | 2 +-
 ldap_servers/tests/modules/ldap_servers_dummy/src/FakeLdap.php | 2 +-
 ldap_user/src/Form/LdapUserAdminForm.php                       | 1 +
 ldap_user/src/Form/LdapUserMappingBaseForm.php                 | 1 +
 ldap_user/src/Processor/OrphanProcessor.php                    | 2 +-
 6 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/ldap_authentication/src/Form/LdapAuthenticationAdminForm.php b/ldap_authentication/src/Form/LdapAuthenticationAdminForm.php
index ee1f201b..23baa68c 100644
--- a/ldap_authentication/src/Form/LdapAuthenticationAdminForm.php
+++ b/ldap_authentication/src/Form/LdapAuthenticationAdminForm.php
@@ -76,6 +76,7 @@ final class LdapAuthenticationAdminForm extends ConfigFormBase {
       parent::__construct($config_factory, $config_type_manager);
     }
     else {
+      // @phpstan-ignore-next-line
       parent::__construct($config_factory);
     }
 
diff --git a/ldap_servers/src/Helper/ConversionHelper.php b/ldap_servers/src/Helper/ConversionHelper.php
index 9c2d6b2e..98b3fa33 100644
--- a/ldap_servers/src/Helper/ConversionHelper.php
+++ b/ldap_servers/src/Helper/ConversionHelper.php
@@ -89,7 +89,7 @@ class ConversionHelper {
    * @return string
    *   Converted string.
    */
-  public static function convertAttribute(string $value, string $conversion = NULL): string {
+  public static function convertAttribute(string $value, ?string $conversion = NULL): string {
 
     switch ($conversion) {
       case 'base64_encode':
diff --git a/ldap_servers/tests/modules/ldap_servers_dummy/src/FakeLdap.php b/ldap_servers/tests/modules/ldap_servers_dummy/src/FakeLdap.php
index 867d869e..fbd96863 100644
--- a/ldap_servers/tests/modules/ldap_servers_dummy/src/FakeLdap.php
+++ b/ldap_servers/tests/modules/ldap_servers_dummy/src/FakeLdap.php
@@ -47,7 +47,7 @@ class FakeLdap implements LdapInterface {
   /**
    * {@inheritdoc}
    */
-  public function bind(string $dn = NULL, string $password = NULL): void {
+  public function bind(?string $dn = NULL, ?string $password = NULL): void {
     if ($this->bindException) {
       throw new ConnectionException('Failed connection');
     }
diff --git a/ldap_user/src/Form/LdapUserAdminForm.php b/ldap_user/src/Form/LdapUserAdminForm.php
index d5b3dcdd..34d77ca9 100644
--- a/ldap_user/src/Form/LdapUserAdminForm.php
+++ b/ldap_user/src/Form/LdapUserAdminForm.php
@@ -84,6 +84,7 @@ final class LdapUserAdminForm extends ConfigFormBase implements LdapUserAttribut
       parent::__construct($config_factory, $config_type_manager);
     }
     else {
+      // @phpstan-ignore-next-line
       parent::__construct($config_factory);
     }
 
diff --git a/ldap_user/src/Form/LdapUserMappingBaseForm.php b/ldap_user/src/Form/LdapUserMappingBaseForm.php
index 0e313495..d3b847ed 100644
--- a/ldap_user/src/Form/LdapUserMappingBaseForm.php
+++ b/ldap_user/src/Form/LdapUserMappingBaseForm.php
@@ -95,6 +95,7 @@ abstract class LdapUserMappingBaseForm extends ConfigFormBase implements LdapUse
       parent::__construct($config_factory, $config_type_manager);
     }
     else {
+      // @phpstan-ignore-next-line
       parent::__construct($config_factory);
     }
 
diff --git a/ldap_user/src/Processor/OrphanProcessor.php b/ldap_user/src/Processor/OrphanProcessor.php
index 28acbfa4..e2955db7 100644
--- a/ldap_user/src/Processor/OrphanProcessor.php
+++ b/ldap_user/src/Processor/OrphanProcessor.php
@@ -374,7 +374,7 @@ class OrphanProcessor {
           ->load($user['uid']);
         $method = $this->configLdapUser->get('orphanedDrupalAcctBehavior');
         switch ($method) {
-          case 'ldap_user_orphan_email';
+          case 'ldap_user_orphan_email':
             $link = Url::fromRoute('entity.user.edit_form', ['user' => $user['uid']])->setAbsolute();
             $this->emailList[] = $account->getAccountName() . ',' . $account->getEmail() . ',' . $link->toString();
             $account->set('ldap_user_last_checked', time())->save();
-- 
GitLab