From 35edefe72547d274524d5619487c2b51edf5f914 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <come.chilliet@fusiondirectory.org>
Date: Thu, 3 Sep 2020 12:06:21 +0200
Subject: [PATCH] :ambulance: fix(management) Avoid calling update on NULL

Management dialogs tend to close themselves from readPost method, so
 after calling readPost we need to check the dialog is still there before
 calling update.

issue #6072
---
 include/management/class_management.inc     | 7 ++++++-
 include/management/class_templateDialog.inc | 4 ++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/include/management/class_management.inc b/include/management/class_management.inc
index cf0273861..505d217a6 100644
--- a/include/management/class_management.inc
+++ b/include/management/class_management.inc
@@ -506,7 +506,12 @@ class management implements FusionDirectoryDialog
     } elseif (is_object($this->dialogObject)) {
       try {
         $this->dialogObject->readPost();
-        $this->dialogObject->update();
+        if (is_object($this->dialogObject)) {
+          /* Check again as readPost might close it */
+          if (!$this->dialogObject->update()) {
+            $this->closeDialogs();
+          }
+        }
       } catch (FusionDirectoryException $e) {
         $error = new FusionDirectoryError(htmlescape($e->getMessage()), 0, $e);
         $error->display();
diff --git a/include/management/class_templateDialog.inc b/include/management/class_templateDialog.inc
index b3b6221a4..44ec9bb85 100644
--- a/include/management/class_templateDialog.inc
+++ b/include/management/class_templateDialog.inc
@@ -96,7 +96,7 @@ class templateDialog implements FusionDirectoryDialog
 
   public function update(): bool
   {
-    return TRUE;
+    return !$this->closed;
   }
 
   function setNextTarget ($target)
@@ -131,6 +131,6 @@ class templateDialog implements FusionDirectoryDialog
   protected function handleCancel ()
   {
     $this->management->remove_lock();
-    $this->management->closeDialogs();
+    $this->closed = TRUE;
   }
 }
-- 
GitLab