On Wed, May 29, 2019 at 5:11 AM Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> wrote: > Most number-related OPT_ macros store the value in an 'int' > variable. Many of the variables in 'struct diff_options' have a > different type, but during the conversion to using parse_options() I > failed to notice and correct. > > The problem was reported on s360x which is a big-endian > architechture. The variable to store '-w' option in this case is > xdl_opts, 'long' type, 8 bytes. But since parse_options() assumes > 'int' (4 bytes), it will store bits in the wrong part of xdl_opts. The > problem was found on little-endian platforms because parse_options() Did you mean s/found/not &/ ? > will accidentally store at the right part of xdl_opts. > > There aren't much to say about the type change (except that 'int' for s/aren't/isn't/ > xdl_opts should still be big enough, since Windows' long is the same > size as 'int' and nobody has complained so far). Some safety checks may > be implemented in the future to prevent class of bugs. > > Reported-by: Todd Zullinger <tmz@xxxxxxxxx> > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx>