[pacman-dev] [PATCH 3/3] paccache: verify nonnegative integer for -k option

lolilolicon lolilolicon at gmail.com
Wed Sep 28 14:46:56 EDT 2011


On Thu, Sep 29, 2011 at 1:52 AM, Dave Reisner <d at falconindy.com> wrote:
> On Thu, Sep 29, 2011 at 12:58:59AM +0800, lolilolicon wrote:
>> Allow leading zeros, but always treat it as decimal.
>
> If this was your goal, you missed. 'keep' is declared with an integer
> attribute meaning that all conversions to decimal are done at
> assignment, i.e.
>
> $ declare -i keep=015
> # declare -p keep
> declare -i keep="13"
>

Indeed, I missed 'keep' being declared '-i'. But then, the result is different
from my intention, i.e. I meant to just strip the leading zeros (015 -> 15):

$ typeset +i i
$ i=015
$ declare -p i
declare -- i="015"
$ echo $(( 10#$i ))
15

'declare -i keep' might be problematic, if we just do 'keep=$OPTARG', since
arithmetic evaluation is performed on the argument passed to -k, which means:

 - If the expression is not valid, the simple assignment 'keep=$OPTARG' will
   spill errors.
 - If the expression can be evaluated, it can potentially take a huge amount of
   resources, e.g. 2**2**32.

Both situations should be avoided IMO.

I say scratch '-i'; but YMMV...

>> Also quote right side of [[ expression ]] when the != or == operator is
>> used, unless a pattern is intended.
>
> This really should be separate commits, or the first line should be a
> more accurate summation of the changes involved.
>

You're right. This kind of got suppressed by the other issue.

>> Signed-off-by: lolilolicon <lolilolicon at gmail.com>
>> ---
>>  contrib/paccache.in |    6 ++++--
>>  1 files changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/contrib/paccache.in b/contrib/paccache.in
>> index 11b7bbb..c86ea31 100755
>> --- a/contrib/paccache.in
>> +++ b/contrib/paccache.in
>> @@ -153,7 +153,7 @@ summarize() {
>>                       while read -r pkg; do
>>                               if (( verbose >= 3 )); then
>>                                       [[ $pkg =~ $pkg_re ]] && name=${BASH_REMATCH[1]} arch=${BASH_REMATCH[2]}
>> -                                     if [[ -z $seen || $seenarch != $arch || $seen != $name ]]; then
>> +                                     if [[ -z $seen || $seenarch != "$arch" || $seen != "$name" ]]; then
>
> I'm not saying this is wrong, but there'd have to be some seriously
> screwed up packages in your cache for this quoting to matter.

In reality, sure, but nothing's stopping an $arch that is '[idk]686'
in the future ;)
After all, we should rely our code on data as little as possible,
don't you think?


More information about the pacman-dev mailing list