Da programmi di vent'anni fa`, che funzionano tutt'ora in ditta senza problemi, con sentinelle!conraid ha scritto:Valgono entrambe le cose. Spesso i buffer overflow sono creati ad arte, per scopi più o meno "salutari" :-)puzuma ha scritto:
@phobos3576
il buffer overflow non è quello che dici tu, è un errore del programmatore che va scrivere in area di memoria in modo non intenzionale, poi un cracker può tentare di sfruttarlo.
Comunque non vedo il problema, non penso che cambi la sua definizione se sia stata l'imperizia o la furbizia del programmatore a farlo
Codice: Seleziona tutto
#define NOSTRS 5000
#define STRLEN 16 /* solo 10 possibili, 16 per soddisfare i little-endian Intel */
/* i big-endian WE32[012]00 di AT&T (3B2) erano soddisfatti con 11 */
...
int main(void)
{
char bufn[NOSTRS][STRLEN], filename[16]; /* 16?, vedi sopra */
int i;
...
/* aperta, controllando, la directory, altrimenti exit con error message */
i = 0;
while (sfogliando la directory)
{
/* file leggibile/esistente, altrimenti exit con error message */
if (filename == lungo_esattamente_10_cifre)
{
strcpy(bufn[i], filename);
i++;
}
else
continue; /* ignoramolo, no ci interessa qui` */
...
/* ora chiudiamo la directory, poi assicuriamoci! */
strcpy(bufn[i], "~~~"); /* la sentinella, l'ultimo carattere ASCII, vedi sort(1) */
i++; /* il numero delle entrate, compresa la sentinella */
...
/* riordiniamo in sequenza ASCII il tutto */
qsort(bufn, (size_t) i, STRLEN, programma_in_C_per_comparare);
...
/* se in seguito, alla fine,arriviamo ad un file di nome "~~~", guai in vista */
...
...
...
/* secondo esempio, con previsti p.e. 100 case di numero */
switch(i)
{
case 0:
...
break;
...
...
case 99:
...
break;
default:
exit(fprintf(stderr, "Impossibile case numero %d raggiunto, esco.\n", i));
}e programmare in modo difensivo e` l'autodifesa del programmatore.
Mario Vanoni
