mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			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.pull/9424/head
							parent
							
								
									9c98d1572b
								
							
						
					
					
						commit
						207eddc321
					
				| 
						 | 
					@ -94,6 +94,7 @@ public:
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Callback(const Callback<R()> &func)
 | 
					    Callback(const Callback<R()> &func)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        memset(this, 0, sizeof(Callback));
 | 
				
			||||||
        if (func._ops) {
 | 
					        if (func._ops) {
 | 
				
			||||||
            func._ops->move(this, &func);
 | 
					            func._ops->move(this, &func);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -718,6 +719,7 @@ public:
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Callback(const Callback<R(A0)> &func)
 | 
					    Callback(const Callback<R(A0)> &func)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        memset(this, 0, sizeof(Callback));
 | 
				
			||||||
        if (func._ops) {
 | 
					        if (func._ops) {
 | 
				
			||||||
            func._ops->move(this, &func);
 | 
					            func._ops->move(this, &func);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -1343,6 +1345,7 @@ public:
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Callback(const Callback<R(A0, A1)> &func)
 | 
					    Callback(const Callback<R(A0, A1)> &func)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        memset(this, 0, sizeof(Callback));
 | 
				
			||||||
        if (func._ops) {
 | 
					        if (func._ops) {
 | 
				
			||||||
            func._ops->move(this, &func);
 | 
					            func._ops->move(this, &func);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -1969,6 +1972,7 @@ public:
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Callback(const Callback<R(A0, A1, A2)> &func)
 | 
					    Callback(const Callback<R(A0, A1, A2)> &func)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        memset(this, 0, sizeof(Callback));
 | 
				
			||||||
        if (func._ops) {
 | 
					        if (func._ops) {
 | 
				
			||||||
            func._ops->move(this, &func);
 | 
					            func._ops->move(this, &func);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -2596,6 +2600,7 @@ public:
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Callback(const Callback<R(A0, A1, A2, A3)> &func)
 | 
					    Callback(const Callback<R(A0, A1, A2, A3)> &func)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        memset(this, 0, sizeof(Callback));
 | 
				
			||||||
        if (func._ops) {
 | 
					        if (func._ops) {
 | 
				
			||||||
            func._ops->move(this, &func);
 | 
					            func._ops->move(this, &func);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -3224,6 +3229,7 @@ public:
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Callback(const Callback<R(A0, A1, A2, A3, A4)> &func)
 | 
					    Callback(const Callback<R(A0, A1, A2, A3, A4)> &func)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        memset(this, 0, sizeof(Callback));
 | 
				
			||||||
        if (func._ops) {
 | 
					        if (func._ops) {
 | 
				
			||||||
            func._ops->move(this, &func);
 | 
					            func._ops->move(this, &func);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue