Ik heb net een paar uur besteed naar het opsporen van een bug die een crash veroorzaakte onder W2K.
Stukje code:
Vrij simpel. Haalt gewoon tekst op uit een edit control, stript spaties ed en zet er weer netjes een NUL in. Dit werkt onder 95, 98 en NT4 al een aantal jaren zonder problemen. Maar onder W2K was het raak.
Wat gebeurt er? Het lijkt er op dat W2K de werkelijke lengte van de string in de edit control teruggeeft in plaats van het aantal karakters dat daadwerkelijk naar de buffer is gekopieerd (max 31 in bovenstaande code). En dan overschrijf je de stack met die '\0' ... Niet simpel te vinden dus. Wel simpel te verhelpen met een extra regeltje code.
Maar erg comfortabel voelt het niet. Ik kan er ook nergens iets over vinden! Ben ik nou al jaren in de bonen, of is er iemand die hier meer over weet?
Stukje code:
code:
1
2
3
4
5
| char buf[32];
int len = GetWindowText(hwnd, buf, sizeof(buf)-1);
while (len > 0 && isspace(buf[len-1]))
--len;
buf[len] = '\0'; |
Vrij simpel. Haalt gewoon tekst op uit een edit control, stript spaties ed en zet er weer netjes een NUL in. Dit werkt onder 95, 98 en NT4 al een aantal jaren zonder problemen. Maar onder W2K was het raak.
Wat gebeurt er? Het lijkt er op dat W2K de werkelijke lengte van de string in de edit control teruggeeft in plaats van het aantal karakters dat daadwerkelijk naar de buffer is gekopieerd (max 31 in bovenstaande code). En dan overschrijf je de stack met die '\0' ... Niet simpel te vinden dus. Wel simpel te verhelpen met een extra regeltje code.
Maar erg comfortabel voelt het niet. Ik kan er ook nergens iets over vinden! Ben ik nou al jaren in de bonen, of is er iemand die hier meer over weet?