From 08100f68ae9daeb1598cf7e623f6680c6191db94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Bernigaud?= <come.bernigaud@opensides.be>
Date: Tue, 7 Oct 2014 11:38:18 +0200
Subject: [PATCH] Fixes #3369 escaping html entities in img srcs

---
 ihtml/themes/default/framework.tpl      |  8 ++++----
 ihtml/themes/default/setup_header.tpl   |  6 ++++--
 include/class_management.inc            |  2 +-
 include/class_pluglist.inc              |  6 +++---
 include/functions.inc                   | 12 ++++++------
 plugins/personal/generic/class_user.inc |  4 ++--
 setup/setup_frame.tpl                   |  4 ++--
 7 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/ihtml/themes/default/framework.tpl b/ihtml/themes/default/framework.tpl
index 0c79bc62c..299d42975 100644
--- a/ihtml/themes/default/framework.tpl
+++ b/ihtml/themes/default/framework.tpl
@@ -5,16 +5,16 @@
   <form action="main.php{$plug}" name="mainform" id="mainform" method="post" enctype="multipart/form-data">
     <div class="setup_header">
       <div id="header_left">
-        <img id="fd_logo" class="optional" src="geticon.php?context=applications&icon=fusiondirectory&size=48" alt="FusionDirectory"/>
+        <img id="fd_logo" class="optional" src="geticon.php?context=applications&amp;icon=fusiondirectory&amp;size=48" alt="FusionDirectory"/>
         <a class="maintitlebar" href="main.php?reset=1">
-          <img src="geticon.php?context=actions&icon=go-home&size=22" alt="Main"/>&nbsp;{t}Main{/t}
+          <img src="geticon.php?context=actions&amp;icon=go-home&amp;size=22" alt="Main"/>&nbsp;{t}Main{/t}
         </a>
         &nbsp;
         <a class="maintitlebar logout" href="logout.php?request">
-          <img src="geticon.php?context=actions&icon=application-exit&size=22" alt="Sign out"/>&nbsp;{t}Sign out{/t}
+          <img src="geticon.php?context=actions&amp;icon=application-exit&amp;size=22" alt="Sign out"/>&nbsp;{t}Sign out{/t}
         </a>
         <a class="plugtop">
-          <img src="{$headline_image}" alt="{t}{$headline}{/t}"/>{t}{$headline}{/t}
+          <img src="{$headline_image|escape}" alt="{t}{$headline}{/t}"/>{t}{$headline}{/t}
         </a>
       </div>
       <div id="header_right">
diff --git a/ihtml/themes/default/setup_header.tpl b/ihtml/themes/default/setup_header.tpl
index f313e4544..bc05ae9ec 100644
--- a/ihtml/themes/default/setup_header.tpl
+++ b/ihtml/themes/default/setup_header.tpl
@@ -1,6 +1,8 @@
 {$php_errors}
-<div class='setup_header'>
-  <div style="float:left;"><img src='geticon.php?context=applications&icon=fusiondirectory&size=48' class='center' alt='FusionDirectory' /></div>
+<div class="setup_header">
+  <div style="float:left;">
+    <img src="geticon.php?context=applications&amp;icon=fusiondirectory&amp;size=48" class="center" alt="FusionDirectory" />
+  </div>
   <div style="padding-top:8px;text-align:right;height:38px;color:#000000;font-size:20px">{$version}</div>
 </div>
 
