Wikini

ArchiveRapportsDeBogues

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-198-103-13.compute-1.amazonaws.com

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) ?
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 :
-- 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 :
il faudrait par exemple mettre :
--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

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
#!/bin/sh
#Par exemple comme ça (il y a sûrement plus élégant...)
Tmp=/tmp/$$
for Fichier in $(find . -name \*\.php -print); do
  cat $Fichier | sed -e 's/ etes / \&ecirc;tes /g' -e "s/n'etes /n'&ecirc;tes /g" > $Tmp
  cp $Tmp $Fichier
done
# Ca a l'air de bien tout mettre les accents qui manquent sans en ajouter là où il ne faut pas...

-- 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 :
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 :
-- 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 :
Dans ces deux derniers cas, les messages sont plus nombreux (avec trois fois le même au début) :





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 "&nbsp;" 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+|".
        
"\*\*|\#\#|@@|&pound;&pound;|__|<|>|\/\/|".
        
"======|=====|====|===|==|".
        
"-{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 :
-- 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

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


Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]