Mares Smart Apnea
Giorgio Marzano
marzano.giorgio at gmail.com
Wed Sep 9 06:53:43 PDT 2015
I see your points, you are definitely right :)
G
Il 09/Set/2015 14:45, "Jef Driesen" <jef at libdivecomputer.org> ha scritto:
> On 2015-09-09 14:04, Giorgio Marzano wrote:
>
>> I have compiled this sniplet:
>>
>> main (int argc, char *argv[])
>> {
>> int i;
>> const mares_iconhd_model_t models[] = {
>> {"Matrix", MATRIX},
>> // {"Smart Apnea", SMARTAPNEA},
>> {"Smart", SMART},
>> {"Icon HD", ICONHD},
>> {"Icon AIR", ICONHDNET},
>> {"Puck Pro", PUCKPRO},
>> {"Nemo Wide 2", NEMOWIDE2},
>> {"Puck 2", PUCK2},
>> };
>>
>> // Check the product name in the version packet against the list
>> // with valid names, and return the corresponding model number.
>> unsigned int model = 0;
>> for ( i = 0; i < 7; ++i) {
>> printf ("i: %d, sizeof: %d, strlen: %d\n",i,sizeof(models[i].name),strlen
>> (models[i].name));
>>
>> }
>> }
>>
>> and the corresponding ouput is:
>>
>>
>> giorgio at giorgio-laptop:~$ ./prova i: 0, sizeof: 17, strlen: 6 i: 1,
>> sizeof:
>> 17, strlen: 5 i: 2, sizeof: 17, strlen: 7 i: 3, sizeof: 17, strlen: 8 i:
>> 4,
>> sizeof: 17, strlen: 8 i: 5, sizeof: 17, strlen: 11 i: 6, sizeof: 17,
>> strlen: 6
>>
>>
>> So it seems to me that either we use strlen or we use strcmp
>>
>
> No, the memcmp is correct. In the mares header, the name is a 16 byte
> array. If the name is shorter than 16 bytes, the remaining bytes are padded
> with zero's. But if there would be a name that's exactly 16 bytes long,
> then there won't be a terminating zero byte. In that case, strlen and
> strcmp will result in a buffer overflow! That's why we use memcmp. The
> other reason is that I want to do an exact match. The "Smart" entry should
> not match "Smart Apnea". Future models needs to be added explicitly, and
> not detected by accident.
>
> Jef
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://libdivecomputer.org/pipermail/devel/attachments/20150909/ba73676c/attachment-0001.html>
More information about the devel
mailing list