Skip to content

Commit 5bf224f

Browse files
Merge pull request #5027 from geky/cb-fix-eq
cb: Fix uninitialized memory used for equality check
2 parents ddb6b66 + 382c038 commit 5bf224f

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

platform/Callback.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Callback<R()> {
7777
*/
7878
Callback(R (*func)() = 0) {
7979
if (!func) {
80-
_ops = 0;
80+
memset(this, 0, sizeof(Callback));
8181
} else {
8282
generate(func);
8383
}
@@ -590,6 +590,7 @@ class Callback<R()> {
590590

591591
MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F),
592592
"Type F must not exceed the size of the Callback class");
593+
memset(this, 0, sizeof(Callback));
593594
new (this) F(f);
594595
_ops = &ops;
595596
}
@@ -651,7 +652,7 @@ class Callback<R(A0)> {
651652
*/
652653
Callback(R (*func)(A0) = 0) {
653654
if (!func) {
654-
_ops = 0;
655+
memset(this, 0, sizeof(Callback));
655656
} else {
656657
generate(func);
657658
}
@@ -1165,6 +1166,7 @@ class Callback<R(A0)> {
11651166

11661167
MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F),
11671168
"Type F must not exceed the size of the Callback class");
1169+
memset(this, 0, sizeof(Callback));
11681170
new (this) F(f);
11691171
_ops = &ops;
11701172
}
@@ -1226,7 +1228,7 @@ class Callback<R(A0, A1)> {
12261228
*/
12271229
Callback(R (*func)(A0, A1) = 0) {
12281230
if (!func) {
1229-
_ops = 0;
1231+
memset(this, 0, sizeof(Callback));
12301232
} else {
12311233
generate(func);
12321234
}
@@ -1741,6 +1743,7 @@ class Callback<R(A0, A1)> {
17411743

17421744
MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F),
17431745
"Type F must not exceed the size of the Callback class");
1746+
memset(this, 0, sizeof(Callback));
17441747
new (this) F(f);
17451748
_ops = &ops;
17461749
}
@@ -1802,7 +1805,7 @@ class Callback<R(A0, A1, A2)> {
18021805
*/
18031806
Callback(R (*func)(A0, A1, A2) = 0) {
18041807
if (!func) {
1805-
_ops = 0;
1808+
memset(this, 0, sizeof(Callback));
18061809
} else {
18071810
generate(func);
18081811
}
@@ -2318,6 +2321,7 @@ class Callback<R(A0, A1, A2)> {
23182321

23192322
MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F),
23202323
"Type F must not exceed the size of the Callback class");
2324+
memset(this, 0, sizeof(Callback));
23212325
new (this) F(f);
23222326
_ops = &ops;
23232327
}
@@ -2379,7 +2383,7 @@ class Callback<R(A0, A1, A2, A3)> {
23792383
*/
23802384
Callback(R (*func)(A0, A1, A2, A3) = 0) {
23812385
if (!func) {
2382-
_ops = 0;
2386+
memset(this, 0, sizeof(Callback));
23832387
} else {
23842388
generate(func);
23852389
}
@@ -2896,6 +2900,7 @@ class Callback<R(A0, A1, A2, A3)> {
28962900

28972901
MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F),
28982902
"Type F must not exceed the size of the Callback class");
2903+
memset(this, 0, sizeof(Callback));
28992904
new (this) F(f);
29002905
_ops = &ops;
29012906
}
@@ -2957,7 +2962,7 @@ class Callback<R(A0, A1, A2, A3, A4)> {
29572962
*/
29582963
Callback(R (*func)(A0, A1, A2, A3, A4) = 0) {
29592964
if (!func) {
2960-
_ops = 0;
2965+
memset(this, 0, sizeof(Callback));
29612966
} else {
29622967
generate(func);
29632968
}
@@ -3475,6 +3480,7 @@ class Callback<R(A0, A1, A2, A3, A4)> {
34753480

34763481
MBED_STATIC_ASSERT(sizeof(Callback) - sizeof(_ops) >= sizeof(F),
34773482
"Type F must not exceed the size of the Callback class");
3483+
memset(this, 0, sizeof(Callback));
34783484
new (this) F(f);
34793485
_ops = &ops;
34803486
}

0 commit comments

Comments
 (0)