**Description:** The `FjordAuction::unbid` function does not check for return values in `transferFrom` call, either way not all tokens return value here.
**Impact:** Transfer can fail but the mappings will be updated with the user ending without receiving the money.
```javascript
function unbid(uint256 amount) external {
if (block.timestamp > auctionEndTime) {
revert AuctionAlreadyEnded();
}
uint256 userBids = bids[msg.sender];
if (userBids == 0) {
revert NoBidsToWithdraw();
}
if (amount > userBids) {
revert InvalidUnbidAmount();
}
bids[msg.sender] = bids[msg.sender].sub(amount);
totalBids = totalBids.sub(amount);
@> fjordPoints.transfer(msg.sender, amount);
emit BidWithdrawn(msg.sender, amount);
}
```
**Recommended Mitigation:** Use the SafeERC20 library from openzeppelin
```diff
+ import {SafeERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol";
.
.
.
contract FjordAuction {
+ using SafeERC20 for ERC20;
.
.
.
function unbid(uint256 amount) external {
if (block.timestamp > auctionEndTime) {
revert AuctionAlreadyEnded();
}
uint256 userBids = bids[msg.sender];
if (userBids == 0) {
revert NoBidsToWithdraw();
}
if (amount > userBids) {
revert InvalidUnbidAmount();
}
bids[msg.sender] = bids[msg.sender].sub(amount);
totalBids = totalBids.sub(amount);
- fjordPoints.transfer(msg.sender, amount);
+ fjordPoints.safeTransfer(msg.sender, amount);
emit BidWithdrawn(msg.sender, amount);
}
}
```