Ein typischer Fehler in C

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]

buggyd.c
char * fetchname (FILE * in) {
   char name[128]; /* to be overrun */
   char * namep = name;
   int ch;
   while ((ch = getc(in)) != EOF) {
      *namep++ = ch;
   }
   *namep++ = '\0';
   return strdup(name);
}

*So wurde und wird bis heute in C gerne programmiert: Eine Eingabe unbekannter Länge wird in einen Buffer fester (aber recht umfangreicher) Größe eingelesen und anschließend mittels strdup dynamisch allokiert.
 
*Wenn der Umfang der Eingabe unerwarteterweise die Größe des Buffers überschreitet, werden ``irgendwelche'' Speicherbereiche überschrieben.
 
*Viele C-Programmierer hoffen und glauben daran, daß dann schlimmstenfalls ihr Programm ``irgendwie'' auseinanderfällt, z.B. mit einer segmentation violation.
 
*Leider fehlt vielen Programmierern die Übersicht, was alles damit überschrieben werden kann.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]
Copyright © 2002,2003 Andreas F. Borchert, in HTML konvertiert am 11.02.2003