Archive des Rapports de Bogues
Sur cette page sont transférés certains bogues de la page
RapportsDeBogues afin de ne pas trop encombrer celle-ci. Cela permet aussi de garder des discussions que nous avons pu avoir sur des bogues divers.
27/01/2005
Priorité: basse
difficulté: facile (?)
Fichiers concernés: /wakka.php (il me semble)
Copié dans le gestionnaire d'anomalies
Les signes & (le
et commercial) dans le texte Wiki ne sont pas convertis en
& dans le code Html, au moins dans Wikini 0.4.2. --
JmPhilippe
29/01/2005
Priorité: moyenne
difficulté: facile
Fichiers concernés: ???
Copié dans le gestionnaire d'anomalies
Dans la version CVS, lorsqu'on est en mode prévisualisation, les
div.footer et
div.copyright passent à l'intérieur du
div.page alors qu'ils doivent être en dehors après celui-ci. Ceci pose particulièrement problème lorsqu'on souhaite jouer sur les marges de ces
div par rapport au conteneur
body. --
JmPhilippe
05/03/2005
version : 0.4.3
priorité : moyenne
difficulté : aucune
fichier : handlers/page/show.php
Le formulaire pour l'ajout de commentaires n'est pas valide XHTML. Il faut rajouter l'attribut cols au tetarea et fermer la balise input.
<textarea name="body" rows="6" cols="20" style="width: 100%"></textarea><br />
<input type="submit" value="Ajouter Commentaire" accesskey="s"/>
--
AlexandrePassant
Priorité: moyenne
Difficulté: facile
Demandé: 2004-12-05
LordFarquaad
Corrigé: 2004-12-05
ProgFou correction déposée au CVS mais il reste à tester !
Re-corrigé: 2005-01-13
LordFarquaad
Description: Il est interdit pour une page de s'inclure elle même... ok, mais si on inclut une page qui s'inclut elle même (ne fût-ce qu'indirectement) ?
- Exemple:
- MaPageA:
- {{include page="MaPageA"}}
- MaPageB:
- {{include page="MaPageA"}}
- Et on appèle MaPageB... boom ! L'erreur vient de cette ligne dans include.php (ligne 41):
- if (eregi("^".$incPageName."$",$this->GetPageTag()))
- MaPageA est différent de MaPageB donc MaPageA peut inclure MaPageA...
Bon, je sais, il faut quand même le vouloir... mais ça peut-être arriver par erreur. Mieux vaut envisager tous les cas problèmatiques. Je n'ai pas osé mettre l'exemple en pratique sur
WikiNi.net, parce que chez moi (avec
EasyPhp) Apache à dû se rendre chez le Dr Watson...
Solution: je pense qu'il faudrait créer un tableau qui liste toutes les pages en train de s'inclure. Chaque fois qu'on inclut une page, on l'ajoute dans le tableau, une fois que l'inclusion est terminée, on l'enlève.
Priorité : basse
Difficulté: : simple
Corrigé: 2004-12-29 --
LordFarquaad (
version cvs)
Description : J'ai voulu installer un
WikiNi dans un chemin dont un répertoire contient une apostrophe. La gestion des URLs avec apostrophe est en fait impossible aujoud'hui, à cause des bouts de script attachés à l'événement
ondblclick de
body ou à l'événement
onclick du bouton
Annulation d'une page en mode édition. La syntaxe est à chaque fois quelque chose comme :
et ici, on se retrouve avec une apostrophe au milieu de
zzzz, ce qui évidemment fout la m.....
Je ne connais pas du tout ces aspects de l'HTML/Javascript. Peut-être la solution est-elle simple, mais je ne vois pas ce que ça peut être.
En effet c'est un problème et la
RFC:1738 (interwiki) indique clairement que l'apostrophe est un caractère qui peut être employé dans les URLs. Pour le bout de
JavaScript dans le body nous avons l'intention de le virer mais cela ne résoud pas le problème de fond et notamment pour le bouton Annulation. Personnellement je suis nul en
JavaScript... des idées les autres ? --
CharlesNepote
Oui, éviter les caractères accentué et autre bizarrerie dans les noms des fichiers et répertoires. Ca semble une bonne idée au départ mais pas à l'usage. --
GarfieldFr
Une piste : d'après ma doc
JavaScript on peut utiliser l'apostrophe ou les guillemets pour délimiter une variable et la barre oblique inverse pour échaper. Des exemples :
- var mon_nom = "Vincent"
- var mon_nom = 'Vincent'
- var mon_nom = "Mon nom c'est \"Vincent\"."
- var mon_nom = 'Mon nom c\'est "Vincent".'
--
CharlesNepote
Solution: échappement des guillemets avec
addslashes()...
Priorité : Basse
Difficulté : Simple
Annoncé : 2004-12-24 --
TeTo?
Corrigé : 2004-12-25 --
ProgFou (
version CVS)
Description : Quand on arrive en page d'accueil,on a ca :
Notice: Undefined index: wiki in c:\PHP\wikini\wakka.php on line 780
‹Õޱ‚@D{¿bJ-¡‘BccIgC?³'‡l€=r,!ü½G¢‰`7y™Ì¼ÜxDÅ.7ż°<óÈp%§\ÍÍŠÖRm=XçRv‚ãN Þ‡´b²¢0+önÖqVLJ^m R<²ª¼•Õ W uÆvÌ.éùVîT6„»žÅnµ4Ž7”´ÿË>I“/ûE®õ¾|
Solution : Il suffirait de remplacer Ligne 780:
$wiki = $_REQUEST["wiki"]; par
$wiki = (!isset($_REQUEST["wiki"])) ? "PagePrincipale" : $_REQUEST["wiki"];
--
TeTo?
Priorité : Basse
Difficulté : Moyenne (?)
Annoncé : 2004-01-03 --
ProgFou
Corrigé : 2004-12-06 --
ProgFou (
version CVS)
Description : L'édition d'un commentaire le détache de sa page associée. La première question est de savoir s'il est normal de pouvoir éditer un commentaire en l'appelant directement par son NomWiki, par exemple ainsi :
Comment149?. Si oui, alors il faudrait vérifier pourquoi on perd l'information du
comment_on après l'édition, sinon il faudrait bloquer l'édition des commentaires.
Solution : Modification du code afin de permettre l'édition des commentaires par leurs auteurs (voir
WikiNiChangeLog050).
Nouveau bug introduit : (j'ai rapatrié ce rapport de l'
ArchiveRapportsDeBogues) tous les commentaires apparaissent maintenant comme des
PagesOrphelines --
LordFarquaad [Corrigé. --
ProgFou 2004-12-15]
Priorité : Moyenne
Difficulté : Simple
Annoncé : 2004-01-10 --
ProgFou
Corrigé : 2004-12-06 --
ProgFou
Description : Il est impossible d'enregistrer un commentaire si on a pas le droit d'écriture sur une page. Ceci est du à une erreur dans la fonction
SavePage du fichier
wakka.php : il faut remplacer
HasAccess("write", $tag) par
HasAccess($comment_on?"comment":"write", $tag). On peut alors au passage supprimer la ligne "TODO:" juste au dessus. ;-)
--
ProgFou 20040110
Je ne comprend pas le bogue. Il est parfaitement possible de publier un commentaire dans le cas que tu décris, non ? Peux-tu préciser ? --
CharlesNepote
En premier lieu, sur le principe même du test des droits d'accès, on devrait tester le droit
comment et non
write pour autoriser l'ajout d'un commentaire. Ou à la rigueur les deux ? Mais pour moi commenter n'est pas modifier la page ! En second lieu, le test actuel empêche quelqu'un d'ajouter un commentaire à une page s'il n'a pas les droits d'écriture sur celle-ci (est-ce le choix de
WikiNi ?),
sauf s'il est propriétaire de la page vu que ce dernier à tous les droits sur une page ! Encore une preuve des risques de confusions, voir bugs, en faisant ce genre d'exception. --
ProgFou
Priorité: basse
Difficulté: simple (?)
Annoncé: 2004-12-04 --
LordFarquaad
Corrigé: 2004-12-05 --
ProgFou
Description: les liens "XHTML 1.0 valide ?" et "CSS valide ?" se trouvant en bas de page ne fonctionnent pas si le navigateur (ou un firewall) bloque le
HTTP_REFERRER.
Solution: ces validateurs fonctionent aussi en passant l'URI de la page à vérifier en argument dans l'URI de chacun d'eux.
Priorité : Basse
Difficulté: Facile
Corrigé: 2004-04-23
Description : Si plusieurs wiki sont sur le même domaines, le cookie contenant l'identification passe pour tous les wikis. Cela pose un problème évident d'identification. Je n'ai pas été voir plus profondement si cela posait un probleme de sécurité d'accès mais c'est possible. [Oui, puisqu'un Wiki peut alors récupérer le token d'authentification d'un autre ! --
ProgFou]
Si on a 2 sites web avec par exemple les URLs suivantes : http://membres.lycos.fr/sites1/wakka.php et http://membres.lycos.fr/sites2/wakka.php.
Ces 2 URLs pointant sur un
WikiNi différent. Si un utilisateur s'identifie sur le wiki site1, alors il se retrouve identifié sur le site2 !
La solution est assez simple (en tous cas lorsque il n'y a pas de rewriting d'URL), il suffit de definir le domaine des cookies en indiquant le répertoire racine du wiki.
Le code actuel est :
- function SetSessionCookie($name, $value) { SetCookie($name, $value, 0, "/"); $_COOKIE[$name] = $value; }
il faudrait par exemple mettre :
- function SetSessionCookie($name, $value) { SetCookie($name, $value, 0, "/site1"); $_COOKIE[$name] = $value; }
--
GarfieldFr
Priorité : Haute
Difficulté : normale
Description : Mauvais rendu des accents sous IE5 sous Mac --
FuRax37
Je pense avoir trouvé la solution au problème. Je communiquerai cela bientôt. (
FuRax37, si tu vois ce message, fais moi signe pour savoir si tu pourras tester le rendu des accents une fois le bug corrigé.)
--
PatrickPaul
- Visiblement, ça fonctionne à merveille. Merci --FuRax37
Après quelques tests rapide, je constate aujourd'hui 27/08/2003 que le bogue n'apparaît plus. (Sans doute a-t-il été corrigé lors de l'ajout de la métadonnée "charset" il y a quelques mois.) --
CharlesNepote
Priorité : Haute
Difficulté : ?
Description : Lorsque l'on modifie une page qui a une date d'ancienneté supérieure au chiffre indiqué dans wakka.config.php, l'ancienne version de cette page est alors effacée (ce qui est parfaitement normal). Imaginons qu'une telle page soit remise à zéro par un utilisateur mal intentionné, on est donc plus capable de retrouver une version précédente...
Peut-être faudrait-il conserver au minimum les "n" versions d'une page donnée, sans contrainte de date.
--
CharlesNepote
Ok , résolu, conservation de, au minimum 2 versions, prevoir un paramètre ?
--
DavidDelon
Oui, je pense qu'il serait intéressant d'ajouter un paramètre -- par exemple "min_versionned_pages". --
CharlesNepote
Priorité : Basse
Version : WikiNi 0.1.1.0.3
Difficulté : Aucune.
Description : Le tag img se finit par une barre oblique inverse et non comme il le devrait par une barre oblique normale. Facile à corriger dans wakka.php.
Très juste. Je vais corriger dès que possible.
Remplacer :
return "<img src=\"$tag\" alt=\"$text\" \\>";
par :
return "<img src=\"$tag\" alt=\"$text\" \/>";
--
CharlesNepote
Priorité : Basse
Difficulté : Aucune.
Description : Suggestions pour améliorer la francisation
- dans actions/footer.php :
- OK remplacer "Valid XHTML 1.0" par "XHTML 1.0 valide ?" et "Valid CSS" par "CSS valide ?"
- remplacer "powered by" par "Site mû par" (D'accord sur le principe, mais "Site mû par" ca sonne bizaremment non ? -- DavidDelon) (que dis-tu de "propulsé par" ? -- jexOm.) (ou plutôt "motorisé par" ; ne parle-t-on pas déjà d'un MoteurDeWiki ? Il y aussi "généré par" ou "Site sous" ou....... Je pense qu'on peut se donner encore un peu temps avant de choisir : d'autres idées ? -- CharlesNepote) (Je propose tout simplement "Ce site utilise WikiNi" non ? --DaOuar)
- OK mettre les accents à "References"
- dans handlers/page/acls.php :
- OK remplacer "accés" par "accès"
- OK et "Mise à jour des droits d'accès" par "Droits d'accès mis à jour"
- dans handlers/page/edit.php :
- OK remplacer "re-editer" par "ré-éditer"
- dans handlers/page/show.php :
- OK remplacer "Re-éditer" par "Ré-éditer"
- dans setup/install.php :
- enlever l'allusion à TAB et Mozilla (Le bug est toujours là pour les anciens Mozilla non ?)
- OK remplacer les TAB par deux espaces (en fait, il faut au moins un espace, les TAB marchent toujours).
- remplacer "WikiNiInstaller?" par "InstallateurDeWikiNi?" (c'est une suggestion...)
- dans handlers/page/deletepage.php :
- OK traduire les messages en français en écrivant : "Cette page n'est pas orpheline." (on n'a le droit de tuer que les orphelines, c'est bien connu :-) et "Vous n'êtes pas le propriétaire de cette page."
- OK il y a un fichier handlers/page/diff.orig.php, est-il bien utile ? (DavidDelon ?? qu'en penses-tu ? -- CharlesNepote On peut le virer, je le fait -- DavidDelon)
- dans handlers/page/diff.php, il reste des messages en anglais :
- OK on pourrait remplacer "Additions:" par "Ajouts :"
- OK on pourrait remplacer "Deletions:" par "Suppressions :"
- OK et mettre "Pas de différences."
- OK dans wakka.php :
- remplacer "inconue" par "inconnue"
- OK dans handlers/page/referrers.php :
- ajouter un espace avant les deux points : "(voir la liste des domaines):"
- OK dans actions/usersettings.php :
- remplacer "Password too short" par "Mot de passe pas assez long"
- remplacer "Montrer les commentaires par default :" par "Par défaut, montrer les commentaires :"
- remplacer "Hello" par "Bonjour" et mettre un espace avant le '!'
- remplacer "Votre nom d'utilisateur dois" par "Votre nom d'utilisateur doit"
- remplacer "Doublecliquant" par "double-cliquant"
- remplacer "Edition" par "Édition"
- dans la photo du 12 septembre, ça m'a l'air bon sauf qu'il manque tous les accents circonflexes sur les 'e' de "êtes" (comme "vous n'etes pas connecté" par exemple) -- faire un grep sur tous les " etes " et les "n'etes " et mettre des ê
- OK dans setup/default.php, remplacer "à été" par "a été"
- OKdans setup/install.php, remettre les accents dans les sources des pages
--
jexOm.
Merci pour le script --
DavidDelon
pardonez mon pas bonne francais, mais je suis suisse-allemed,
jai essaiez votre modification de prendre le text de une autre wakka dans une autre page, ca a fonktionez bien, mais maintenat ca marche plus, maintenant il prende tout la code de ma page , et ca cest vraimont le merde.
regardez a la page
CostalMartignier pour voir le bug .
avent cettait super, illya seulement pris le text...
sur ma page ca marche encore, quand ca rest local sur ma page..
jai trouve que cest und bonne idee, mai commeca ca marche pas :-(
si vous avez und iddee comment en peut changer le problem
costal@martignier.net
si vous voulez vous pouvez delete ce message
Nous ferons de notre mieux pour régler ce bogue dans les plus brefs délais. Désolé pour cet inconvénient.
--
PatrickPaul
C'est dû à la transformation de wakka en wiki dans l'url d'appel. La solution, c'est d'installer la dernière version de wakkafr,
je vais essayer de trouver un workaround. --
DavidDelon
hmm le problem c'est que j'ai deja fait tros de modification dans mon wakka, et lautre probleme c'est que je ne comprendre pas bien le francais,
ou vous avez ecris tout en englais dans le code ? je crois pas :-)
mais je dois dire ce wakkafr me plait beaucoup, illya beaucoup des modification qui me plait (suprimer les pages, changer le mot de pass, etc., etc.)
mais le francais cest le probs...
que vous penser de faire une version anglais, commeca toutlemonde peut profiter de votre super travaille.....
excuse moi de casse votre site de bogues, mais ou je peut tire les question a toulemend ?
--
CostalMartignier2 (ex-
CostalMartignier "pardon jai oubliez mon mot de pass")((c'est pas une idee de vendre le mot de pass avec email, quand on a la perdu ?)
Costal, I agree with you that we need to make an english version of the site. However, we have just started this project and we are actively working on supporting different languages. I personally don't mind writting in English or French as I am bilingual.
I can assure you we will make an english version as soon as possible. Please be patient and if you need anything you can drop me a line by
email.
--
PatrickPaul
Ok, j'ai trouvé un moyen de contourner le bogue sans modifier du code, voir la page
CostalMartignier .
--
DavidDelon
oh yeah, pourqois j'ai pas penser a ca, merci
david
--
CostalMartignier
Les arguments dans les actions me posent des problèmes "fondamentaux" par rapport à la structure générale. En effet, j'ai commencé à créer certaines actions de gestion et d'administration et cela pourrait poser certains problèmes de sécurité. Aussi, un utilisateur "malicieux" peut par exemple embêter les gens en utilisant {{usersettings/action="logout"}}.
J'ai besoin d'y réfléchier d'avantage.
--
PatrickPaul
Oui, il y a un problème à ce niveau là. Que pensez vous de l'utilisation d'une methode pour recuperer le parametre ? Un truc du style
get_parameter(name), comme ca il n'y aurait plus d'utilisation du tableau $_REQUEST.
Par exemple dans l'action listpages, le code deviendrait : $sortkey=$this->get_parameter("sort") etc ...
--
DavidDelon
Ton idée me plait bien. Ça permettrait de supporter les paramètres sans compromettre les actions. Tu t'en occupes ?
--
PatrickPaul
Oui, c'est fait : on peut maintenant utiliser
GetParameter?("nom_du_parametre") , j'ai modifié les actions utilisant $_REQUEST.
--
DavidDelon
Question : Pourquoi est il impossible de s'approprier la page DernierChangementPages ?
Réponse : Il y avait un bug obscur qui trainait, il est corrigé. Il n'apparaissait que si la page dernierchangement contenant l'action {{recentchanges}} était modifié et apparaissait dans la liste des derniers changements ... --
DavidDelon
Priorité : Haute
Difficulté : facile
Rendre Wikini compatible avec le php.ini par defaut de la 4.3
Pour éliminer le pb des variables indéfinies qui entraine des E_NOTICE, je d'ajouter:
$wakkaConfig=array(); au moment ou l'on initialise $wakkaDefaultConfig.
de rajouter les index suivant à $wakkaDefaultConfig:
wakka_version => ''
mysql_password => ''
meta keywords => ''
meta actions => ''
'debug' => 'no' (il faudra aussi inclure ce dernier dans wakka.config.php)
D'autre part la ligne 697 doit être écrite comme ceci:
if (strstr ($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') )
(remarquez les guillements autour de gzencode) sinon cela entraine une erreur mais si le output_buffering de php.ini est à sa valeur par défaut (4096), on a finalement juste une page blanche....
Voici la liste incomplète des modifs que je souhaite apporter, ça n'alourdit pas vraiment le code et ça fait quand même plus propre d'avoir un code qui tourne en E_ALL...
//Ligne 109:
if (!isset($page)) $page = $this->LoadSingle("select * from ".$this->config["table_prefix"]."pages where tag = '".mysql_escape_string($tag)."' ".($time ? "and time = '".mysql_escape_string($time)."'" : "and latest = 'Y'")." limit 1");
//Ligne 114:
function GetCachedPage($tag) {return (isset($this->pageCache[$tag]) ? $this->pageCache[$tag] : ''); }
// [ajout de CharlesNepote]
// Ligne 240 :
if (isset($_SESSION["linktracking"]) && $track) $this->TrackLinkTo($tag);
//Ligne 328:
if (!$referrer = trim($referrer) AND isset($_SERVER["HTTP_REFERER"])) $referrer = $_SERVER["HTTP_REFERER"];
//Ligne 346:
$action = trim($action); $vars=array();
// [ajout de CharlesNepote]
// ligne 369 :
if (isset($parameter)) unset($this->parameter[$parameter]);
//Ligne 389:
function GetUser() { return (isset($_SESSION["user"]) ? $_SESSION["user"] : '');}
//Ligne 394:
function GetParameter($parameter) { return (isset($this->parameter[$parameter]) ? $this->parameter[$parameter] :''); }
//Ligne 558:
if ((!$this->GetUser() && isset($_COOKIE["name"])) && ($user = $this->LoadUser($_COOKIE["name"], $_COOKIE["password"]))) $this->SetUser($user, $_COOKIE["remember"]);
//Ligne 559:
$this->SetPage($this->LoadPage($tag, (isset($_REQUEST["time"]) ? $_REQUEST["time"] :'')));
//Ajouter Ligne 61:
$data=array();
//dans formatters/waka.php
//ajouter ligne 10:
$result='';
// [ajout de CharlesNepote]
// ligne 224
if (isset($li) && $op) $result .= "<li>";
else if (isset($li))
//dans handlers/show.php
//mettre les lignes 59-69 dans un bloc:
if (isset($_REQUEST["show_comments"])){ }
// [ajout de CharlesNepote]
// dans action/header.php
// ligne 27
<body <?php echo (!$user || ($user["doubleclickedit"] == 'Y')) && ($this->GetMethod() == "show") ? "ondblclick=\"document.location='".$this->href("edit")."';\" " : "" ?>
// dans actions/footer
// ajouter ligne 51
$t_SQL=0;
// [ajout de CharlesNepote]
// dans /actions/recentchanges.php
// ligne 30
$curday = "";
// ligne 36
if (isset($curday)) print("<br />\n");
--
EricDelord
Pour ma part je suis totalement pour. Un grand merci à Eric.
J'ai ajouté quelques corrections mineures et il y a encore un peu de bruit ici ou là (mais là je sèche un peu pour le débogage) :
[Tue Apr 29 17:20:22 2003] [error] PHP Notice: Undefined variable: method in /xxx/wakka.php on line 703
[Tue Apr 29 17:20:22 2003] [error] PHP Notice: Undefined index: time in /xxx/wakka.php on line 558
--
CharlesNepote
Priorité : Haute
Difficulté : facile
Actuellement il est possible d'injecter des commandes javascripts dans wikini: javascript:alert('Yep_Yep_j\'aurais_pu_transmettre_'+document.cookie) Ici jeune fille nue.
La correction est facile, j'ai commenté le code pour que l'on fasse attention aux modifications dans le futur, je suggère à l'occasion d'ajouter la possibilité de voir les images 'inline'
<?php
function Link($tag, $method = "", $text = "", $track = 1) {
/*new*/ $tag=htmlspecialchars($tag);//avoid xss
/*new*/ $text=htmlspecialchars($text);//paranoiac again
if (!$text) $text = $tag;
// is this an interwiki link?
if (preg_match("/^([A-Z][A-Z,a-z]+)[:]([A-Z][a-z]+[A-Z,0-9][A-Z,a-z,0-9]*)$/", $tag, $matches))
{
$tag = $this->GetInterWikiUrl($matches[1], $matches[2]);
return "<a href=\"$tag\">$text (interwiki)</a>";
}
// is this a full link? ie, does it contain alpha-numeric characters?
else if (preg_match("/[^[:alnum:]]/", $tag))
{
// check for email addresses
if (preg_match("/^.+\@.+$/", $tag))
{
$tag = "mailto:".$tag;
}
// check for protocol-less URLs
/*updated*/ else if (!preg_match("/:\/\//", $tag))
{
$tag = "http://".$tag; //Very important for xss (avoid javascript:() hacking)
}
/*inline img*/ // is this an inline image (text!=tag and url ends png,gif,jpeg)
//ex: [[domaine.com/image.gif texte alternatif et optionnel]] ou [[domaine.com/image.gif texte alternatif et optionnel]]
//par contre [[http://domaine.com/image.gif]] affichera le lien et pas l'image en raison du test $text!=$tag
if($text!=$tag and preg_match("/.(gif|jpg|jpeg|png)$/i",$tag)){
return "<img src=\"$tag\" alt=\"$text\" \\>";
/*fin inline img*/ }else{
return "<a href=\"$tag\">$text</a>";
}
//On modifie aussi cette fonction
function GetInterWikiUrl($name, $tag)
{
if (isset($this->interWiki[$name]))
{
return $this->interWiki[$name].$tag;
}else{
return 'http://'.$tag; //avoid xss by putting http:// in front of JavaScript:()
}
}
?>
Bon je pense que la modif due au xss vous allez accepter, mais quid des images inline ?
--
EricDelord
Il y a même mieux (?) : tu peux inclure le code html que tu veux dans une page wikini, on a déjà discuté du sujet sur HTMLPourLUtilisateur sans avoir adopté de solution (supprimer le html ou mettre en place un filtrage), si tu as des idées n'hésite pas. --
DavidDelon
Priorité : Basse
Difficulté : Normale.
Description : les esperluettes contenues dans les liens ne sont pas transformées en entités SGML.
Exemple 1 :
- [[http://wikini.net/wakka.php?wiki=DerniersChangements/referrers&global=1 Sites faisant référence à ce site]] donne :
- <a href="http://wikini.net/wakka.php?wiki=DerniersChangements/referrers&global=1">Sites faisant référence à ce site</a>
- alors qu'il devrait donner, pour être valide XHTML :
- <a href="http://wikini.net/wakka.php?wiki=DerniersChangements/referrers&global=1">Sites faisant référence à ce site</a>
Exemple 2 :
(Suite à examen approfondi du code, j'ai constaté que ce bogue avait été corrigé
depuis un certains temps).
--
CharlesNepote
Priorité : Basse
Difficulté : Très facile.
Description : Il faut changer le mot "déconnection" (terme anglais) par "déconnexion" (terme français). --
CharlesNepote [qui s'en occupe]
Priorité : Moyenne
Difficulté : ?
Description : Lorsqu'une action fait appel à un paramètre, la valeur du paramètre est, au sein de la même page, conservée en mémoire pour d'autres potentielles actions.
Il devient ainsi impossible, par exemple dans le cas du tableau de bord, d'avoir {{une_action max="5"}} et {{une_autre}} : l'action "une_autre", si elle reconnaît le paramètre "max" prendra la valeur "5".
J'ai trouvé une solution pour corriger cela : à la fin de la fonction Action() dans wakka.php il faut ajouter avant
return $result; :
remettant ainsi à 0 tous les paramètres.
--
CharlesNepote
Priorité : Basse, mais c'est dommage que des caractères accentués restent dans la wikini-0.4.1-snapshot
Difficulté : Aucune
Description :
- Par exemple actions/header.php qui dit "vous êtes" au lieu de "vous êtes"
- Et aussi "droits d'accés" au lieu de "droits d'accès" ("droits d'accès") dans handlers/page/acls.php
--
jexOm.
OK fait le 31/08/2003 , merci
JeXom pour ce rapport de bogue.
--
DavidDelon
Priorité : Basse
Difficulté : Facile
Version testé :0.4.1rc
Description : Dans l'action {{mychanges}} (fichier actions/mychanges.php), si on utilise le code {{mychanges/bydate}}, la liste des changement que l'utilisateur à fait devrait s'afficher triée par dates...ce n'est pas le cas. La modification est la suivante :
Remplacer la ligne :
$edited_pages = array_reverse($edited_pages);
Par la ligne :
arsort($edited_pages); //EF=>Correction de bug de tri
--
GarFieldFr
OK. Corrigé le 24/09/2003. --
CharlesNepote
Priorité : Haute
Difficulté : Difficile
Version testé :0.1.1.0.3, 0.4.1rc
Description : Il est impossible d'avoir plus de 3 paramètres à une action. Et bien sur j'ai besoin de 4 paramètres dans une action que j'ecris. J'ai regardé le tableau
$this->parameter dans la méthode
Action, un
var_dump montre que le tableau ne contient que les 3 premiers paramètres --
GarfieldFr
Résolu et corrigé le 25/09/2003. --
GarfieldFr
Priorité: Basse
Difficulté: Facile
Description : Mettre
---- entre deux doubles guillemets produit une ligne de séparation.
--
PaulToth
OK : corrigé le 25/08/2003. --
CharlesNepote
De la meme facon mettre ---- entre deux %% produit le meme probleme, et stope le traitement.
La seule solution que j'ai trouvé est d'inverser les tests au niveau de wakka.php (décaller le traitement du séparateur vers le bas dans le code) -- Inconnu
Le bogue apparaissait aussi lorsque "----" était placé entre des acolades {{}}. Le bogue est aujourd'hui corrigé (28/09/2003). --
CharlesNepote
Priorité : Haute
Warning: Cannot add header information - headers already sent by (output started at /data/www/net/i/n/wikini.net/www/htdocs/wakka.php:608) in /data/www/net/i/n/wikini.net/www/htdocs/wakka.php on line 230
--
GerdAmi
C'est un peu court comme rapport de bogue : de quelle version de
WikiNi s'agit-il ? Sur quelle système (version de
PhP, etc.) ? Nous ne pourrons pas corriger si nous ne pouvons pas reproduire le problème. --
CharlesNepote
Ce message arrive sur
ce Wikini. Et encore cette fois-ci.
Avec IE 5.5 sur NT4, derriere firewall/proxy --
GerdAmi.
Je suis surpris, je n'ai absolument aucun problème (bien que j'utilise très régulièrement le site). Je vais regarder le code... -
CharlesNepote
J'ai ce problème aussi. Je résume ici :
- en sauvant une page (pas sur l'aperçu), que ça soit en sauvant directement ou en passant par l'aperçu, même erreur que ci-dessus
- en se connectant
- en se déconnectant
Dans ces deux derniers cas, les messages sont plus nombreux (avec trois fois le même au début) :
- Warning: Cannot add header information - headers already sent by (output started at /data/www/net/i/n/wikini.net/www/htdocs/wakka.php:608) in /data/www/net/i/n/wikini.net/www/htdocs/wakka.php on line 221
- Warning: Cannot add header information - headers already sent by (output started at /data/www/net/i/n/wikini.net/www/htdocs/wakka.php:608) in /data/www/net/i/n/wikini.net/www/htdocs/wakka.php on line 221
- Warning: Cannot add header information - headers already sent by (output started at /data/www/net/i/n/wikini.net/www/htdocs/wakka.php:608) in /data/www/net/i/n/wikini.net/www/htdocs/wakka.php on line 221
- Warning: Cannot add header information - headers already sent by (output started at /data/www/net/i/n/wikini.net/www/htdocs/wakka.php:608) in /data/www/net/i/n/wikini.net/www/htdocs/wakka.php on line 230
Du coup, après nettoyage complet de mes cookies, il est impossible de garder en vie ma connexion : je suis obligé de me réidentifier à chaque fois que je redémarre mon navigateur. --
jexOm.
Je suis sous MacOS 10.2.6 et j'ai le problème avec les navigateurs M$IE 5.2.3 et Safari 1.0. En revanche, pas de problème avec OmniWeb 4.5 ni avec Mozilla FireBird 0.6.1.
Note : ça le fait avec la dernière version 0.4.1rc et pas avec la 0.1.1.0.3.
Quelles modifications de wakka.php entre ces deux versions ont-elles pu engendrer ces erreurs ? Ou alors des modifs ailleurs ?
J'ai cherché un peu, mais je ne connais pas bien PHP. Une recherche de "headers already sent by" dans la documentation en ligne de
http://www.php.net donne bien des pistes, mais je ne comprends pas tout, notamment sur les histoires de "buffered output" (y a-t-il un comprtement différent de print et de echo dans ce cas ?). Bon, mais je ne veux pas envoyer qui que ce soit sur une mauvaise piste... --
jexOm.
Je ne vois pas d'ou cela peut venir : un bogue dans Safari et MSIE 5.2.3 ? As tu la possibilité de tester en local sur ton
MacOS 10 et de modifier la ligne 608 de wakka.php en remplacant les echos par des prints ? --
DavidDelon
Bonne idée, j'ai testé sur un de mes
WikiNi. En remplaçant la ligne 608 de
wakka.php par
print($this->Header().$this->Method($this->method).$this->Footer());, je n'ai plus de problème. --
jexOm.
Au fait, quelle était la raison pour changer tous les
print(a.b); par des
echo a,b; ? Performances ? --
jexOm.
Oui, pour des raisons de performance. Je reste quand meme persuadé qu'il doit trainer un bug dans Safari quelque part ... Je repasse en mode print pour la ligne 611. Merci
jexOm pour ce rapport de bogue (qui prouve l'interêt des releases candidates !).
PS : la ligne 608 de
mon WikiNi semble être passée en ligne 611 sur
celui-ci, pour lequel je continue à avoir l'erreur. --
jexOm.
Priorité : Moyenne
Difficulté : Facile (je pense)
Version testé : 0.4.1rc
Description : Dans l'
IndentationVisuelle, il y a un bug qui empêche une page de commencer par une liste. Il faut obligatoirement un caractère non vide avant. Si on met un " " avant, la liste commence à la deuxième ligne et le code HTML généré comporte un "<br />" juste avant la liste. Cela est génant dans le cas où la page ne comportant que la liste est incluse dans une autre page....ou si elle défini le menu du
WikiNi ! Il est en effet possible de definir le menu du Wiki via une liste puis grace à un style de le remettre horizontal (cf
http://www.accessify.com/tools-and-wizards/list-o-matic/list-o-matic.asp et
http://www.complexspiral.com/publications/rounding-tabs/ pour voir comment faire)
--
GarfieldFr
Une certitude : il faut modifier /formatters/wakka.php au niveau du code de l'indentation (attention : il y a pas mal de changements, je ne les ai pas notés) :
<?php
// indented text
else if (preg_match("/(\n|^)(\t+|([ ]{1})+)(-|([0-9a-zA-Z]+)\))?/s", $thing, $matches))
{
// new line
$result .= ($br ? $matches[1]."\n" : "");
// we definitely want no line break in this one.
$br = 0;
// find out which indent type we want
$newIndentType = $matches[4];
if (!$newIndentType) { $opener = "<div class=\"indent\">"; $closer = "</div>"; $br = 1; }
else if ($newIndentType == "-") { $opener = "<ul>\n"; $closer = "</li>\n</ul>"; $li = 1; }
else { $opener = "<ol type=\"".$matches[5]."\">\n"; $closer = "</li>\n</ol>"; $li = 1; }
// get new indent level
if (strpos($matches[2],"\t")) $newIndentLevel = strlen($matches[2]);
else
{
$newIndentLevel=$oldIndentLevel;
$newIndentLength = strlen($matches[2]);
if ($newIndentLength>$oldIndentLength)
{
$newIndentLevel++;
$newIndentSpace[$newIndentLength]=$newIndentLevel;
}
else if ($newIndentLength<$oldIndentLength)
$newIndentLevel=$newIndentSpace[$newIndentLength];
}
$op=0;
if ($newIndentLevel > $oldIndentLevel)
{
for ($i = 0; $i < $newIndentLevel - $oldIndentLevel; $i++)
{
$result .= $opener;
$op=1;
array_push($indentClosers, $closer);
}
}
else if ($newIndentLevel < $oldIndentLevel)
{
for ($i = 0; $i < $oldIndentLevel - $newIndentLevel; $i++)
{
$op=1;
$result .= array_pop($indentClosers);
if ($oldIndentLevel && $li) $result .= "</li>";
}
}
if (isset($li) && $op) $result .= "<li>";
else if (isset($li))
$result .= "</li>\n<li>";
$oldIndentLevel = $newIndentLevel;
$oldIndentLength= $newIndentLength;
return $result;
}
// [...]
// supprimé ===> $text = trim($text)."\n";
$text = preg_replace_callback(
"/(\%\%.*?\%\%|".
"\"\".*?\"\"|".
"\[\[.*?\]\]|".
"\b[a-z]+:\/\/\S+|".
"\*\*|\#\#|@@|££|__|<|>|\/\/|".
"======|=====|====|===|==|".
"---|---|".
"(\n|^)(\t+|([ ]{1})+)(-|[0-9a-z\xe0-\xffA-Z\xc0-\xdd]+\))?|".
"\{\{.*?\}\}|".
"\b[A-Z\xc0-\xdd][A-Z\xc0-\xdda-z\xe0-\xff]+[:]([A-Z\xc0-\xdda-z\xe0-\xff0-9]*)\b|".
"\b([A-Z\xc0-\xdd][a-z\xe0-\xff]+[A-Z\xc0-\xdd0-9][A-Z\xc0-\xdda-z\xe0-\xff0-9]*)\b|".
"\n)/ms", "wakka2callback", $text);
// we're cutting the last <br />
$text = preg_replace("/<br \/>$/","", trim($text));
echo $text;
?>
puis changer wakka.php :
<?php
// [...]
// add new revision
$this->Query("insert into ".$this->config["table_prefix"]."pages set ".
"tag = '".mysql_escape_string($tag)."', ".
($comment_on ? "comment_on = '".mysql_escape_string($comment_on)."', " : "").
"time = now(), ".
"owner = '".mysql_escape_string($owner)."', ".
"user = '".mysql_escape_string($user)."', ".
"latest = 'Y', ".
"body = '".mysql_escape_string($body)."'"); // <<= remplace : "body = '".mysql_escape_string(trim($body))."'");
// [...]
?>
Ca à l'air de fonctionner mais je ne suis pas certains des effets de bord (notamment la suppression des trim()). Si vous pouvez regarder mon code, ça m'intéresserait d'avoir vos avis.
--
CharlesNepote
Je n'ai pas regardé le code, juste essayé les modifications. Ca marche si la liste comporte des symboles devant ( point, chiffre...). Si la liste ne contient pas de symbole, la liste n'est pas générée.
exemple qui ne marche pas :
tototo
tititi
tututut
exemple qui marche :
-totototo
-tititititi
-tutututut
Il semblerait donc que les modifications soient aux bons endroits mais qu'elles soient "un peu trop violente". J'avais pensé à modifier les
trim() en mettant le 2eme paramètre (cf
fonction trim() de PHP ).
Effet de bord : il n'y a plus la suppression des lignes superflue en début de page. Je pense que c'est une histoire de trim() et d'expression régulière dans ta modification. Je vais essayer de regarder de mon coté, mais je suis pas un pro des expressions régulières.
--
GarfieldFr
Je pense avoir trouvé la solution pour ce bug génant : ca doit rejouter des millesecondes à l'interprétation et c'est un peu bourrin mais c'est tout ce que j'ai pu imaginer de simple.
/formatters/wakka.php
<?php
// [...]
// indented text
else if ((preg_match("/\n(\t+|([ ]{1})+)(-|([0-9,a-z,A-Z]+)\))?/s", $thing, $matches))
|| (preg_match("/^(\t+|([ ]{1})+)(-|([0-9,a-z,A-Z]+)\))?/s", $thing, $matches) && $brf=1))
{
// new line
if ($brf) $br=0;
$result .= ($br ? "<br />\n" : "");
// [...]
$text = str_replace("\r", "", $text);
$text = chop($text)."\n";
$text = preg_replace_callback(
"/(\%\%.*?\%\%|".
"\"\".*?\"\"|".
"\[\[.*?\]\]|".
"\b[a-z]+:\/\/\S+|".
"\*\*|\#\#|@@|££|__|<|>|\/\/|".
"======|=====|====|===|==|".
"-{4,}|---|".
"\n(\t+|([ ]{1})+)(-|[0-9,a-z,A-Z]+\))?|".
"^(\t+|([ ]{1})+)(-|[0-9,a-z,A-Z]+\))?|".
"\{\{.*?\}\}|".
"\b[A-Z][A-Z,a-z]+[:]([A-Z,a-z,0-9]*)\b|".
"\b([A-Z][a-z]+[A-Z,0-9][A-Z,a-z,0-9]*)\b|".
"\n)/ms", "wakka2callback", $text);
// [...]
?>
puis changer wakka.php :
<?php
// [...]
// add new revision
$this->Query("insert into ".$this->config["table_prefix"]."pages set ".
"tag = '".mysql_escape_string($tag)."', ".
($comment_on ? "comment_on = '".mysql_escape_string($comment_on)."', " : "").
"time = now(), ".
"owner = '".mysql_escape_string($owner)."', ".
"user = '".mysql_escape_string($user)."', ".
"latest = 'Y', ".
"body = '".mysql_escape_string(chop($body))."'"); // <<= remplace : "body = '".mysql_escape_string(trim($body))."'");
// [...]
?>
--
DavidDelon
Priorité : Basse
Difficulté : Simple
Description : L'aperçu d'une page contenant un formulaire force la fermeture du
<form...> ouvert pour pouvoir cliquer sur les boutons permettant de sauvegarder l'édition. La solution est simple : dans
handlers/page/edit.php, dans le bloc où
$_POST["submit"] == "Aperçu", monter la ligne
$output .= $this->Format($body); juste au dessus du
$this>FormOpen("edit").
--
ProgFou 20040107
Correction : le 11/01/2004 par
CharlesNepote
Priorité : Basse
Difficulté: : ?
Description : bug bizarre de recherche "create"
J'ai un bug bizarre... quand je recherche le terme create ça m'affiche une image de winamp ?! c'est reproductible :
http://www.wikini.net/wakka.php?wiki=RechercheTexte&phrase=create (Ah ben non plus maintenant... peut-être lié à l'utilisation de Galeon au lieu de IE ? 20040204)
Enfin bon ma vrai question c'était sous phpMyAdmin : comment je fais un create table savewiki_pages select * from wikini_pages ? Le champ body contient des quotes (par exemple pour la page
ReglesDeFormatage) et je me retrouve donc avec une table qui a le bon nombre de ligne mais 4 Mo au lieu de 6,5 Mo. Un (voire deux) des champs est (sont) complètement saccagé(s), le texte apparaissant n'importe où. Et les lignes concernées ne sont pas modifiables par phpMyAdmin qui donne l'erreur:
ERROR: Apostrophe non fermé @ 127
STR: '
SQL: SELECT * FROM `savdev_pages` WHERE `id` = '8' AND `tag` = 'ReglesDeFormatage' AND `time` = '2003-10-12 16:06:03' AND `body` = '==== Guide des règles de formatage ====
Les règles de formatage avec Wakka diffèrent légèrement des autres Wikis. (Voir par exemple [[http://c2.com/cgi/wiki?TextFormattingRules les règles de formatage de WikiWikiWeb]], le premier Wiki connu.)
Tout texte placé entre deux guillemets doubles -
Erreur
requête SQL :
SELECT * FROM `savdev_pages` WHERE `id` = '8' AND `tag` = 'ReglesDeFormatage' AND `time` = '2003-10-12 16:06:03' AND `body` = '==== Guide des règles de formatage ==== Les règles de formatage avec Wakka diffèrent légèrement des autres Wikis. (Voir par exemple [[http://c2.com/cgi/wiki?TextFormattingRules les règles de formatage de WikiWikiWeb]], le premier Wiki connu.) Tout texte placé entre deux guillemets doubles -
MySQL a répondu:
You have an error in your SQL syntax near ''==== Guide des règles de formatage ====
Les règles de formatage avec Wakka d' at line 1
Bon c'est plus une erreur
MySql... je vous l'accorde... l'intérêt est de pouvoir faire des sauvegardes uniquement de la dernière version de tout un wiki (purge de l'historique) ou - comme dans mon cas - de nettoyer la table des pages pour tenter de réduire sa taille et espérer la sauver avec l'export de phpMyAdmin...
--
BenoitAudouard 20040203
C'est bon j'ai réussi à m'en sortir avec phpMyAdmin :
- je pense que ce bug était lié au fait que le create + remplissage ne me donnait pas une table avec une structure identique à celle copiée (perte des index et des clés primaires)
- dans phpMyAdmin en sélectionnant la table, il y a un onglet "Opérations" qui permet d'effectuer la copie d'une table : d'abord création de la structure puis copie des lignes, et cela fonctionne mieux que d'essayer de le faire en une fois, "à la main" ;-)
- les 4 Mo au lieu de 6,5 Mo, c'était les index qui manquaient
--
BenoitAudouard 20040208
Priorité : Basse
Difficulté : Simple
Description : L'action
{{interwikilist}} ne s'affiche pas correctement pour cause de faute de typo dans le fichier
actions/interwikilist.php : il faut remplacer les virgules par des points dans
Format("%%",$file,"%%").
--
ProgFou 20031210
OK. Corrigé par mes soins le 27/03/2004. --
CharlesNepote
Priorité : Haute
Difficulté: : Aucune
Description :l'utilisation de la fonction
mysql_pconnect() dans wakka.php semble poser des problèmes sur certains serveur.
Le serveur en question avait
MySql 4.0.18 et PHP 4.3.4. La table
pages de Wikini est alors conscidérée comme
utilisée et le Wikini ne renvoit plus au navigateur que des pages vides contenant seulement les balise
<htm><body></body></html>.
Dans ce cas de figure on peut réparer la table en lançant la commande sql
repair nom_de_la_table;. Mais ce problème à tendance à se reproduire régulièrement.
La seule solution définitive qui à l'air de marcher jusqu'à présent est de remplcer la fonction
mysql_pconnect() par
mysql_connect() dans le fichier
wakka.php.
--
JeanPascalMilcent
En effet, il me semble que utiliser
mysql_connect est plus appropriée. Certains hébergeurs interdisant les connexions persistantes à la base de données. Il est à remarquer que dans le code original de wakka.php il y a un commentaire dans ce sens :)
--
GarfieldFr Idem --
DavidDelon
- Vu le nombre de cas où cette fonction peut poser des problèmes (voir les commentaires de la page http://fr2.php.net/manual/fr/function.mysql-pconnect.php ), la solution de remplacer purement et simplement mysql-pconnect() semble la meilleure. Toutefois, on peut aussi envisager ajouter une entrer dans wakka.config.php permettant de choisir entre connection permanente ou pas car il semblerait que mysql_pconnect() soit intéressante à utiliser sur les serveurs où les connections à la base de données sont longues à établir. --JeanPascalMilcent
- Oui, j'ai toujours ouï dire que pconnect était plus performante. Mais WikiNi a pour objectif premier une utilisation tout terrain, il vaut donc mieux passer en mysql_connect pour privilégier un fonctionnement correct dans tous les cas. Ceux qui ont une âme de geek pourront toujours faire eux-même le passage à pconnect en toute connaissance de cause. Comme je vois que tout le monde est d'accord je propose une intégration au CVS dès que possible. -- CharlesNepote
Mis en place dans le CVS le 07/04/2004. J'en ai profité pour ajouter des
@ devant les appels d'accès à la base
MySQL (afin de les rendre silencieux en cas d'erreur), ainsi qu'un test de base indisponible avec affichage d'un message d'information le cas échéant. --
ProgFou