trafi

Transducteurs finis
git clone git://git.asteride.xyz/trafi.git
Journaux | Fichiers | Références

commit 83539eacb9f88aa1c98929793314a08bfd9de265
parent 647b20cccf146af6ebed9a623d84ee54a45c9a56
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date:   Sun, 15 Feb 2026 13:18:23 -0500

Vérifier longueurs et signes

tfm_symb_id() renvoie maintenenant une erreur si la longueur du symbole alléguée
excède les 255 octets. Dans cette même fonction, quelques expressions ont été
modifiées pour renvoyer des unsigned char lorsque le symbole ne fait qu’un seul
octet.

Diffstat:
Mtfm.c | 12+++++++++---
1 fichier modifié, 9 insertions(+), 3 suppressions(-)

diff --git a/tfm.c b/tfm.c @@ -105,9 +105,15 @@ tfm_symb_id(struct tfm *tfm, char *symb, size_t lngr, ssize_t *id) assert(lngr > 0); assert(id); - /* Si la taille est 1, l’identifiant du symbole est le symbole lui-même. */ + /* La longueur de l’identifiant doit pouvoir entrer dans un octets. */ + if (lngr > 0xFF) + return -1; + + /* Si la taille est 1, l’identifiant du symbole est le symbole + * lui-même. */ if (lngr == 1) { - *id = *symb; + *id = *(unsigned char *)symb; + assert(*id > 0); return 0; } @@ -118,7 +124,7 @@ tfm_symb_id(struct tfm *tfm, char *symb, size_t lngr, ssize_t *id) n = lngr; if ((pos = tampinf_ajt(tfm->symbs, 1, &n)) < 0) return -1; - if (tampinf_ajt(tfm->symbs, lngr, symb) < 0) + if (tampinf_ajt(tfm->symbs, n, symb) < 0) return -1; fin: