[lvm-devel] number conversion in lvm

Zdenek Kabelac zkabelac at redhat.com
Sat Jul 13 08:49:24 UTC 2013


Dne 13.7.2013 01:11, Mikulas Patocka napsal(a):
> Hi
>
> I found some strange code in _get_int_arg in ./tools/lvmcmdline.c:
>
> v = strtol(val, ptr, 10);
>
> if (*ptr == val)
>          return 0;
>
> av->i_value = (int32_t) v;
> av->ui_value = (uint32_t) v;
> av->i64_value = (int64_t) v;
> av->ui64_value = (uint64_t) v;
>
> It is taking 32-bit long value and then casting it to 64 bits. Should
> there be strtoull instead of strtol?

It used to read only 32bit values.
For 64bit other functions are used - i.e.  _size_arg

>
> BTW. how is that function supposed to handle integer overflow - it doesn't
> seem to do that.
>

it returns  LONG_MIN/MAX for underflow/overflow - but assuming errno could
be checked for ERANGE and fail command for this case instead.

Zdenek





More information about the lvm-devel mailing list