tools: amldecode: fix read_pkg_length reading multibyte lengths in the wrong order
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user