[Cologne-pm] Code-Review oder bin verwirrt

A. Pagaltzis pagaltzis at gmx.de
Thu Jul 3 13:50:47 CDT 2003


* Christian Schneider <cschneid at spinfo.uni-koeln.de> [2003-07-03 17:57]:
> a) Ist es m?glich, da? @dateplaced mehr als ein Element haben
> kann und da? somit die for-Schleife Sinn macht?

Nein.

> b) Hier verstehe ich den Typeglob am Anfang nicht. fval wird
> doch nur als array benutzt und das wird in der Zeile @fval =
> split(...) doch explizit gefüllt (fval wird im restlichen
> Skript auch nicht mehr benutzt und nein, der Autor benutzt kein
> strict). Was würde der Typeglob hier denn überhaupt machen?
> 
> sub GetFormInput {
>     (*fval) = @_ if @_ ;

Er könnte da im ersten Parameter an die Routine eine Referenz
übergeben, dann wäre das entspr globale fval damit besetzt.
*fval = \@foo macht @fval zu einem Alias von @foo; *fval = \$bar
macht $fval zu einem Alias von $bar; *fval = \&baz macht fval()
zu einem Alias auf baz(); etc.

Wird dort ein Glob übergeben, erhält man Aliase auf sämtliche
darüber erreichbaren Variablen. Damit konnte man in Perl4, was
noch keine Referenzen kannte, eine Art Referenz für Arme
realisieren. Seit Perl5 sind Typeglobs nahezu überflüssig (wenn
man nicht schwerst mit Dateihandles hantiert).

>     local ($buf);

Der Mensch versteht local() nicht - oder wusste nix von my().

>     if ($ENV{'REQUEST_METHOD'} eq 'POST') {
>         read(STDIN,$buf,$ENV{'CONTENT_LENGTH'});
>     }

Hier wird die Möglichkeit übersehen, dass POSTs nicht nur als
url-encoded sondern auch als MIME-Dokument verschickt werden
dürfen.

Natürlich wird auch nie geprüft, ob $buf denn soviele Daten
enthält wie CONTENT_LENGTH angibt.

>     if ($buf eq "") {

$buf könnte auch undefiniert sein, dann gibt's hier eine Warnung.

>         return 0 ;

Seufz.

>           else {
>               $field{$name} .= "\0$val";
>           }

Seit der Ära von Perl5 gibt's auch Arrays..

> sub GetFormInput {

Für diese Aufgabe gibt es seit mittlerweile Ewigen Zeiten das
CGI-Modul in der Perl-Kerndistribution. Das leidet auch nicht an
den ganzen Schwachstellen des obigen Codes.


Ich weiss nicht, was du machen willst, aber wenn irgend möglich
würde ich dir raten, ein anderes Skript dafür zu nehmen. Ich
vermute stark dass sich dieses hier bei einem Durchschauen nicht
als zuträglich für die Gesundheit deiner Server erweisen wird.

Bei weiterem Interesse zum Thema CGI, Aber Richtig, siehe:
http://users.easystreet.com/ovid/cgi_course/

-- 
Gruss,
Aristoteles



More information about the Cologne-pm mailing list