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.
 | ||||
| 	switch { | ||||
| 	case kind == rlp.Byte || kind == rlp.String && len(cnt) == 0: | ||||
| 		// The first component of metropolis receipts is Byte
 | ||||
| 		// or empty String(byte with 0x00 value).
 | ||||
| 	case kind == rlp.Byte || (kind == rlp.String && len(cnt) == 0): | ||||
| 		// The first component of metropolis receipts is Byte (0x01), or the empty
 | ||||
| 		// string (0x80, decoded as a byte with 0x00 value).
 | ||||
| 		var metro metropolisReceiptRLP | ||||
| 		if err := rlp.DecodeBytes(raw, &metro); err != nil { | ||||
| 			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.Bloom = metro.Bloom | ||||
| 		r.Logs = metro.Logs | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user