xmlParser::getAttributesFromString

Das Forum ist für das Melden von Bugs gedacht. // This forum is intended to report bugs with the APF.
Gesperrt
ecomeback
Beiträge: 12
Registriert: 09.11.2007, 13:55:44
Wohnort: Hannover

xmlParser::getAttributesFromString

Beitrag von ecomeback » 14.11.2007, 18:04:49

Hallo Chirstian,

ich arbeite einfach mal das ganze FW durch und dabei fallen mir hin und wieder Dinge auf, die ich einfach zur Diskussion stelle. Ob es sich dann dabei um einen "Bug" etc. handelt musst du selbst entscheiden.

Du setzt eine maximale Schleifenanzahl in der Variable $ParserMaxLoops, wird die Schleife öfter duchlaufen gibt es eine Fehlermeldung, aber die
Schleife wird unter Umständen nie beendet. Das sollte zwar nur sehr selten vorkommen, aber wenn du schon einen Fehler einräumst, dann sollte dort doch ein

Code: Alles auswählen

if($ParserLoops > $ParserMaxLoops)
{
      $hasFound = false;
}
die Schleife beenden?

Grüße
Guido

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Beitrag von dr.e. » 14.11.2007, 21:15:08

Hallo Guido,

ich verstehe was du meinst. Der "harte" Abbruch hat jedoch den Hintergrund, dass der Entwickler dann einen Fehler im HTML/XML hinsichtlich dem Delimiter von Attribut-Werten hat. An dieser Stelle würde es im Fall des Nichtausstiegs im Rest des Codes der Schleife zu Folgefehlern kommen. Wo du natürlich Recht hast ist, dass $hasFound nicht weiter verwendet wird. Man könnte auch kürzer ein

Code: Alles auswählen

while(true){
   ...
}
im Code schreiben. Ich werde das testen und ins nächsten Release einbauen.
Viele Grüße,
Christian

ecomeback
Beiträge: 12
Registriert: 09.11.2007, 13:55:44
Wohnort: Hannover

Beitrag von ecomeback » 16.11.2007, 00:38:21

Hallo Christian,

ich schreibe hier einfach mal weiter und berichte was mir aufgefallen ist..

xmlParser::getTagAttributes

Code: Alles auswählen

if(strpos($TagString,'</'.$prefix.':'.$class.'>') === false){
	trigger_error('[xmlParser::getTagAttributes()] No closing tag found for tag "<'.$prefix.':'.$class.' />"! Tag string: "'.htmlentities($TagString).'".',E_USER_ERROR);
      	// end if
}
"<'.$prefix.':'.$class.' />"!
Wird nicht ausgegeben. Ich kenne nicht den genauen Ablauf von trigger_error, aber bestimmte
Zeichenkombinationen werden hier gefiltert. Unter anderem "<..>"

Configuration::getSubSection
Hier wird der Rückgabewert, ein Array - zumindest wird auf array geprüft "getrimmt":

Code: Alles auswählen

return trim($this->__Configuration[$Section][$Name]
)

configurationManager::__parseConfiguration
Muss hier

Code: Alles auswählen

$ConcatenatedArray = array()
initialisiert werden?

configurationManager::__generateSubArray
Woher kommt denn

Code: Alles auswählen

$this->__NamespaceDelimiter
?

Grüße
Guido

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Beitrag von dr.e. » 16.11.2007, 22:04:19

Hallo Guido,

es freut mich, dass du dich so intensiv mit dem Code beschäftigst. :D
"<'.$prefix.':'.$class.' />"!
Wird nicht ausgegeben. Ich kenne nicht den genauen Ablauf von trigger_error, aber bestimmte
Zeichenkombinationen werden hier gefiltert. Unter anderem "<..>"
Das ist in der Tat ein Bug. Die Fehlermeldung wurde nun zu

Code: Alles auswählen

            if(strpos($TagString,'</'.$prefix.':'.$class.'>') === false){
               trigger_error('[xmlParser::getTagAttributes()] No closing tag found for tag "<'.$prefix.':'.$class.' />"! Tag string: "'.htmlentities($TagString).'".',E_USER_ERROR);
             // end if
            }
geändert.


Thema "Configuration::getSubSection":

Im Code steht hier ein

Code: Alles auswählen

         if(is_array($this->__Configuration[$Section][$Name])){
            return trim($this->__Configuration[$Section][$Name]);
          // end if
         }
Das macht in der Tat recht wenig Sinn, denn ein Array zu trim()'en castet nach string. Ich habe das im Entwicklungszweig entfernt. Hintergrund ist sicher, dass das in der Regel nicht verwendet wird. Es war vor Version 1.2 relevant.

Kurz zum Hintergrund:
Als Subsection wird hier ein Array zurückgeliefert, falls in der Konfiguration so angelegt wurde:

Code: Alles auswählen

[Section]
Subsection.param1 = ""
Subsection.param2 = ""
Subsection.param3 = ""
Lässt du dir die Configuration mit

Code: Alles auswählen

$Config = &$ConfigurationManager->getConfiguration('Namespace','Context','ConfigName',true);
ausgeben, kannst du damit auf das Config-Objekt ein

Code: Alles auswählen

getSubsection('Section','Subsection');
anwenden.


Thema "configurationManager::__parseConfiguration":
Das ist wahrscheinlich ein Code-Relikt aus einer älteren Implementierung. Zumindest habe ich das im CVS gefunden. Könnte sein, dass da ein Merge schief gegangen ist. Ich habe das im aktuellen Entwicklungszweig entfernt.


Thema "configurationManager::__generateSubArray":
Das ist in der Tat ein Bug. In der Klassendefinition fehlt einfach die Definition dieser Variable. Sie dient dazu SubArrays an Hand eines Trennparameters zu generieren (hier '.'). Ich habe das im Entwicklungszweig ergänzt.

Da du bereits einige Themen gefunden hast, werde ich am Wochenende ein Bugfix-Release online stellen, das die beiden FrontController-Themen und die in diesem Thread beschriebenen Themen fixt.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Beitrag von dr.e. » 18.11.2007, 17:33:32

Hallo,

wie oben beschrieben ist nun unter http://www.adventure-php-framework.org/ ... nloads#1.4 ein Bugfix-Release online. Dieses beinhaltet u.a. die o.g. Themen plus weiterer Bereiche. Genaueres kann in den Release-Notes und im BugTracker nachgelesen werden.
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast