core/types: reject Metro receipts with > 0x01 status bytes
This commit is contained in:
		
							parent
							
								
									79bf69b556
								
							
						
					
					
						commit
						4ee92f2d19
					
				| @ -108,14 +108,21 @@ func (r *Receipt) DecodeRLP(s *rlp.Stream) error { | |||||||
| 	} | 	} | ||||||
| 	// Deserialize based on the first component type.
 | 	// Deserialize based on the first component type.
 | ||||||
| 	switch { | 	switch { | ||||||
| 	case kind == rlp.Byte || kind == rlp.String && len(cnt) == 0: | 	case kind == rlp.Byte || (kind == rlp.String && len(cnt) == 0): | ||||||
| 		// The first component of metropolis receipts is Byte
 | 		// The first component of metropolis receipts is Byte (0x01), or the empty
 | ||||||
| 		// or empty String(byte with 0x00 value).
 | 		// string (0x80, decoded as a byte with 0x00 value).
 | ||||||
| 		var metro metropolisReceiptRLP | 		var metro metropolisReceiptRLP | ||||||
| 		if err := rlp.DecodeBytes(raw, &metro); err != nil { | 		if err := rlp.DecodeBytes(raw, &metro); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		r.Failed = metro.Status == receiptStatusFailed | 		switch metro.Status { | ||||||
|  | 		case receiptStatusSuccessful: | ||||||
|  | 			r.Failed = false | ||||||
|  | 		case receiptStatusFailed: | ||||||
|  | 			r.Failed = true | ||||||
|  | 		default: | ||||||
|  | 			return fmt.Errorf("invalid status byte: 0x%x", metro.Status) | ||||||
|  | 		} | ||||||
| 		r.CumulativeGasUsed = metro.CumulativeGasUsed | 		r.CumulativeGasUsed = metro.CumulativeGasUsed | ||||||
| 		r.Bloom = metro.Bloom | 		r.Bloom = metro.Bloom | ||||||
| 		r.Logs = metro.Logs | 		r.Logs = metro.Logs | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user