diff --git a/htdocs/comm/action/document.php b/htdocs/comm/action/document.php
index cc25ee03b86..957b32c546e 100755
--- a/htdocs/comm/action/document.php
+++ b/htdocs/comm/action/document.php
@@ -96,7 +96,7 @@ if ( $_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
if ($_GET["action"] == 'delete')
{
$upload_dir = $conf->agenda->dir_output.'/'.dol_sanitizeFileName($objectid);
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
}
diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php
index 8df14b0133a..0d5cdecea3b 100644
--- a/htdocs/comm/propal/document.php
+++ b/htdocs/comm/propal/document.php
@@ -22,7 +22,7 @@
/**
\file htdocs/comm/propal/document.php
\ingroup propale
- \brief Page de gestion des documents attachées à une proposition commerciale
+ \brief Page de gestion des documents attach�es � une proposition commerciale
\version $Id$
*/
@@ -84,7 +84,7 @@ if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
}
else
{
- // Echec transfert (fichier dépassant la limite ?)
+ // Echec transfert (fichier d�passant la limite ?)
$mesg = '
'.$langs->trans("ErrorFileNotUploaded").'
';
// print_r($_FILES);
}
@@ -101,7 +101,7 @@ if ($action=='delete')
if ($propal->fetch($propalid))
{
$upload_dir = $conf->propale->dir_output . "/" . dol_sanitizeFileName($propal->ref);
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
$mesg = ''.$langs->trans("FileWasRemoved").'
';
}
@@ -142,7 +142,7 @@ if ($propalid > 0)
// Ref
print '| '.$langs->trans('Ref').' | '.$propal->ref.' |
';
- // Société
+ // Soci�t�
print '| '.$langs->trans('Company').' | '.$societe->getNomUrl(1).' |
';
print '| '.$langs->trans("NbOfAttachedFiles").' | '.sizeof($filearray).' |
';
diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php
index 9bdf75885c0..d8e65ee06e3 100644
--- a/htdocs/commande/document.php
+++ b/htdocs/commande/document.php
@@ -98,7 +98,7 @@ if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
if ($action=='delete')
{
$upload_dir = $conf->commande->dir_output . "/" . dol_sanitizeFileName($commande->ref);
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
$mesg = ''.$langs->trans("FileWasRemoved").'
';
}
diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php
index daea34688cb..39f0c2f04ba 100644
--- a/htdocs/compta/facture/document.php
+++ b/htdocs/compta/facture/document.php
@@ -22,7 +22,7 @@
/**
\file htdocs/compta/facture/document.php
\ingroup facture
- \brief Page de gestion des documents attachées à une facture
+ \brief Page de gestion des documents attach�es � une facture
\version $Id$
*/
@@ -85,7 +85,7 @@ if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
}
else
{
- // Echec transfert (fichier dépassant la limite ?)
+ // Echec transfert (fichier d�passant la limite ?)
$mesg = ''.$langs->trans("ErrorFileNotUploaded").'
';
// print_r($_FILES);
}
@@ -102,7 +102,7 @@ if ($action=='delete')
if ($facture->fetch($facid))
{
$upload_dir = $conf->facture->dir_output . "/" . dol_sanitizeFileName($facture->ref);
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
$mesg = ''.$langs->trans("FileWasRemoved").'
';
}
@@ -143,7 +143,7 @@ if ($facid > 0)
// Ref
print '| '.$langs->trans('Ref').' | '.$facture->ref.' |
';
- // Société
+ // Soci�t�
print '| '.$langs->trans('Company').' | '.$societe->getNomUrl(1).' |
';
print '| '.$langs->trans("NbOfAttachedFiles").' | '.sizeof($filearray).' |
';
diff --git a/htdocs/contrat/document.php b/htdocs/contrat/document.php
index c53b0a0b254..2acc56f6975 100644
--- a/htdocs/contrat/document.php
+++ b/htdocs/contrat/document.php
@@ -73,7 +73,7 @@ $modulepart='contract';
if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
{
/*
- * Creation répertoire si n'existe pas
+ * Creation r�pertoire si n'existe pas
*/
if (! is_dir($upload_dir)) create_exdir($upload_dir);
@@ -86,7 +86,7 @@ if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
}
else
{
- // Echec transfert (fichier dépassant la limite ?)
+ // Echec transfert (fichier d�passant la limite ?)
$mesg = ''.$langs->trans("ErrorFileNotUploaded").'
';
// print_r($_FILES);
}
@@ -115,7 +115,7 @@ if ($contrat->id)
if ($_GET["action"] == 'delete')
{
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
$result=dol_delete_file($file);
//if ($result >= 0) $mesg=$langs->trans("FileWasRemoced");
}
diff --git a/htdocs/document.php b/htdocs/document.php
index 0a701647e15..f08277fb44e 100644
--- a/htdocs/document.php
+++ b/htdocs/document.php
@@ -68,7 +68,7 @@ function llxHeader() { }
// Define mime type
$type = 'application/octet-stream';
-if (! empty($_GET["type"])) $type=urldecode($_GET["type"]);
+if (! empty($_GET["type"])) $type=$_GET["type"];
else $type=dol_mimetype($original_file);
// Define attachment (attachment=true to force choice popup 'open'/'save as')
@@ -93,9 +93,9 @@ if (eregi('\.vcs$',$original_file)) { $attachment = true; }
if (eregi('\.ics$',$original_file)) { $attachment = true; }
if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false;
-
// Suppression de la chaine de caractere ../ dans $original_file
-$original_file = str_replace("../","/", "$original_file");
+$original_file = str_replace("../","/", $original_file);
+
// find the subdirectory name as the reference
$refname=basename(dirname($original_file)."/");
diff --git a/htdocs/ecm/docdir.php b/htdocs/ecm/docdir.php
index 306de9d2260..e9b6aad92c8 100644
--- a/htdocs/ecm/docdir.php
+++ b/htdocs/ecm/docdir.php
@@ -201,7 +201,7 @@ if (! $_GET["action"] || $_GET["action"] == 'delete_section')
// Confirmation de la suppression d'une ligne categorie
if ($_GET['action'] == 'delete_section')
{
- $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.urldecode($_GET["section"]), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection');
+ $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.$_GET["section"], $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection');
if ($ret == 'html') print '
';
}
diff --git a/htdocs/ecm/docfile.php b/htdocs/ecm/docfile.php
index a0a6f7902c3..57bb94cd515 100644
--- a/htdocs/ecm/docfile.php
+++ b/htdocs/ecm/docfile.php
@@ -203,7 +203,7 @@ if (! $_GET["action"] || $_GET["action"] == 'delete_section')
// Confirmation de la suppression d'une ligne categorie
if ($_GET['action'] == 'delete_section')
{
- $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.urldecode($_GET["section"]), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection');
+ $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.urlencode($_GET["section"]), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection');
if ($ret == 'html') print '
';
}
diff --git a/htdocs/ecm/docmine.php b/htdocs/ecm/docmine.php
index d764c27692d..40d5cda3267 100644
--- a/htdocs/ecm/docmine.php
+++ b/htdocs/ecm/docmine.php
@@ -130,7 +130,7 @@ if ( $_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
// Remove file
if ($_POST['action'] == 'confirm_deletefile' && $_POST['confirm'] == 'yes')
{
- $file = $upload_dir . "/" . urldecode($_GET["urlfile"]);
+ $file = $upload_dir . "/" . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
$result=dol_delete_file($file);
$mesg = ''.$langs->trans("FileWasRemoved").'
';
@@ -341,7 +341,7 @@ if ($mesg) { print '
'.$mesg.'
'; }
// Confirm remove file
if ($_GET['action'] == 'delete')
{
- $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.$_REQUEST["section"].'&urlfile='.urldecode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile');
+ $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.$_REQUEST["section"].'&urlfile='.urlencode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile');
if ($ret == 'html') print '
';
}
diff --git a/htdocs/ecm/index.php b/htdocs/ecm/index.php
index 5bb3b44a948..ebe9f27f993 100644
--- a/htdocs/ecm/index.php
+++ b/htdocs/ecm/index.php
@@ -132,27 +132,6 @@ if ( $_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
}
}
-// Remove file
-if ($_POST['action'] == 'confirm_deletefile' && $_POST['confirm'] == 'yes')
-{
- $result=$ecmdir->fetch($_REQUEST["section"]);
- if (! $result > 0)
- {
- dol_print_error($db,$ecmdir->error);
- exit;
- }
- $relativepath=$ecmdir->getRelativePath();
- $upload_dir = $conf->ecm->dir_output.'/'.$relativepath;
- $file = $upload_dir . "/" . urldecode($_GET["urlfile"]);
-
- $result=dol_delete_file($file);
-
- $mesg = ''.$langs->trans("FileWasRemoved").'
';
-
- $result=$ecmdir->changeNbOfFiles('-');
- $action='file_manager';
-}
-
// Action ajout d'un produit ou service
if ($_POST["action"] == 'add' && $user->rights->ecm->setup)
{
@@ -173,8 +152,29 @@ if ($_POST["action"] == 'add' && $user->rights->ecm->setup)
}
}
-// Suppression fichier
-if ($_POST['action'] == 'confirm_deletesection' && $_POST['confirm'] == 'yes')
+// Remove file
+if ($_REQUEST['action'] == 'confirm_deletefile' && $_REQUEST['confirm'] == 'yes')
+{
+ $result=$ecmdir->fetch($_REQUEST["section"]);
+ if (! $result > 0)
+ {
+ dol_print_error($db,$ecmdir->error);
+ exit;
+ }
+ $relativepath=$ecmdir->getRelativePath();
+ $upload_dir = $conf->ecm->dir_output.'/'.$relativepath;
+ $file = $upload_dir . "/" . $_REQUEST['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
+
+ $result=dol_delete_file($file);
+
+ $mesg = ''.$langs->trans("FileWasRemoved").'
';
+
+ $result=$ecmdir->changeNbOfFiles('-');
+ $action='file_manager';
+}
+
+// Remove directory
+if ($_REQUEST['action'] == 'confirm_deletesection' && $_REQUEST['confirm'] == 'yes')
{
$result=$ecmdir->delete($user);
$mesg = ''.$langs->trans("ECMSectionWasRemoved", $ecmdir->label).'
';
@@ -221,7 +221,7 @@ print "
\n";
// Confirm remove file
if ($_GET['action'] == 'delete')
{
- $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.$_REQUEST["section"].'&urlfile='.urldecode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile');
+ $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.$_REQUEST["section"].'&urlfile='.urlencode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile','','',1);
if ($ret == 'html') print '
';
}
@@ -246,7 +246,7 @@ if (empty($action) || $action == 'file_manager' || eregi('refresh',$action) || $
// Confirmation de la suppression d'une ligne categorie
if ($_GET['action'] == 'delete_section')
{
- $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.urldecode($_GET["section"]), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection');
+ $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?section='.urlencode($_GET["section"]), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection','','',1);
if ($ret == 'html') print '
';
}
diff --git a/htdocs/fichinter/document.php b/htdocs/fichinter/document.php
index 07cbbfb2a24..67fa06f4961 100644
--- a/htdocs/fichinter/document.php
+++ b/htdocs/fichinter/document.php
@@ -70,7 +70,7 @@ $modulepart='fichinter';
if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
{
/*
- * Creation répertoire si n'existe pas
+ * Creation r�pertoire si n'existe pas
*/
if (! is_dir($upload_dir)) create_exdir($upload_dir);
@@ -83,7 +83,7 @@ if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
}
else
{
- // Echec transfert (fichier dépassant la limite ?)
+ // Echec transfert (fichier d�passant la limite ?)
$mesg = ''.$langs->trans("ErrorFileNotUploaded").'
';
// print_r($_FILES);
}
@@ -114,7 +114,7 @@ if ($object->id)
if ($_GET["action"] == 'delete')
{
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
$result=dol_delete_file($file);
//if ($result >= 0) $mesg=$langs->trans("FileWasRemoced");
}
diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php
index dc98bc8efff..e989f8a0f38 100644
--- a/htdocs/fourn/commande/document.php
+++ b/htdocs/fourn/commande/document.php
@@ -99,7 +99,7 @@ if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
if ($action=='delete')
{
$upload_dir = $conf->fournisseur->dir_output . "/commande/" . dol_sanitizeFileName($commande->ref);
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
$mesg = ''.$langs->trans("FileWasRemoved").'
';
}
diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php
index 8b0482541da..0c0b12ce6ea 100644
--- a/htdocs/fourn/facture/document.php
+++ b/htdocs/fourn/facture/document.php
@@ -98,7 +98,7 @@ if ($action=='delete')
{
$upload_dir = $conf->fournisseur->dir_output.'/facture/'.get_exdir($facture->id,2).$facture->id;
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
$mesg = ''.$langs->trans('FileWasRemoved').'
';
}
diff --git a/htdocs/html.formfile.class.php b/htdocs/html.formfile.class.php
index 76334efd0e8..d74a08f5518 100644
--- a/htdocs/html.formfile.class.php
+++ b/htdocs/html.formfile.class.php
@@ -461,7 +461,7 @@ class FormFile
if ($forcedownload) print '&type=application/binary';
print '&file='.urlencode($relativepath.$file['name']).'">';
print img_mime($file['name']).' ';
- print dol_trunc($file['name'],$maxlength,'middle');
+ print htmlentities(dol_trunc($file['name'],$maxlength,'middle'));
print '';
print "\n";
print ''.dol_print_size($file['size']).' | ';
@@ -469,7 +469,7 @@ class FormFile
print '';
//print ' ';
if ($permtodelete)
- print ''.img_delete().'';
+ print ''.img_delete().'';
else
print ' ';
print " | \n";
diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index 4dcebf7fd2c..10bb9bca0ab 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -1757,7 +1757,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
// les noms de fichiers.
if (eregi('^\.',$src_file) || eregi('\.\.',$src_file) || eregi('[<>|]',$src_file))
{
- dol_syslog("Refused to deliver file ".$src_file);
+ dol_syslog("Refused to deliver file ".$src_file, LOG_WARNING);
return -1;
}
@@ -1766,14 +1766,18 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
// les noms de fichiers.
if (eregi('^\.',$dest_file) || eregi('\.\.',$dest_file) || eregi('[<>|]',$dest_file))
{
- dol_syslog("Refused to deliver file ".$dest_file);
+ dol_syslog("Refused to deliver file ".$dest_file, LOG_WARNING);
return -1;
}
+ // The file functions are ISO and data are stored in UTF8 in memory.
+ $src_file_iso=utf8_decode($src_file);
+ $file_name_iso=utf8_decode($file_name);
+
// Check if destination file already exists
if (! $allowoverwrite)
{
- if (file_exists($file_name))
+ if (file_exists($file_name_iso))
{
dol_syslog("Functions.lib::dol_move_uploaded_file File ".$file_name." already exists", LOG_WARNING);
return -2;
@@ -1781,7 +1785,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite)
}
// Move file
- $return=move_uploaded_file($src_file, $file_name);
+ $return=move_uploaded_file($src_file_iso, $file_name_iso);
if ($return)
{
if (! empty($conf->global->MAIN_UMASK)) @chmod($file_name, octdec($conf->global->MAIN_UMASK));
diff --git a/htdocs/product/document.php b/htdocs/product/document.php
index 4cf75df3f07..22a00e95b13 100755
--- a/htdocs/product/document.php
+++ b/htdocs/product/document.php
@@ -116,7 +116,7 @@ if ($product->id)
if ($action=='delete')
{
- $file = $upload_dir . '/' . urldecode($_GET['urlfile']);
+ $file = $upload_dir . '/' . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
$result=dol_delete_file($file);
//if ($result >= 0) $mesg=$langs->trans("FileWasRemoced");
}
diff --git a/htdocs/societe/document.php b/htdocs/societe/document.php
index 0f1e3efc682..f36fa3a891e 100644
--- a/htdocs/societe/document.php
+++ b/htdocs/societe/document.php
@@ -100,7 +100,7 @@ if ( $_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
// Suppression fichier
if ($_REQUEST['action'] == 'confirm_deletefile' && $_REQUEST['confirm'] == 'yes')
{
- $file = $upload_dir . "/" . urldecode($_GET["urlfile"]);
+ $file = $upload_dir . "/" . $_GET['urlfile']; // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
dol_delete_file($file);
$mesg = ''.$langs->trans("FileWasRemoved").'
';
}
diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php
index 16b6efda199..7d818d74200 100644
--- a/htdocs/viewimage.php
+++ b/htdocs/viewimage.php
@@ -26,9 +26,11 @@
\version $Id$
*/
-$original_file = isset($_GET["file"])?urldecode($_GET["file"]):'';
-$modulepart = urldecode($_GET["modulepart"]);
-$type = isset($_GET["type"]) ? urldecode($_GET["type"]) : '';
+// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
+$action = isset($_GET["action"])?$_GET["action"]:'';
+$original_file = isset($_GET["file"])?$_GET["file"]:'';
+$modulepart = isset($_GET["modulepart"])?$_GET["modulepart"]:'';
+$urlsource = isset($_GET["urlsource"])?$_GET["urlsource"]:'';
// Define if we need master or master+main
$needmasteronly=false;
@@ -59,11 +61,13 @@ else
function llxHeader() { }
+// Define mime type
+$type = 'application/octet-stream';
+if (! empty($_GET["type"])) $type=$_GET["type"];
+else $type=dol_mimetype($original_file);
-// Protection, on interdit les .. dans les chemins
-$original_file = eregi_replace('\.\.','',$original_file);
-
-
+// Suppression de la chaine de caractere ../ dans $original_file
+$original_file = str_replace("../","/", $original_file);
$accessallowed=0;
if ($modulepart)