Tobi's Blog

Archiv für die 'Perl' Kategorie

Allgemeines zu Perl und all seinem Macken

Merkwürdigkeiten beim Taint-Mode in Perl

Erstellt von Tobi am 16. April 2008

Schreibt man einen CPAN-Modul-Test kommt man um den Taint-Modus nicht herum. Normalerweise ist der auch nicht das Problem, allerdings ist heute ein Test auf einem Gentoo-System fehlgeschlagen und es ergibt absolut keinen Sinn.

In den bemängelten Zeilen steht lediglich use base ‘KLASSENNAME’;. Heißt das jetzt, dass “base” unsicher ist? Ja, es ist mit dem bösen “fields” fest verdrahtet, aber was genau soll jetzt hier falsch sein?

Es ist vor allem merkwürdig, dass die Tests auf 50 Systemen problemlos durchgelaufen sind und dieses eine Meckert.

Abgelegt unter Perl | 4 Kommentare »

Perl und Overflow die zweite

Erstellt von Tobi am 22. März 2008

Ich habe weiter ein wenig rumgesucht und immerhin eine brauchbare Variante zum Finden der Systemeigenen Inf-Markierung gefunden.
my $overfloating_float = 0;
my $overfloating_float_string = '';
m< $i = 98;
while($i++) {
$overfloating_float = '1.2e+' . $i;
my $result = ($overfloating_float * 1) - $overfloating_float;
if($result ne '0') {
print "Overflow substraction result: $result, Overflow: " . ($overfloating_float * 1);
$overfloating_float_string = '9' x $i;
last;
}
last if($i > 1_000_000_000);
}
print "Overfloat at: ".($overfloating_float_string * 1)

Die Variable $overfloating_float_string ist eigentlich nicht korrekt erzeugt worden aber das ist hier gar nicht das Problem. Bei den meisten Testsystemen für Fukurama::Class ging alles gut, bis auf bei diesen dreien:

i686-linux-thread-multi-64int-ld2.6.21.5-smp
i686-linux-thread-multi-64int-ld2.6.21.5-smp
x86_64-linux-thread-multi-ld 2.6.22.10

Dort ergab sich ein die Fehlerhafte Ausgabe: Overfloat at: 9.99999999999999997e+4931 Ich weiß ja, dass es bei Fließkommaberechnungen Ungenauigkeiten gibt, aber die Art war mir neu.

Abgelegt unter Perl | Keine Kommentare »

Schlechte CPAN-Module (Teil 2): CGI

Erstellt von Tobi am 14. März 2008

Module, die sich als Eierlegende-Wollmilch-Sau geben, haben oft ein Problem: sie können zu viel und irgendwie nichts richtig. Das Gefühl hab ich beim CGI-Modul schon lange. Und heute wurde es auch bewiesen. Ich habe mir leider nie die Mühe gemacht in die CPAN-Bugliste vom CGI-Modul zu sehen. Hätte ich’s man bloß getan.

Insgesamt sind derzeit 115 Fehler gemeldet, einige davon schon seit Jahren. Live erlebt habe ich den folgenden Fehler in der url() Methode. Ungequotet wird der Scriptname in eien Regex gesetzt. Unter mod_perl ist dummerweise der Scriptname der gesamte Pfad. Ein [ im Pfad der URL führt zu einem Laufzeitfehler, wenn man diese Funktion in der Anwendung benutzt.

Ende vom Lied: ich werde mich wohl mal nach einer Alternative umsehen, die sich AUSSCHLIEßLICH um die Entgegenname von Parametern kümmert und noch ein zweites für die Ausgabe von HTTP-Headern.

Abgelegt unter Perl, Perl::Kinky | 2 Kommentare »

Schlechte CPAN-Module

Erstellt von Tobi am 12. März 2008

Heute ist mir mal wieder (schmerzhaft) klar gemacht worden, dass es viel Mist im CPAN gibt. Man tendiert halt auch sehr leicht dazu, ein fertiges Modul einfach zu benutzen. Wenig Arbeit, schnelle Ergebnisse. Aber das geht eigentlich immer schief. Die Frage ist nur, wie schlimm die Fehler sind.

Mein konkretes Beispiel: das Modul HTML::Tidy, was auch in anderen Modulen öfter verwendet wird, ist ein wenig Bug-verseucht. Das ist mir leider erst NACH dem Produktiveinsatz aufgefallen. Das Encoding wird von ISO nach UTF oder anders herum durchgeführt, ohne dass man das mitgeteilt bekommt. Am Ende hatte ich hunderte schadhafte Datenbankeintragungen :(

Fazit: wenn man ein CPAN-Modul benutzen will, sollte man die Bugs, die Anzahl der durchgefallenen Tests, die Bewertung und den Quellcode ganz genau betrachten. Dumm ist nur, dass einige Module so viele Abhängigkeiten haben. Da ist eine komplette Prüfung ‘ne ziemliche Sysiphos-Arbeit. Aber man sonnte sich die Arbeit machen. Immer!

Abgelegt unter Perl, Programmierung | 1 Kommentar »

Unterschiede von Perl auf verschiedenen Systemen

Erstellt von Tobi am 28. Januar 2008

Bei den CPAN-Tests für das Fukurama::Class Modul sind mir zwei Dinge aufgefallen, die auf unterschiedlichen Systemen unterschiedlich von Perl behandelt werden:

1. Zahlenüberläufe werden unterschiedlich markiert. Ich kenne inf, Solaris z.B. benutzt aber Infinity und einige andere hatten noch ein Inf am Start (großgeschrieben). Das fällt nie auf, auer man behandelt genau diese Überläufe.

2. Klassennamen können nicht immer als Parameter übergeben werden. Ich hatte im Test ein $obj->param(My::Class) verwendet. Das schlug aber komplett fehl. Ich musste es als String übergeben ala $obj->param(‘My::Class’). Nicht weiter tragisch, sofern man es denn weiß. PS: Für __PACKAGE__ gilt das natürlich auch.

Soeben ist ein CPAN-Tester mit einer Windows-Gurke über meine Tests gelaufen. Ich weiß, daß in Visual-Basic z.B. die Boolische Werte in der Landessprache geschrieben werden können. Wie z.B. “true”, “wahr” oder “vrai”. Bei Perl haben sie sich auch Mühe gegeben: -1.#IND für NaN und 1.#INF für Inf. Toll!

In dem Modul erzwinge ich jetzt einen Überlauf und suche mir halt die Systemeigenen Werte. Hmpfrl!

Abgelegt unter Perl, Perl::Kinky | 4 Kommentare »