Fix inifinite loop on well formed and malformed multirecrd areas

There were mistakes in the parsing of multirecord IPMI fru area.
Most critically, the index never advanced.  Additionally, ensure
that the index always increases and check against the length of the structure
so that a malformed area would not send our parser into an infinite loop.
This commit is contained in:
Jarrod Johnson 2014-04-30 10:30:36 -04:00
parent 715b868dbc
commit 823798b9f2

View File

@ -2971,12 +2971,13 @@ sub parsefru {
my $currsize;
if ($bytes->[$curridx] <= 5) { #don't even try to parse unknown stuff
#some records don't comply to any SPEC
while (not $last) {
while (not $last and $curridx < (scalar @$bytes)) {
if ($bytes->[$curridx+1] & 128) {
$last=1;
}
$currsize=$bytes->[$curridx+2];
push @{$fruhash->{extra}},$bytes->[$curridx..$curridx+4+$currsize-1];
push @{$fruhash->{extra}},@{$bytes}[$curridx..$curridx+4+$currsize-1];
$curridx += 5 + $currsize;
}
}
}