MEDIUM severity: The vulnerability arises from the incorrect implementation of the ZIP algorithm in the `WooracleV2_2. The vulnerability arises from the incorrect implementation of the ZIP algorithm in the `WooracleV2_2.fallback()` function. Specifically, the first 4 bytes of the zipped data are not reserved to distinguish the ZIP call from other normal calls to the contract. This can lead to unintended exceptions a...

Vulnerable code:
```\nfallback external payable {\n    fallback(bytes calldata _input) external payable returns (bytes memory _output)\n```\n```\npragma solidity ^0.8.0;\n\nimport {Test} from "../../lib/forge-std/src/Test.sol";\nimport {console2} from "../../lib/forge-std/src/console2.sol";\nimport {WooracleV2_2} from "../../contracts/wooracle/WooracleV2_2.sol";\n\ncontract WooracleZipBugTest is Test {\n    WooracleV2_2 public oracle;\n\n    function setUp() public {\n        oracle = new WooracleV2_2();\n    }\n\n    function testNormalCase() public {\n        uint8 base = 6;\n        bytes memory zip = _makeZipData({\n            op: 0,\n            length: 1,\n            leadingBytesOfBody: abi.encodePacked(base, uint32((2302 << 5) + 4))\n        });\n        (bool success,) = address(oracle).call(zip);\n        assertEq(success, true);\n        address wooAddr = oracle.getBase(6);\n        (uint256 price, bool feasible) = oracle.price(wooAddr);\n        assertEq(price, 23020000);\n        assertTrue(feasible);\n    }\n\n    function testCollisionWithRenounceOwnership() public {\n        bytes memory zip = _makeZipData({\n            op: 1,\n            length: 0x31,\n            leadingBytesOfBody: abi.encodePacked(hex"5018a6")\n        });\n        assertEq(oracle.owner(), address(this));\n        (bool success,) = address(oracle).call(zip);\n        assertEq(success, true);\n        assertEq(oracle.owner(), address(0));\n    }\n\n    function testCollisionWithSetStaleDuration() public {\n        bytes memory zip = _makeZipData({\n            op: 2,\n            length: 0x19,\n            leadingBytesOfBody: abi.encodePacked(hex"235fd4")\n        });\n        assertEq(oracle.staleDuration(), 120); // default: 2 mins\n        (bool success,) = address(oracle).call(zip);\n        assertEq(success, true);\n        uint256 expectedStaleDuration;\n        assembly {\n            expectedStaleDuration := mload(add(zip, 36))\n        }\n        assertEq(oracle.staleDuration(), expectedStaleDuration);\n        assertTrue(expectedStaleDuration!= 120);\n    }\n\n    function testCollisionWithPostPrice() public {\n        bytes memory addressAndPrice = abi.encode(address(0x1111), uint256(100\n```\n```\n2024-03-woofi-swap\WooPoolV2> forge test --match-contract WooracleZipBugTest -vv\n\n[⠢] Compiling\nNo files changed, compilation skipped\n[⠆] Compiling\n\nRunning 5 tests for test/foundry/WooracleZipBug.t.sol:WooracleZipBugTest\n[PASS] testCollisionWithPostPrice() (gas: 48643)\n[PASS] testCollisionWithRenounceOwnership() (gas: 21301)\n[PASS] testCollisionWithSetStaleDuration() (gas: 18289)\n[PASS] testCollisionWithSyncTS() (gas: 35302)\n[PASS] testNormalCase() (gas: 48027)\n\nTest result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.13ms\n\nRan 1 test suites: 5 tests passed, 0 failed, 0 skipped (5 total tests)\n```