# Position value can fall below minimum acceptable quote value when partially closing positions requested to be closed in full

Symmetrical's closeQuote skips minAcceptableQuoteValue check when full close requested, letting partial fills leave dust positions below the minimum.

- Payout: Contest reward
- Severity: medium
- Program: Symmetrical
- Credited: panprog
- Disclosed: 2023-08-28
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-08-symmetrical-judging/issues/12
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-08-symmetrical%3AM-3
- Tags: domain:web3 impact:funds-loss kind:contest platform:sherlock sev:medium tech:solidity technique:incomplete-fix vuln:accounting-error vuln:business-logic

**Target:** LibQuote.closeQuote / fillCloseRequest in symmio-core
**Root cause:** The minAcceptableQuoteValue require is gated on quoteOpenAmount(quote) != quantityToClose, so a full-close request skips the check entirely; a partial fill then leaves a remainder below the minimum.
**Steps:**
1. Open LIMIT quote quantity=100, minAcceptableQuoteValue=5.
2. PartyA calls requestToClosePosition(quantityToClose=100) — check skipped since openAmount==quantityToClose.
3. PartyB calls fillCloseRequest(filledAmount=99).
4. Remaining open quote = 1, below minAcceptableQuoteValue, no revert.
**How found:** Prior audit issue 248 was fixed incorrectly; reviewer re-examined the require condition and noticed it compares openAmount to quantityToClose rather than filledAmount, so full-close requests bypass the check.
**Insight:** When auditing a fix for a prior finding, check the exact variable the guard compares against — here the guard should key on filledAmount, not requested quantity, so partial fills of full-close requests slip past.
