Bonjour,
J'ai récemment été confronté à un plantage d'une application embarquée suite à un appel à la fonction sscanf(). A savoir que précédemment, avant que j'intervienne sur ce bug, il n'y a jamais eu de soucis concernant ce code. Il est possible qu'entre-temps des options de compilation ou de version de libc aient été modifiées.
Bref, voici l'allure du code incriminé:
J'aimerais savoir si quelqu'un a des informations ou une explication sur le fonctionnement interne de pourquoi le passage d'une variable ne correspondant pas au type sur lequel le pointeur est censé pointé peut provoquer un plantage?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int SSCANF(char *buffer, unsigned long *value_pu4) { if (sscanf(buffer, "%d", value_pu4) != 1) return 0; return 1; } int main() { char *buffer = "1 2"; //unsigned long value; // <= Ici, çà ne plante pas, heureusement. char value; // <= Ici, çà plante! SSCANF(buffer, &value); return 0; }
Problème d'alignement? Un type d'overflow?
Merci.
Partager