Skip to content

Commit 12a4abb

Browse files
committed
Fixed SHR and SHL methods in StackElement.
1 parent 37c0700 commit 12a4abb

File tree

7 files changed

+132
-16
lines changed

7 files changed

+132
-16
lines changed

evm-testcases/cfs/shl/report.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
"files" : [ "report.json", "untyped_program.evm-testcases_cfs_shl_shl_eth.sol().json" ],
44
"info" : {
55
"cfgs" : "1",
6-
"duration" : "18ms",
7-
"end" : "2025-02-26T11:44:05.924+01:00",
8-
"expressions" : "9",
6+
"duration" : "120ms",
7+
"end" : "2025-05-13T16:38:26.485+02:00",
8+
"expressions" : "45",
99
"files" : "1",
1010
"globals" : "0",
1111
"members" : "1",
1212
"programs" : "1",
13-
"start" : "2025-02-26T11:44:05.906+01:00",
14-
"statements" : "15",
13+
"start" : "2025-05-13T16:38:26.365+02:00",
14+
"statements" : "75",
1515
"units" : "0",
1616
"version" : "0.1",
1717
"warnings" : "0"

evm-testcases/cfs/shl/shl_eth.sol

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,65 @@ PUSH2 0x92c1
1212
PUSH3 0x0192e1
1313
SHL
1414
PUSH1 0x00
15+
EQ
16+
PUSH2 0x0100
17+
PUSH32 0x00FF0000000000000000000000000000000000000000000000000000000000
18+
SHL
19+
PUSH1 0x00
20+
EQ
21+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
22+
PUSH1 0x00
23+
SHL
24+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
25+
EQ
26+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
27+
PUSH1 0x01
28+
SHL
29+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000002
30+
EQ
31+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
32+
PUSH1 0xff
33+
SHL
34+
PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000
35+
EQ
36+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
37+
PUSH2 0x0100
38+
SHL
39+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
40+
EQ
41+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
42+
PUSH2 0x0101
43+
SHL
44+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
45+
EQ
46+
47+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
48+
PUSH1 0x00
49+
SHL
50+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
51+
EQ
52+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
53+
PUSH1 0x01
54+
SHL
55+
PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
56+
EQ
57+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
58+
PUSH1 0xff
59+
SHL
60+
PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000
61+
EQ
62+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
63+
PUSH2 0x0100
64+
SHL
65+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
66+
EQ
67+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
68+
PUSH1 0x01
69+
SHL
70+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
71+
EQ
72+
PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
73+
PUSH1 0x01
74+
SHL
75+
PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
1576
EQ

evm-testcases/cfs/shl/untyped_program.evm-testcases_cfs_shl_shl_eth.sol().json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

evm-testcases/cfs/shr/report.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
"files" : [ "report.json", "untyped_program.evm-testcases_cfs_shr_shr_eth.sol().json" ],
44
"info" : {
55
"cfgs" : "1",
6-
"duration" : "25ms",
7-
"end" : "2025-02-26T11:44:06.021+01:00",
8-
"expressions" : "9",
6+
"duration" : "122ms",
7+
"end" : "2025-05-13T16:42:24.667+02:00",
8+
"expressions" : "42",
99
"files" : "1",
1010
"globals" : "0",
1111
"members" : "1",
1212
"programs" : "1",
13-
"start" : "2025-02-26T11:44:05.996+01:00",
14-
"statements" : "15",
13+
"start" : "2025-05-13T16:42:24.545+02:00",
14+
"statements" : "70",
1515
"units" : "0",
1616
"version" : "0.1",
1717
"warnings" : "0"

evm-testcases/cfs/shr/shr_eth.sol

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,59 @@ PUSH32 0xCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEE
1212
PUSH1 0x08
1313
SHR
1414
PUSH31 0xccffffffffffffffffffffffffffffffffffffffffffffffffffffaabbccdd
15+
EQ
16+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
17+
PUSH1 0x00
18+
SHR
19+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
20+
EQ
21+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
22+
PUSH1 0x01
23+
SHR
24+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
25+
EQ
26+
PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000
27+
PUSH1 0x01
28+
SHR
29+
PUSH32 0x4000000000000000000000000000000000000000000000000000000000000000
30+
EQ
31+
PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000
32+
PUSH1 0xff
33+
SHR
34+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
35+
EQ
36+
PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000
37+
PUSH2 0x0100
38+
SHR
39+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
40+
EQ
41+
PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000
42+
PUSH2 0x0101
43+
SHR
44+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
45+
EQ
46+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
47+
PUSH1 0x00
48+
SHR
49+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
50+
EQ
51+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
52+
PUSH1 0x01
53+
SHR
54+
PUSH32 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
55+
EQ
56+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
57+
PUSH1 0xff
58+
SHR
59+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000001
60+
EQ
61+
PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
62+
PUSH2 0x0100
63+
SHR
64+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
65+
EQ
66+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
67+
PUSH1 0x01
68+
SHR
69+
PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
1570
EQ

evm-testcases/cfs/shr/untyped_program.evm-testcases_cfs_shr_shr_eth.sol().json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/main/java/it/unipr/analysis/StackElement.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -767,8 +767,8 @@ else if (isTop() || other.isTop())
767767
return top();
768768
else if (isTopNotJumpdest() || other.isTopNotJumpdest())
769769
return NOT_JUMPDEST_TOP;
770-
else if (n.compareTo(new Number(Number.MAX_INT)) > 0)
771-
return bottom(); // fake path
770+
else if (n.compareTo(new Number(256)) > 0)
771+
return ZERO;
772772

773773
int[] bits = BitManager.toBitArray(Number.toBigInteger(other.n));
774774
int[] shiftedBits = BitManager.shiftLeft(bits, n.getInt());
@@ -796,8 +796,8 @@ else if (isTop() || other.isTop())
796796
return top();
797797
else if (isTopNotJumpdest() || other.isTopNotJumpdest())
798798
return NOT_JUMPDEST_TOP;
799-
else if (n.compareTo(new Number(Number.MAX_INT)) > 0)
800-
return bottom(); // fake path
799+
else if (n.compareTo(new Number(256)) > 0)
800+
return ZERO;
801801

802802
int[] bits = BitManager.toBitArray(Number.toBigInteger(other.n));
803803
int[] shiftedBits = BitManager.shiftRight(bits, n.getInt());

0 commit comments

Comments
 (0)