There is an attempt to update the storage value of one of the elements from the offerInfoMap mapping, but memory is used instead of storage, rendering the update ineffective.
In the PreMarkets.listOffer() function, a copy of the struct is made to memory instead of directly using the storage value:
This leads to a situation where the origin offer in the Turbo market can be aborted, and part of its collateral can be retrieved by the Maker. As a result, all subsequent offers in that market will never be settled with Points tokens, leading to undercompensation.
Incorrect contract state.
Loss of funds for Takers in the Turbo market.
Manual review.
Use storage instead of memory for the originOfferInfo declaration.
Valid high severity, because the `abortOfferStatus` of the offer is not updated and persist through `storage` when listing an offer for turbo mode within the `offerInfoMap` mapping, it allows premature abortion given the `abortOfferStatus` defaults to `Initialized`, allowing the bypass of this [check](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L552-L557) here and allow complete refund of initial collateral + stealing of trade tax which can potentially be gamed for profits using multiple addresses
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.