Rendu 3 ligne 345 inutile (Overflow)

Re: Rendu 3 ligne 345 inutile (Overflow)

par Deleted user,
Number of replies: 0

Bonjour,

Je vais répondre de manière générale car j'ignore ce que vous avez fait spécifiquement dans votre code. Dans le code de base fourni, un des problèmes de cette partie était un potentiel overflow au niveau du buffer lors du scanf. Il s'agissait d'un bug que vous pouviez observer en entrant plus de caractères qu'autorisés (il vous fallait peut-être lire +100 caractères pour que le bug se manifeste immédiatement).

Pour corriger ce bug, il fallait limiter le nombre de caractères lus au niveau de la lecture-même, c'est-à-dire directement dans scanf ou en le remplaçant par un fgets. Tester après coup avec strlen que le nombre de caractères du buffer ne dépasse pas la limite autorisée et reboucler en conséquence ne fait aucun sens car le mal aura déjà été fait en cas de buffer overflow: on aurait déjà écrit en dehors du buffer et tester le nombre de caractères lus deviendrait anecdotique.

Lors de la lecture d'un entier avec scanf par exemple, si un caractère inattendu est rencontré, celui-ci n'est pas consommé et demeure dans le flot d'entrée standard (stdin). Dans ce cas-là, pour s'en sortir, le recours à une boucle et le vidage de stdin deviennent nécessaire. Dans le cas d'une lecture d'une chaîne de caractères, le recours à une boucle est inutile car la gestion de l'erreur se fait au niveau du scanf, encore une fois en limitant le nombre de caractères à lire directement dans le format.

Est-ce plus clair ?