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 len = 0;
|
||||||
int32_t tmp = 0;
|
int32_t p1 = 0, p2 = 0, p3 = 0;
|
||||||
|
|
||||||
int nbytes = (p0 & 0xC0) >> 6;
|
int nbytes = (p0 & 0xC0) >> 6;
|
||||||
switch (nbytes) {
|
switch (nbytes) {
|
||||||
case 3:
|
case 3:
|
||||||
tmp = aml_parser_advance(parser);
|
p1 = aml_parser_advance(parser);
|
||||||
if (tmp == PARSE_EOF) {
|
p2 = aml_parser_advance(parser);
|
||||||
|
p3 = aml_parser_advance(parser);
|
||||||
|
if (p3 == PARSE_EOF) {
|
||||||
return PARSE_EOF;
|
return PARSE_EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
len |= tmp << 20;
|
len = p0 & 0x0F;
|
||||||
|
len |= p1 << 4;
|
||||||
|
len |= p2 << 12;
|
||||||
|
len |= p3 << 20;
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
tmp = aml_parser_advance(parser);
|
p1 = aml_parser_advance(parser);
|
||||||
if (tmp == PARSE_EOF) {
|
p2 = aml_parser_advance(parser);
|
||||||
|
if (p2 == PARSE_EOF) {
|
||||||
return PARSE_EOF;
|
return PARSE_EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
len |= tmp << 12;
|
len = p0 & 0x0F;
|
||||||
|
len |= p1 << 4;
|
||||||
|
len |= p2 << 12;
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
len |= p0 & 0x0F;
|
p1 = aml_parser_advance(parser);
|
||||||
tmp = aml_parser_advance(parser);
|
if (p1 == PARSE_EOF) {
|
||||||
if (tmp == PARSE_EOF) {
|
|
||||||
return PARSE_EOF;
|
return PARSE_EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
len |= tmp << 4;
|
len = p0 & 0x0F;
|
||||||
|
len |= p1 << 4;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
len = p0 & 0x3F;
|
len = p0 & 0x3F;
|
||||||
|
|||||||
Reference in New Issue
Block a user