tools: amldecode: fix read_pkg_length reading multibyte lengths in the wrong order

This commit is contained in:
2023-07-20 19:47:08 +01:00
parent af15eaa75b
commit 82dd8c7846

View File

@@ -22,32 +22,42 @@ static int32_t read_pkg_length(struct aml_parser *parser)
}
int32_t len = 0;
int32_t tmp = 0;
int32_t p1 = 0, p2 = 0, p3 = 0;
int nbytes = (p0 & 0xC0) >> 6;
switch (nbytes) {
case 3:
tmp = aml_parser_advance(parser);
if (tmp == PARSE_EOF) {
p1 = aml_parser_advance(parser);
p2 = aml_parser_advance(parser);
p3 = aml_parser_advance(parser);
if (p3 == PARSE_EOF) {
return PARSE_EOF;
}
len |= tmp << 20;
len = p0 & 0x0F;
len |= p1 << 4;
len |= p2 << 12;
len |= p3 << 20;
break;
case 2:
tmp = aml_parser_advance(parser);
if (tmp == PARSE_EOF) {
p1 = aml_parser_advance(parser);
p2 = aml_parser_advance(parser);
if (p2 == PARSE_EOF) {
return PARSE_EOF;
}
len |= tmp << 12;
len = p0 & 0x0F;
len |= p1 << 4;
len |= p2 << 12;
break;
case 1:
len |= p0 & 0x0F;
tmp = aml_parser_advance(parser);
if (tmp == PARSE_EOF) {
p1 = aml_parser_advance(parser);
if (p1 == PARSE_EOF) {
return PARSE_EOF;
}
len |= tmp << 4;
len = p0 & 0x0F;
len |= p1 << 4;
break;
case 0:
len = p0 & 0x3F;