]> icculus.org git repositories - dana/obconf.git/commit
Fix --tab error
authorSteven Chan <stevenyvr987@users.noreply.github.com>
Fri, 13 Feb 2015 20:18:39 +0000 (12:18 -0800)
committerDana Jansens <danakj@google.com>
Fri, 13 Feb 2015 21:08:22 +0000 (13:08 -0800)
commitb360414fcae0282f7298999117f02a4884346dfc
tree423bd29af9cb5cf10b01411ee8f61b6213dde5ae
parent85e3e6ef442416c8a598295bcbe18b5b6473ecc3
Fix --tab error

The error occurs when a tab number greater than one is given, which will
cause obconf to crash with a segmentation violation. For example, typing
'obconf --tab 2' on the console will crash insteading of launching a GUI
with tab 2 selected. The error is caused by using the MAX macro with a
first argument that is not an idempotent expression (file main.c, line
number 135):

    obc_tab = MAX(atoi(argv[++i]) - 1, 0);

where MAX is defined in file /usr/include/x86_64-linux-gnu/sys/param.h:

    #define MAX(a,b) (((a)>(b))?(a):(b))

where the result will be the first argument a if it is more than the
second argument b, otherwise the result will be b, ie, the result will
be the maximum of a or b. Notice that a or b will be evaluated twice,
depending on the > comparison, which means that a and b should always be
idempotent expression, assuming that the compiler does not generate code
to cache a and b values as intermediate results.

In our case, if the argument counter i is zero or one, a will be
evaluated once, but if it is two or more, a will be evaluated twice,
which means that the argv array will be accessed past its natural end.
src/main.c