bit_vector_extract_xxx : comportement quand pbv == NULL

bit_vector_extract_xxx : comportement quand pbv == NULL

par Aurélien Clergeot,
Number of replies: 1

Bonjour,

J'aurais besoin de précision sur le comportement voulu de bit_vector_extract_zero/wrap quand le bit_vector donné est NULL.

Sur le sujet, il est écrit "si pbv est NULL, on considère l’extension (infinie) simplement constituée que de 0"

Et c'est donc ce que j'ai fait, mais les tests de unit-test-bit-vector ont l'air d'attendre que extract leur renvoie NULL dans ce cas :

Output Console: "unit-test-bit-vector.c:462:F:BitVector Tests:bit_vector_extract_zero_exec:0: Assertion 'bit_vector_extract_zero_ext(((void *)0), 0, 32) == ((void *)0)' failed: bit_vector_extract_zero_ext(((void *)0), 0, 32) == 0xbf98d330, ((void *)0) == 0"

La ligne du test : "ck_assert_ptr_null(bit_vector_extract_zero_ext(NULL, 0, IMAGE_LINE_WORD_BITS));"

Quel comportement est celui attendu ?

In reply to Aurélien Clergeot

Re: bit_vector_extract_xxx : comportement quand pbv == NULL

par Jean-Cédric Chappelier,

Très bonne question et nous n'avons en effet pas été consistants entre nous...
Mathématiquement l'extension zéro de l'ensemble vide est une infinité de 0 et l'extension par enroulement de l'ensemble vide est vide. Donc je trouve que (globalement) la donnée a raison (sauf pour wrap où ça devrait retourner NULL) et que notre test sur ext_zero doit être changer. Pour résumer :

  • ext_zero sur NULL doit donner un vecteur ne contenant que des 0, de taille size (demandée) ;
  • wrap sur NULL doit donner NULL.
Je vais patcher la donnée (pour wrap) et le code unit-test-bit-vector.c (pour extend_zero) dans quelques minutes.
Merci pour la remarque/question.