Skip to content

Commit 207eddc

Browse files
author
Seppo Takalo
committed
Fix copy constructors of Callback objects
->move() operator was not touching unused data fields, therefore leaving uninitialised data and failing the comparison. Fixed by initialising all fields to zero before moving.
1 parent 9c98d15 commit 207eddc

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

platform/Callback.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ class Callback<R()> {
9494
*/
9595
Callback(const Callback<R()> &func)
9696
{
97+
memset(this, 0, sizeof(Callback));
9798
if (func._ops) {
9899
func._ops->move(this, &func);
99100
}
@@ -718,6 +719,7 @@ class Callback<R(A0)> {
718719
*/
719720
Callback(const Callback<R(A0)> &func)
720721
{
722+
memset(this, 0, sizeof(Callback));
721723
if (func._ops) {
722724
func._ops->move(this, &func);
723725
}
@@ -1343,6 +1345,7 @@ class Callback<R(A0, A1)> {
13431345
*/
13441346
Callback(const Callback<R(A0, A1)> &func)
13451347
{
1348+
memset(this, 0, sizeof(Callback));
13461349
if (func._ops) {
13471350
func._ops->move(this, &func);
13481351
}
@@ -1969,6 +1972,7 @@ class Callback<R(A0, A1, A2)> {
19691972
*/
19701973
Callback(const Callback<R(A0, A1, A2)> &func)
19711974
{
1975+
memset(this, 0, sizeof(Callback));
19721976
if (func._ops) {
19731977
func._ops->move(this, &func);
19741978
}
@@ -2596,6 +2600,7 @@ class Callback<R(A0, A1, A2, A3)> {
25962600
*/
25972601
Callback(const Callback<R(A0, A1, A2, A3)> &func)
25982602
{
2603+
memset(this, 0, sizeof(Callback));
25992604
if (func._ops) {
26002605
func._ops->move(this, &func);
26012606
}
@@ -3224,6 +3229,7 @@ class Callback<R(A0, A1, A2, A3, A4)> {
32243229
*/
32253230
Callback(const Callback<R(A0, A1, A2, A3, A4)> &func)
32263231
{
3232+
memset(this, 0, sizeof(Callback));
32273233
if (func._ops) {
32283234
func._ops->move(this, &func);
32293235
}

0 commit comments

Comments
 (0)