Skip to content

Commit fba71af

Browse files
committed
Apkv3: also check for legacy type package identifier
1 parent 1371c22 commit fba71af

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

Build/Apkv3.pm

+21-1
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,16 @@ my $installed_schema = [
207207
[ 'b*', 'packages', undef, \&installed_postprocess ],
208208
];
209209

210+
my $pkg_info_schema_zerochksum = [
211+
[ undef ],
212+
[ undef ],
213+
[ '!', 'apkchksum', undef, sub { substr($_[0], $_[1] + 1, 20, "\0\0\0\0" x 5) if $_[2] == 8 && substr($_[0], $_[1], 1) eq "\x14" } ],
214+
];
215+
216+
my $pkg_schema_zerochksum = [
217+
[ 'o', '', $pkg_info_schema_zerochksum ],
218+
];
219+
210220
sub installed_postprocess {
211221
my ($v) = @_;
212222
substr($v, 0, 4, '');
@@ -255,10 +265,13 @@ sub walk {
255265
$v = $name eq '' ? $_[1]: {};
256266
walk($_[0], $v, $s->[2], \@v);
257267
next if $name eq '';
268+
} elsif ($st eq '!') {
269+
$cvt->($_[0], $v, $t, $_[1], $name, $multi);
270+
next;
258271
} else {
259272
die("unsupported type $st in schema\n");
260273
}
261-
$v = $s->[3]->($v) if $cvt;
274+
$v = $cvt->($v) if $cvt;
262275
if ($multi) {
263276
push @{$_[1]->{$name}}, $v;
264277
} else {
@@ -455,6 +468,13 @@ sub verifyapkchksum_adb {
455468
die("unsupported apk checksum $chksum\n") unless $chksum =~ /^([QX][12])/;
456469
return 1 if calcapkchksum_adb($_[0], $1) eq $chksum;
457470
return 1 if $chksum =~ /^([QX])1/ && trunc_apkchksum(calcapkchksum_adb($_[0], "${1}2")) eq $chksum;
471+
# last resort: check for old style package identifier
472+
if ($chksum =~ /^([QX])1/) {
473+
my $adb_cpy = $_[0];
474+
walk_root($adb_cpy, $pkg_schema_zerochksum);
475+
return 1 if calcapkchksum_adb($adb_cpy, substr($chksum, 0, 2)) eq $chksum;
476+
return 1 if trunc_apkchksum(calcapkchksum_adb($adb_cpy, substr($chksum, 0, 1).'2')) eq $chksum;
477+
}
458478
return 0;
459479
}
460480

0 commit comments

Comments
 (0)