Thu 17 Sep 2009 01:35:04 PM UTC, original submission:
L'erreur se produit quand on tente de télécharger un fichier contenant un '+':
Dolibarr a détecté une erreur technique.
Voici les informations qui pourront aider au diagnostic:
Dolibarr: 2.6.1
Date: 20090917153026
Niveau de fonctionnalités: 0
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny3 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
Referer: https://XXX/dolibarr/comm/propal.php?propalid=68
Url sollicitée: /dolibarr/document.php?modulepart=propal&file=DV200906054%2F200906054-DevisSigne%2BBCClient.pdf
MenuManager: eldy_backoffice.php/eldy_backoffice.php
Message: Le fichier /var/www/public/dolibarr/documents/propale/DV200906054/200906054-DevisSigne BCClient.pdf n'existe pas
Le fichier document.php utile la fonction PHP 'urlencode' pour convertir le nom du document dans l'URL en nom de document pour le système de fichiers.
Hors, PHP a déjà fait cette opération. Par conséquent le résultat (stocké dans $original_file) subit le décodage 2 fois. Cela ne pose pas de problème dans le cas courant, quand le nom de fichier ne contient pas le signe '%' ou '+', mais cela rendre les autres documents impossible à télécharger.
Noter que $original_file est défini plusieurs fois: une fois tout en haut du fichier, plus sa valeur est réinitialisée plus bas (copier/coller).
La modification suivante corrige le problème:
cvs diff: Diffing .
Index: document.php
===================================================================
RCS file: /sources/dolibarr/dolibarr/htdocs/document.php,v
retrieving revision 1.66
diff -u -r1.66 document.php
--- document.php 24 Feb 2009 22:52:55 -0000 1.66
+++ document.php 17 Sep 2009 13:27:21 -0000
@@ -66,7 +66,7 @@
//$encoding='ISO-8859-1';
$action = $_GET["action"];
-$original_file = urldecode($_GET["file"]);
+$original_file = $_GET["file"];
$modulepart = urldecode($_GET["modulepart"]);
$urlsource = urldecode($_GET["urlsource"]);
|