| 36 | { |
| 37 | |
| 38 | bytes onlyMetadata(bytes const& _bytecode) |
| 39 | { |
| 40 | size_t size = _bytecode.size(); |
| 41 | if (size < 5) |
| 42 | return bytes{}; |
| 43 | size_t metadataSize = (static_cast<size_t>(_bytecode[size - 2]) << 8ul) + static_cast<size_t>(_bytecode[size - 1]); |
| 44 | if (size < (metadataSize + 2)) |
| 45 | return bytes{}; |
| 46 | // Sanity check: assume the first byte is a fixed-size CBOR array with 1, 2 or 3 entries |
| 47 | unsigned char firstByte = _bytecode[size - metadataSize - 2]; |
| 48 | if (firstByte != 0xa1 && firstByte != 0xa2 && firstByte != 0xa3) |
| 49 | return bytes{}; |
| 50 | return bytes(_bytecode.end() - static_cast<ptrdiff_t>(metadataSize) - 2, _bytecode.end() - 2); |
| 51 | } |
| 52 | |
| 53 | bytes bytecodeSansMetadata(bytes const& _bytecode) |
| 54 | { |
no test coverage detected