Commit 0a684348 authored by Andy Walls's avatar Andy Walls Committed by Mauro Carvalho Chehab

V4L/DVB (12206): get_dvb_firmware: Correct errors in MPC718 firmware extraction logic

The extraction routine for the MPC718 "firmware" had 2 bugs in it, where one
bug masked the effect of the other.  The loop iteration should have set
$prevlen = $currlen at the end of the loop, and the if() check should have used
&& instead of || for deciding if the firmware length is reasonable.
Signed-off-by: default avatarAndy Walls <awalls@radix.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent a5ca3a1b
...@@ -413,13 +413,14 @@ sub mpc718 { ...@@ -413,13 +413,14 @@ sub mpc718 {
while (<IN>) { while (<IN>) {
$currlen = length($_); $currlen = length($_);
if ($prevlen == $currlen || $currlen <= 64) { if ($prevlen == $currlen && $currlen <= 64) {
chop; chop; # Get rid of "TUNER GO" chop; chop; # Get rid of "TUNER GO"
s/^\0\0//; # get rid of leading 00 00 if it's there s/^\0\0//; # get rid of leading 00 00 if it's there
printf OUT "$_"; printf OUT "$_";
$found = 1; $found = 1;
last; last;
} }
$prevlen = $currlen;
} }
} }
close OUT; close OUT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment