Christoph: (C) seltsamer calloc-Fehler + Pointerfragen

Beitrag lesen

Moin.

Hier stecken zwei Fehler:

  
    strncpy(m->bezeichnung, s, MAX_BEZ);  
    strncpy(m->zusatzinfo, s, MAX_INFO);  

strncpy() schreibt *immer* soviele Zeichen wie angegeben in den Ziel-buffer: ist der Quell-string zu kurz, wird mit Nullen aufgefüllt.

Da du aber falls die string-Längen kleiner als die Maximallängen sind weniger Speicher allozierst, erzeugt der Aufruf einen buffer overflow.

Mit folgenden Funktionen läuft das Programm bei mir problemlos durch:

  
#include <assert.h>  
  
void setMetaDataBezeichnung(struct metadata *m, const char *s)  
{  
    size_t len = strlen(s);  
    if(len > MAX_BEZ) len = MAX_BEZ;  
  
    m->bezeichnung = malloc(len + 1);  
    assert(m->bezeichnung);  
  
    memcpy(m->bezeichnung, s, len);  
    m->bezeichnung[len] = 0;  
}  
  
void setMetaDataZusatzInfo(struct metadata *m, const char *s)  
{  
    size_t len = strlen(s);  
    if(len > MAX_INFO) len = MAX_INFO;  
  
    m->zusatzinfo = malloc(len + 1);  
    assert(m->zusatzinfo);  
  
    memcpy(m->zusatzinfo, s, len);  
    m->zusatzinfo[len] = 0;  
}  

Christoph