Skip to content

Commit d127fd8

Browse files
Merge pull request #18 from hungrymegumin/issue12_fixbug_read_leb_i32
support read_leb_i32 & fixbug
2 parents 0de521a + 90bfb96 commit d127fd8

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/deep_loader.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
#define READ_BYTE(p) READ_VALUE(uint8_t, p)
2020

2121
//解码一个无符号32位或64整型,目前只会用到32位类型,在大多数实现中占5个字节
22-
int32_t read_leb_u32(uint8_t** p) {
22+
uint32_t read_leb_u32(uint8_t** p) {
2323
uint8_t* buf = *p;
24-
int32_t res = 0;
25-
for (int32_t i = 0; i < 7; i++) {
26-
res |= (buf[i] & 0x7f) << (i * 7); //出错了,忘记加‘|’
24+
uint32_t res = 0;
25+
for (int32_t i = 0; i < 10; i++) {
26+
res |= (buf[i] & 0x7f) << (i * 7);
2727
if ((buf[i] & 0x80) == 0) {
2828
*p += i + 1;
2929
return res;
@@ -32,6 +32,22 @@ int32_t read_leb_u32(uint8_t** p) {
3232
return 0;
3333
}
3434

35+
int32_t read_leb_i32(uint8_t** p) {
36+
uint8_t* buf = *p;
37+
int32_t res = 0;
38+
for (int32_t i = 0; i < 10; i++) {
39+
res |= (buf[i] & 0x7f) << (i * 7);
40+
if ((buf[i] & 0x80) == 0) {
41+
*p += i + 1;
42+
if((buf[i] & 0x40) != 0) {
43+
res = res | (-1 << ((i + 1) * 7));
44+
}
45+
return res;
46+
}
47+
}
48+
return 0;
49+
}
50+
3551
//检查魔数和版本号
3652
static bool check_magic_number_and_version(uint8_t** p) {
3753
uint32_t magic_number = 0, version = 0;

0 commit comments

Comments
 (0)