Δημοσιεύτηκε: 07 Σεπ 2011, 17:23
Α οκ, λέω κι εγώ 
Λοιπόν, είμαστε ΟΚ με τα NULL κλπ για να προχωρήσουμε;
Να δώσω μια περιληπτική άσκηση να δούμε που βρισκόμαστε...
Αυτός ο κώδικας αντιγράφει τα περιεχόμενα του string src στο string dst χωρίς να ελέγχει για ενδεχόμενο buffer-overflow στον dst. Επίσης δεν ελέγχει αν κάποιο ή και τα δύο από τα strings έχουν περαστεί στη συνάρτηση ως NULL.
Λοιπόν, είμαστε ΟΚ με τα NULL κλπ για να προχωρήσουμε;
Να δώσω μια περιληπτική άσκηση να δούμε που βρισκόμαστε...
- Κώδικας: Επιλογή όλων
char *s_copy( char *dst, const char *src )
{
char *save = dst;
while ( (*dst++=*src++) )
;
return save;
}
Αυτός ο κώδικας αντιγράφει τα περιεχόμενα του string src στο string dst χωρίς να ελέγχει για ενδεχόμενο buffer-overflow στον dst. Επίσης δεν ελέγχει αν κάποιο ή και τα δύο από τα strings έχουν περαστεί στη συνάρτηση ως NULL.
- προσθέστε ελέγχους που θα αποτρέπουν την πρόσβαση σε οποιοδήποτε *dst ή *src αν οι δείκτες που τους αντιστοιχούν είναι NULL
- προτείνετε τρόπους ώστε η συνάρτηση να αποτρέπει ενδεχόμενο buffer-overflow στον dst