diff --git a/include/class_management.inc b/include/class_management.inc
index d4d0eb189..dc5174ef3 100644
--- a/include/class_management.inc
+++ b/include/class_management.inc
@@ -261,7 +261,7 @@ class management
     }
     if (get_object_info() != "") {
       $display = print_header($plIcon, _($plDescription),
-          '<img alt="" class="center" src="geticon.php?context=status&icon=object-locked&size=16"/>'.
+          '<img alt="" class="center" src="geticon.php?context=status&amp;icon=object-locked&amp;size=16"/>'.
           LDAP::fix(get_object_info()));
     } else {
       $display = print_header($plIcon, _($plDescription));
diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc
index bafff70d8..6b19eb485 100644
--- a/include/class_pluglist.inc
+++ b/include/class_pluglist.inc
@@ -298,10 +298,9 @@ class pluglist {
   function gen_menu()
   {
     if ($this->menu == "") {
-      $this->menu = '<ul class="menu">';
+      $this->menu = '<ul class="menu">'."\n";
       /* Parse headlines */
       foreach ($this->config->data['SECTIONS'] as $section => $section_infos) {
-        //~ $menu     = '<p class="menuheader">'.$section_infos['NAME']."</p>\n";
         $entries  = '';
 
         /* Parse sub-plugins */
@@ -355,6 +354,7 @@ class pluglist {
           $this->menu .= '<li><a>'.$section_infos['NAME']."</a>\n<ul>\n".$entries."\n</ul></li>\n";
         }
       }
+      $this->menu .= '</ul>'."\n";
     }
 
     /* Add the menucurrent class to current plugin */
@@ -427,7 +427,7 @@ class pluglist {
             if (!preg_match("/\//", $plIcon) && !preg_match("/^geticon/", $plIcon)) {
               $image = get_template_path("plugins/".preg_replace('%^.*/([^/]+)/[^/]+$%', '\1', $class_mapping[$info['CLASS']])."/images/$plIcon");
             } else {
-              $image = $plIcon;
+              $image = htmlentities($plIcon, ENT_COMPAT, 'UTF-8');
             }
           }
 
diff --git a/include/functions.inc b/include/functions.inc
index 123c962f8..fc96aee59 100644
--- a/include/functions.inc
+++ b/include/functions.inc
@@ -1773,15 +1773,15 @@ function check_command($cmdline)
  *
  * \return the $display variable
  */
-function print_header($image, $headline, $info = "")
+function print_header($image, $headline, $info = '')
 {
     $smarty = get_smarty();
-    $smarty->assign("headline", $headline);
-    $smarty->assign("headline_image", $image);
-    $display = "";
+    $smarty->assign('headline', $headline);
+    $smarty->assign('headline_image', $image);
+    $display = '';
 
-  if ($info != "") {
-    $display .= "<div class=\"pluginfo\">\n";
+  if ($info != '') {
+    $display .= '<div class="pluginfo">'."\n";
     $display .= "$info";
     $display .= "</div>\n";
     $display .= "<div></div>\n";
diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc
index 322353725..0ceb2efd3 100644
--- a/plugins/personal/generic/class_user.inc
+++ b/plugins/personal/generic/class_user.inc
@@ -163,8 +163,8 @@ class user extends simplePlugin
     return array(
       'plShortName'   => _('Generic'),
       'plDescription' => _('Generic user settings'),
-      'plIcon'        => 'geticon.php?context=applications&amp;icon=user-info&amp;size=48',
-      'plSmallIcon'   => 'geticon.php?context=applications&amp;icon=user-info&amp;size=16',
+      'plIcon'        => 'geticon.php?context=applications&icon=user-info&size=48',
+      'plSmallIcon'   => 'geticon.php?context=applications&icon=user-info&size=16',
       'plSelfModify'  => TRUE,
       'plObjectType'  => array('user' => array(
         'description' => _('Users'),
diff --git a/setup/setup_frame.tpl b/setup/setup_frame.tpl
index 5659e7796..57cc735ec 100644
--- a/setup/setup_frame.tpl
+++ b/setup/setup_frame.tpl
@@ -4,9 +4,9 @@
   <form action="setup.php" name="mainform" id="mainform" method="post" enctype="multipart/form-data">
     <div class="setup_header">
       <div id="header_left">
-        <img id="fd_logo" class="optional" src="geticon.php?context=applications&icon=fusiondirectory&size=48" alt="FusionDirectory"/>
+        <img id="fd_logo" class="optional" src="geticon.php?context=applications&amp;icon=fusiondirectory&amp;size=48" alt="FusionDirectory"/>
         <a class="plugtop">
-          <img src="{$headline_image}" alt="{t}{$headline}{/t}"/>{t}{$headline}{/t}
+          <img src="{$headline_image|escape}" alt="{t}{$headline}{/t}"/>{t}{$headline}{/t}
         </a>
       </div>
       <div id="header_right">
-- 
GitLab