You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 1756 Reporter: administrator Status: closed (set by @damiendoligez on 2012-01-26T14:18:59Z) Resolution: fixed Priority: normal Severity: minor Fixed in version: 3.12.1 Category: ~DO NOT USE (was: OCaml general)
Bug description
Il me semble que le code pour le cas Custom_tag dans compare.c est
potentiellement dangereux, car il ne verifie pas que les deux
blocs utilisent la meme fonction de comparaison.
Le probleme peut se poser si on compare deux objets custom differents
(mais de meme taille), dont on a prealablement oublie' le type par
Obj.repr.
Ca peut paraitre un peu tire' par les cheveux, mais ca me semble etre
le seul cas ou` [compare (Obj.repr a) (Obj.repr b)] est
potentiellement incorrect.
D'autre part, si Custom_ops_val(v1)->compare == NULL, l'exception
Failure est levee, alors que dans les autres cas c'est Invalid_argument.
Jacques
The text was updated successfully, but these errors were encountered:
Il me semble que le code pour le cas Custom_tag dans compare.c est
potentiellement dangereux, car il ne verifie pas que les deux
blocs utilisent la meme fonction de comparaison.
Le probleme peut se poser si on compare deux objets custom differents
(mais de meme taille), dont on a prealablement oublie' le type par
Obj.repr.
Comme tu dis, c'est un peu tiré par les cheveux :-)
On peut, par prudence, comparer les Custom_ops_val et s'ils diffèrent,
lever une exception Invalid_argument. Mais comparer les pointeurs
Custom_ops_val est un peu bizarre.
D'autre part, si Custom_ops_val(v1)->compare == NULL, l'exception
Failure est levee, alors que dans les autres cas c'est Invalid_argument.
Original bug ID: 1756
Reporter: administrator
Status: closed (set by @damiendoligez on 2012-01-26T14:18:59Z)
Resolution: fixed
Priority: normal
Severity: minor
Fixed in version: 3.12.1
Category: ~DO NOT USE (was: OCaml general)
Bug description
Il me semble que le code pour le cas Custom_tag dans compare.c est
potentiellement dangereux, car il ne verifie pas que les deux
blocs utilisent la meme fonction de comparaison.
Le probleme peut se poser si on compare deux objets custom differents
(mais de meme taille), dont on a prealablement oublie' le type par
Obj.repr.
Il me semble qu'il faudrait ajouter la ligne:
if (Custom_ops_val(v1) != Custom_ops_val(v2))
return ((value)Custom_ops_val(v1) >> 1) - ((value)Custom_ops_val(v2) >> 1);
Ca peut paraitre un peu tire' par les cheveux, mais ca me semble etre
le seul cas ou` [compare (Obj.repr a) (Obj.repr b)] est
potentiellement incorrect.
D'autre part, si Custom_ops_val(v1)->compare == NULL, l'exception
Failure est levee, alors que dans les autres cas c'est Invalid_argument.
The text was updated successfully, but these errors were encountered: