Browse Source

Avoid safe math in BitMap (#2797)

Anton Bukov 4 years ago
parent
commit
3dadd40034
1 changed files with 6 additions and 6 deletions
  1. 6 6
      contracts/utils/structs/BitMaps.sol

+ 6 - 6
contracts/utils/structs/BitMaps.sol

@@ -14,8 +14,8 @@ library BitMaps {
      * @dev Returns whether the bit at `index` is set.
      * @dev Returns whether the bit at `index` is set.
      */
      */
     function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {
     function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {
-        uint256 bucket = index / 256;
-        uint256 mask = 1 << (index % 256);
+        uint256 bucket = index >> 8;
+        uint256 mask = 1 << (index & 0xff);
         return bitmap._data[bucket] & mask != 0;
         return bitmap._data[bucket] & mask != 0;
     }
     }
 
 
@@ -38,8 +38,8 @@ library BitMaps {
      * @dev Sets the bit at `index`.
      * @dev Sets the bit at `index`.
      */
      */
     function set(BitMap storage bitmap, uint256 index) internal {
     function set(BitMap storage bitmap, uint256 index) internal {
-        uint256 bucket = index / 256;
-        uint256 mask = 1 << (index % 256);
+        uint256 bucket = index >> 8;
+        uint256 mask = 1 << (index & 0xff);
         bitmap._data[bucket] |= mask;
         bitmap._data[bucket] |= mask;
     }
     }
 
 
@@ -47,8 +47,8 @@ library BitMaps {
      * @dev Unsets the bit at `index`.
      * @dev Unsets the bit at `index`.
      */
      */
     function unset(BitMap storage bitmap, uint256 index) internal {
     function unset(BitMap storage bitmap, uint256 index) internal {
-        uint256 bucket = index / 256;
-        uint256 mask = 1 << (index % 256);
+        uint256 bucket = index >> 8;
+        uint256 mask = 1 << (index & 0xff);
         bitmap._data[bucket] &= ~mask;
         bitmap._data[bucket] &= ~mask;
     }
     }
 }
 }