Erreur off-by-one

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En informatique, une erreur de type off-by-one (OBOE) est une erreur logique (en) impliquant l'équivalent discret d'un problème aux limites. Elle apparaît régulièrement en programmation lorsqu'une boucle s'itère trop ou trop peu. Ainsi, l'erreur peut émerger lorsqu'un programmeur fait des erreurs telles utiliser la commande « plus petit ou égal à » à un endroit où il aurait plutôt dû utiliser « plus petit que ». L'erreur peut également se produire lorsqu'il oublie qu'une série débute à zéro plutôt qu'à 1[1].

Sécurité informatique[modifier | modifier le code]

Une erreur off-by-one typique dans le domaine de la sécurité informatique est causée par la mauvaise gestion de la routine strncat. Une méconnaissance répandue de strncat est que la guaranteed null termination ne s'écrira pas au-delà de la longueur maximale. En fait, la commande va écrire un caractère nul (en) un byte au-delà de la longueur maximale spécifiée.

Exemple d'erreur off-by-one avec strncat[modifier | modifier le code]

void foo (char *s) 
{
    char buf[15];
    memset(buf, 0, sizeof(buf));
    strncat(buf, s, sizeof(buf)); // Le paramètre final devrait être : sizeof(buf)-1
    return;
}

Notes et références[modifier | modifier le code]

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Off-by-one error » (voir la liste des auteurs)

  1. (en) Edsger Wybe Dijkstra, « Why numbering should start at zero (EWD 831) », E. W. Dijkstra Archive, Université du Texas à Austin,‎ 2 mai 2008

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]