...als Beispiel für schlechten Code (das hier ist aus local-fetch.c):
static const char *path;
/* ... */
char filename[PATH_MAX];
strcpy(filename, path);
strcat(filename, "/objects/pack/pack-");
strcat(filename, sha1_to_hex(sha1));
strcat(filename, ".idx");
/* ... */
int main(int argc, const char **argv)
{
/* ... */
path = argv[arg];
Warum muss ich bloß ca. 5 Sekunden grep(1)en, um ein ideales Codebeispiel zu finden, wie man mit Strings, Pfaden und User Input nicht umgeht in C?
Update: weil gefragt wurde, wie's richtig geht, hier noch die Auflösung:
char filename[PATH_MAX];
snprintf(filename, sizeof(filename), "%s/objects/pack/pack-%s.idx", path, sha1_to_hex(sha1));
Das ist nicht nur sicherer, sondern auch kompakter und lesbarer. Nein, ich werde keinen Patch submitten.