@snovon/solast 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +190 -0
- package/dist/api.d.ts +89 -0
- package/dist/api.js +33 -0
- package/dist/ast/resolve-return-names.d.ts +2 -0
- package/dist/ast/resolve-return-names.js +199 -0
- package/dist/ast/solc-walker.d.ts +17 -0
- package/dist/ast/solc-walker.js +497 -0
- package/dist/ast/storage-layout.d.ts +21 -0
- package/dist/ast/storage-layout.js +64 -0
- package/dist/cli.d.ts +65 -0
- package/dist/cli.js +755 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +284 -0
- package/dist/dedup/files.d.ts +1 -0
- package/dist/dedup/files.js +74 -0
- package/dist/dedup/findings.d.ts +41 -0
- package/dist/dedup/findings.js +211 -0
- package/dist/detectors/_common/access-control.d.ts +204 -0
- package/dist/detectors/_common/access-control.js +377 -0
- package/dist/detectors/_common/ast.d.ts +139 -0
- package/dist/detectors/_common/ast.js +239 -0
- package/dist/detectors/_common/compiler-profile.d.ts +14 -0
- package/dist/detectors/_common/compiler-profile.js +66 -0
- package/dist/detectors/_common/dataflow.d.ts +75 -0
- package/dist/detectors/_common/dataflow.js +57 -0
- package/dist/detectors/_common/fhe.d.ts +7 -0
- package/dist/detectors/_common/fhe.js +40 -0
- package/dist/detectors/_common/integer-overflow-helpers.d.ts +58 -0
- package/dist/detectors/_common/integer-overflow-helpers.js +422 -0
- package/dist/detectors/_common/loop-call-stack.d.ts +9 -0
- package/dist/detectors/_common/loop-call-stack.js +132 -0
- package/dist/detectors/_common/oracle.d.ts +5 -0
- package/dist/detectors/_common/oracle.js +64 -0
- package/dist/detectors/_common/price-rate.d.ts +116 -0
- package/dist/detectors/_common/price-rate.js +446 -0
- package/dist/detectors/_common/source-text.d.ts +11 -0
- package/dist/detectors/_common/source-text.js +82 -0
- package/dist/detectors/_common/weighted-pool-invariant.d.ts +21 -0
- package/dist/detectors/_common/weighted-pool-invariant.js +105 -0
- package/dist/detectors/aave-v2-reentrancy.d.ts +7 -0
- package/dist/detectors/aave-v2-reentrancy.js +286 -0
- package/dist/detectors/access-control.d.ts +103 -0
- package/dist/detectors/access-control.js +983 -0
- package/dist/detectors/add-reentrancy-on-weth-contract.d.ts +7 -0
- package/dist/detectors/add-reentrancy-on-weth-contract.js +536 -0
- package/dist/detectors/ai-generated-randomness.d.ts +32 -0
- package/dist/detectors/ai-generated-randomness.js +239 -0
- package/dist/detectors/amm-spot-oracle-manipulation.d.ts +52 -0
- package/dist/detectors/amm-spot-oracle-manipulation.js +420 -0
- package/dist/detectors/analyzing-the-uniswap-v3-exploit.d.ts +26 -0
- package/dist/detectors/analyzing-the-uniswap-v3-exploit.js +279 -0
- package/dist/detectors/any-token-is-destroyed.d.ts +34 -0
- package/dist/detectors/any-token-is-destroyed.js +527 -0
- package/dist/detectors/anyswap-anytoken-permit-allowance-drain.d.ts +7 -0
- package/dist/detectors/anyswap-anytoken-permit-allowance-drain.js +524 -0
- package/dist/detectors/anyswap-insufficient-token-validation.d.ts +24 -0
- package/dist/detectors/anyswap-insufficient-token-validation.js +342 -0
- package/dist/detectors/approval-based-drain.d.ts +7 -0
- package/dist/detectors/approval-based-drain.js +772 -0
- package/dist/detectors/arbitrary-account-balance-transfer.d.ts +7 -0
- package/dist/detectors/arbitrary-account-balance-transfer.js +485 -0
- package/dist/detectors/arbitrary-address-spoofing-attack.d.ts +7 -0
- package/dist/detectors/arbitrary-address-spoofing-attack.js +444 -0
- package/dist/detectors/arbitrary-address-spoofing.d.ts +9 -0
- package/dist/detectors/arbitrary-address-spoofing.js +657 -0
- package/dist/detectors/arbitrary-call-error.d.ts +127 -0
- package/dist/detectors/arbitrary-call-error.js +1163 -0
- package/dist/detectors/arbitrary-call.d.ts +4 -0
- package/dist/detectors/arbitrary-call.js +11 -0
- package/dist/detectors/arbitrary-delegatecall-target.d.ts +35 -0
- package/dist/detectors/arbitrary-delegatecall-target.js +554 -0
- package/dist/detectors/arbitrary-recipient-no-access-control.d.ts +7 -0
- package/dist/detectors/arbitrary-recipient-no-access-control.js +638 -0
- package/dist/detectors/arbitrary-storage-proof-forgery.d.ts +35 -0
- package/dist/detectors/arbitrary-storage-proof-forgery.js +340 -0
- package/dist/detectors/arbitrary-transfer-from.d.ts +38 -0
- package/dist/detectors/arbitrary-transfer-from.js +339 -0
- package/dist/detectors/arbitrum-cross-chain-message-replay.d.ts +22 -0
- package/dist/detectors/arbitrum-cross-chain-message-replay.js +477 -0
- package/dist/detectors/avs-slashing-without-quorum-check.d.ts +50 -0
- package/dist/detectors/avs-slashing-without-quorum-check.js +386 -0
- package/dist/detectors/bad-debt-propagation.d.ts +13 -0
- package/dist/detectors/bad-debt-propagation.js +480 -0
- package/dist/detectors/bad-k-value-verification.d.ts +7 -0
- package/dist/detectors/bad-k-value-verification.js +512 -0
- package/dist/detectors/bad-randomness-zero-blockhash.d.ts +29 -0
- package/dist/detectors/bad-randomness-zero-blockhash.js +115 -0
- package/dist/detectors/balancer-flash-loan-manipulation.d.ts +33 -0
- package/dist/detectors/balancer-flash-loan-manipulation.js +178 -0
- package/dist/detectors/balancer-pause-guard.d.ts +33 -0
- package/dist/detectors/balancer-pause-guard.js +307 -0
- package/dist/detectors/balancer-weighted-pool-flash-loan.d.ts +42 -0
- package/dist/detectors/balancer-weighted-pool-flash-loan.js +275 -0
- package/dist/detectors/batch-transfer-overflow.d.ts +7 -0
- package/dist/detectors/batch-transfer-overflow.js +465 -0
- package/dist/detectors/beneficiary-validation.d.ts +7 -0
- package/dist/detectors/beneficiary-validation.js +696 -0
- package/dist/detectors/borrow-behalf-consent.d.ts +7 -0
- package/dist/detectors/borrow-behalf-consent.js +400 -0
- package/dist/detectors/break-continue-scope.d.ts +7 -0
- package/dist/detectors/break-continue-scope.js +194 -0
- package/dist/detectors/bridge-accounting-bypass.d.ts +65 -0
- package/dist/detectors/bridge-accounting-bypass.js +449 -0
- package/dist/detectors/bridge-business-logic-flaw-incorrect-acc.d.ts +43 -0
- package/dist/detectors/bridge-business-logic-flaw-incorrect-acc.js +394 -0
- package/dist/detectors/bridge-collateral-drain.d.ts +7 -0
- package/dist/detectors/bridge-collateral-drain.js +630 -0
- package/dist/detectors/bridge-forged-proof.d.ts +7 -0
- package/dist/detectors/bridge-forged-proof.js +754 -0
- package/dist/detectors/bridge-missing-message-nonce.d.ts +57 -0
- package/dist/detectors/bridge-missing-message-nonce.js +638 -0
- package/dist/detectors/bridge-swap-metapool-attack.d.ts +20 -0
- package/dist/detectors/bridge-swap-metapool-attack.js +230 -0
- package/dist/detectors/business-logic-flaw-flashloan-price-mani.d.ts +7 -0
- package/dist/detectors/business-logic-flaw-flashloan-price-mani.js +353 -0
- package/dist/detectors/business-logic-flaw-incorrect-recipient-balance.d.ts +7 -0
- package/dist/detectors/business-logic-flaw-incorrect-recipient-balance.js +403 -0
- package/dist/detectors/business-logic-flaw.d.ts +21 -0
- package/dist/detectors/business-logic-flaw.js +339 -0
- package/dist/detectors/business-logic.d.ts +17 -0
- package/dist/detectors/business-logic.js +22 -0
- package/dist/detectors/bypassed-insolvency-check.d.ts +30 -0
- package/dist/detectors/bypassed-insolvency-check.js +232 -0
- package/dist/detectors/bytecode-divergence-risk.d.ts +32 -0
- package/dist/detectors/bytecode-divergence-risk.js +150 -0
- package/dist/detectors/cache-array-length.d.ts +30 -0
- package/dist/detectors/cache-array-length.js +177 -0
- package/dist/detectors/cache-storage-reads.d.ts +46 -0
- package/dist/detectors/cache-storage-reads.js +323 -0
- package/dist/detectors/calldata-secret-access-control.d.ts +36 -0
- package/dist/detectors/calldata-secret-access-control.js +446 -0
- package/dist/detectors/capital-cross-contract-reentrancy.d.ts +34 -0
- package/dist/detectors/capital-cross-contract-reentrancy.js +481 -0
- package/dist/detectors/cartel-custom-approval-logic.d.ts +7 -0
- package/dist/detectors/cartel-custom-approval-logic.js +407 -0
- package/dist/detectors/ccip-receiver-missing-replay-guard.d.ts +22 -0
- package/dist/detectors/ccip-receiver-missing-replay-guard.js +413 -0
- package/dist/detectors/chain-coupling-risk.d.ts +8 -0
- package/dist/detectors/chain-coupling-risk.js +203 -0
- package/dist/detectors/chainlink-deprecated-function.d.ts +7 -0
- package/dist/detectors/chainlink-deprecated-function.js +205 -0
- package/dist/detectors/chainlink-tx-origin.d.ts +7 -0
- package/dist/detectors/chainlink-tx-origin.js +363 -0
- package/dist/detectors/check-effects-interactions.d.ts +39 -0
- package/dist/detectors/check-effects-interactions.js +783 -0
- package/dist/detectors/check-permit-missing-chainid.d.ts +27 -0
- package/dist/detectors/check-permit-missing-chainid.js +456 -0
- package/dist/detectors/classic-reentrancy.d.ts +93 -0
- package/dist/detectors/classic-reentrancy.js +645 -0
- package/dist/detectors/coinbase-morpho-wethloan-policy.d.ts +29 -0
- package/dist/detectors/coinbase-morpho-wethloan-policy.js +368 -0
- package/dist/detectors/compoundv2-inflation-attack.d.ts +7 -0
- package/dist/detectors/compoundv2-inflation-attack.js +675 -0
- package/dist/detectors/constructor-address-validation.d.ts +24 -0
- package/dist/detectors/constructor-address-validation.js +335 -0
- package/dist/detectors/constructor-interface-no-address-validation.d.ts +32 -0
- package/dist/detectors/constructor-interface-no-address-validation.js +283 -0
- package/dist/detectors/cross-chain-arbitrary-call.d.ts +7 -0
- package/dist/detectors/cross-chain-arbitrary-call.js +601 -0
- package/dist/detectors/cross-chain-input-validation.d.ts +31 -0
- package/dist/detectors/cross-chain-input-validation.js +347 -0
- package/dist/detectors/cross-chain-intent-replay.d.ts +38 -0
- package/dist/detectors/cross-chain-intent-replay.js +453 -0
- package/dist/detectors/cross-chain-intent-stale-resolution.d.ts +7 -0
- package/dist/detectors/cross-chain-intent-stale-resolution.js +463 -0
- package/dist/detectors/cross-chain-message-order-dependency.d.ts +8 -0
- package/dist/detectors/cross-chain-message-order-dependency.js +472 -0
- package/dist/detectors/cross-chain-message-replay.d.ts +8 -0
- package/dist/detectors/cross-chain-message-replay.js +568 -0
- package/dist/detectors/cross-chain-messaging.d.ts +7 -0
- package/dist/detectors/cross-chain-messaging.js +663 -0
- package/dist/detectors/cross-chain-msg-truncation.d.ts +7 -0
- package/dist/detectors/cross-chain-msg-truncation.js +453 -0
- package/dist/detectors/cross-chain-truncation.d.ts +7 -0
- package/dist/detectors/cross-chain-truncation.js +422 -0
- package/dist/detectors/cross-contract-integer-overflow.d.ts +76 -0
- package/dist/detectors/cross-contract-integer-overflow.js +554 -0
- package/dist/detectors/cross-contract-reentrancy-trusted-callee.d.ts +39 -0
- package/dist/detectors/cross-contract-reentrancy-trusted-callee.js +385 -0
- package/dist/detectors/cross-contract-reentrancy.d.ts +63 -0
- package/dist/detectors/cross-contract-reentrancy.js +631 -0
- package/dist/detectors/cross-function-reentrancy.d.ts +37 -0
- package/dist/detectors/cross-function-reentrancy.js +648 -0
- package/dist/detectors/cross-protocol-contagion.d.ts +20 -0
- package/dist/detectors/cross-protocol-contagion.js +445 -0
- package/dist/detectors/cross-protocol-oracle-collateral.d.ts +38 -0
- package/dist/detectors/cross-protocol-oracle-collateral.js +487 -0
- package/dist/detectors/cross-vm-reentrancy.d.ts +7 -0
- package/dist/detectors/cross-vm-reentrancy.js +484 -0
- package/dist/detectors/decimals-mismatch.d.ts +89 -0
- package/dist/detectors/decimals-mismatch.js +451 -0
- package/dist/detectors/deferred-state-update.d.ts +16 -0
- package/dist/detectors/deferred-state-update.js +35 -0
- package/dist/detectors/deflationary-token.d.ts +27 -0
- package/dist/detectors/deflationary-token.js +751 -0
- package/dist/detectors/delegate-transfer-unrestricted-caller.d.ts +44 -0
- package/dist/detectors/delegate-transfer-unrestricted-caller.js +410 -0
- package/dist/detectors/delegatecall-fallback-reentrancy-bypass.d.ts +14 -0
- package/dist/detectors/delegatecall-fallback-reentrancy-bypass.js +241 -0
- package/dist/detectors/delegatecall-in-loops.d.ts +7 -0
- package/dist/detectors/delegatecall-in-loops.js +129 -0
- package/dist/detectors/delegatecall-init-owner-mutator.d.ts +8 -0
- package/dist/detectors/delegatecall-init-owner-mutator.js +655 -0
- package/dist/detectors/delegatecall-init.d.ts +7 -0
- package/dist/detectors/delegatecall-init.js +769 -0
- package/dist/detectors/delegatecall-untrusted-implementation.d.ts +41 -0
- package/dist/detectors/delegatecall-untrusted-implementation.js +888 -0
- package/dist/detectors/delegated-authorization-bypass.d.ts +7 -0
- package/dist/detectors/delegated-authorization-bypass.js +370 -0
- package/dist/detectors/denial-of-service.d.ts +117 -0
- package/dist/detectors/denial-of-service.js +947 -0
- package/dist/detectors/division-before-multiplication.d.ts +7 -0
- package/dist/detectors/division-before-multiplication.js +303 -0
- package/dist/detectors/dn404-mirror-access-control.d.ts +26 -0
- package/dist/detectors/dn404-mirror-access-control.js +315 -0
- package/dist/detectors/doge-flashloan.d.ts +29 -0
- package/dist/detectors/doge-flashloan.js +329 -0
- package/dist/detectors/donate-inflation-exchangerate-roundin.d.ts +7 -0
- package/dist/detectors/donate-inflation-exchangerate-roundin.js +621 -0
- package/dist/detectors/donation-share-inflation.d.ts +24 -0
- package/dist/detectors/donation-share-inflation.js +466 -0
- package/dist/detectors/dont-let-eth-get-rekt.d.ts +84 -0
- package/dist/detectors/dont-let-eth-get-rekt.js +1151 -0
- package/dist/detectors/dos-unbounded-loop-external-call-revert.d.ts +37 -0
- package/dist/detectors/dos-unbounded-loop-external-call-revert.js +541 -0
- package/dist/detectors/eip1167-proxy-reentrancy.d.ts +7 -0
- package/dist/detectors/eip1167-proxy-reentrancy.js +508 -0
- package/dist/detectors/eip4626-vault-reentrancy.d.ts +32 -0
- package/dist/detectors/eip4626-vault-reentrancy.js +312 -0
- package/dist/detectors/eip5792-auth-replay.d.ts +45 -0
- package/dist/detectors/eip5792-auth-replay.js +519 -0
- package/dist/detectors/eip712-domain-separator.d.ts +42 -0
- package/dist/detectors/eip712-domain-separator.js +524 -0
- package/dist/detectors/eip712-signature-verification.d.ts +49 -0
- package/dist/detectors/eip712-signature-verification.js +689 -0
- package/dist/detectors/eip7702-auth-replay.d.ts +7 -0
- package/dist/detectors/eip7702-auth-replay.js +768 -0
- package/dist/detectors/eip7702-cross-chain-replay.d.ts +27 -0
- package/dist/detectors/eip7702-cross-chain-replay.js +307 -0
- package/dist/detectors/eip7702-delegated-eoa-approval-race.d.ts +39 -0
- package/dist/detectors/eip7702-delegated-eoa-approval-race.js +413 -0
- package/dist/detectors/eip7702-delegation-reentrancy.d.ts +21 -0
- package/dist/detectors/eip7702-delegation-reentrancy.js +705 -0
- package/dist/detectors/eip7702-delegation-risk.d.ts +7 -0
- package/dist/detectors/eip7702-delegation-risk.js +745 -0
- package/dist/detectors/eip7702-eoa-assumption.d.ts +57 -0
- package/dist/detectors/eip7702-eoa-assumption.js +461 -0
- package/dist/detectors/erc1155-batch-missing-per-id-approval.d.ts +23 -0
- package/dist/detectors/erc1155-batch-missing-per-id-approval.js +343 -0
- package/dist/detectors/erc1155-reentrancy.d.ts +31 -0
- package/dist/detectors/erc1155-reentrancy.js +217 -0
- package/dist/detectors/erc1271-stub-implementation.d.ts +21 -0
- package/dist/detectors/erc1271-stub-implementation.js +268 -0
- package/dist/detectors/erc20-safe-wrapper-return-unchecked.d.ts +43 -0
- package/dist/detectors/erc20-safe-wrapper-return-unchecked.js +368 -0
- package/dist/detectors/erc20-unchecked-non-standard-return.d.ts +55 -0
- package/dist/detectors/erc20-unchecked-non-standard-return.js +454 -0
- package/dist/detectors/erc2612-permit-frontrunning.d.ts +23 -0
- package/dist/detectors/erc2612-permit-frontrunning.js +246 -0
- package/dist/detectors/erc2771-context-spoofing.d.ts +41 -0
- package/dist/detectors/erc2771-context-spoofing.js +510 -0
- package/dist/detectors/erc4337-validation-storage-access.d.ts +35 -0
- package/dist/detectors/erc4337-validation-storage-access.js +232 -0
- package/dist/detectors/erc4626-totalassets-stub.d.ts +17 -0
- package/dist/detectors/erc4626-totalassets-stub.js +216 -0
- package/dist/detectors/erc6909-balance-overflow.d.ts +7 -0
- package/dist/detectors/erc6909-balance-overflow.js +688 -0
- package/dist/detectors/erc6909-operator-scope.d.ts +49 -0
- package/dist/detectors/erc6909-operator-scope.js +494 -0
- package/dist/detectors/erc721-unchecked-transfer.d.ts +38 -0
- package/dist/detectors/erc721-unchecked-transfer.js +364 -0
- package/dist/detectors/erc7579-module-install-without-threshold.d.ts +40 -0
- package/dist/detectors/erc7579-module-install-without-threshold.js +338 -0
- package/dist/detectors/erc7683-fill-validation.d.ts +53 -0
- package/dist/detectors/erc7683-fill-validation.js +758 -0
- package/dist/detectors/erc7683-intent-resolution.d.ts +7 -0
- package/dist/detectors/erc7683-intent-resolution.js +457 -0
- package/dist/detectors/erc777-callback-reentrancy.d.ts +8 -0
- package/dist/detectors/erc777-callback-reentrancy.js +439 -0
- package/dist/detectors/erc777-reentrancy.d.ts +7 -0
- package/dist/detectors/erc777-reentrancy.js +488 -0
- package/dist/detectors/erc777-tokens-to-send-reentrancy.d.ts +47 -0
- package/dist/detectors/erc777-tokens-to-send-reentrancy.js +674 -0
- package/dist/detectors/estuary-token-flaw.d.ts +16 -0
- package/dist/detectors/estuary-token-flaw.js +547 -0
- package/dist/detectors/euler-debt-token-manipulation.d.ts +32 -0
- package/dist/detectors/euler-debt-token-manipulation.js +347 -0
- package/dist/detectors/exploiting-a-vulnerability-in-curve-fina.d.ts +29 -0
- package/dist/detectors/exploiting-a-vulnerability-in-curve-fina.js +210 -0
- package/dist/detectors/fallback-delegatecall-reentrancy.d.ts +14 -0
- package/dist/detectors/fallback-delegatecall-reentrancy.js +236 -0
- package/dist/detectors/farm-business-logic-flaw-lack-of-access.d.ts +7 -0
- package/dist/detectors/farm-business-logic-flaw-lack-of-access.js +665 -0
- package/dist/detectors/fee-mechanism-exploitation.d.ts +20 -0
- package/dist/detectors/fee-mechanism-exploitation.js +400 -0
- package/dist/detectors/fee-on-transfer-balance-mismatch.d.ts +49 -0
- package/dist/detectors/fee-on-transfer-balance-mismatch.js +394 -0
- package/dist/detectors/fhe-encrypted-input-validation.d.ts +29 -0
- package/dist/detectors/fhe-encrypted-input-validation.js +210 -0
- package/dist/detectors/fhe-handle-leakage.d.ts +44 -0
- package/dist/detectors/fhe-handle-leakage.js +315 -0
- package/dist/detectors/fhe-oz-pattern-misuse.d.ts +26 -0
- package/dist/detectors/fhe-oz-pattern-misuse.js +311 -0
- package/dist/detectors/fhe-state-leakage.d.ts +8 -0
- package/dist/detectors/fhe-state-leakage.js +400 -0
- package/dist/detectors/fi-bridges.d.ts +33 -0
- package/dist/detectors/fi-bridges.js +428 -0
- package/dist/detectors/finance-access-control-price-oracle-man.d.ts +9 -0
- package/dist/detectors/finance-access-control-price-oracle-man.js +640 -0
- package/dist/detectors/finance-bridge-address0safetransferfrom.d.ts +8 -0
- package/dist/detectors/finance-bridge-address0safetransferfrom.js +574 -0
- package/dist/detectors/finance-business-logic-in-mint.d.ts +54 -0
- package/dist/detectors/finance-business-logic-in-mint.js +687 -0
- package/dist/detectors/finance-erc667-reentrancy.d.ts +7 -0
- package/dist/detectors/finance-erc667-reentrancy.js +509 -0
- package/dist/detectors/finance-flashloan-price-oracle-manipul.d.ts +7 -0
- package/dist/detectors/finance-flashloan-price-oracle-manipul.js +546 -0
- package/dist/detectors/finance-flashloan-reentrancy.d.ts +7 -0
- package/dist/detectors/finance-flashloan-reentrancy.js +547 -0
- package/dist/detectors/finance-swap-metapool-attack.d.ts +19 -0
- package/dist/detectors/finance-swap-metapool-attack.js +321 -0
- package/dist/detectors/flashloan-price-manipulation.d.ts +7 -0
- package/dist/detectors/flashloan-price-manipulation.js +950 -0
- package/dist/detectors/flashloan-reentrancy-rari.d.ts +28 -0
- package/dist/detectors/flashloan-reentrancy-rari.js +577 -0
- package/dist/detectors/flashloan-reentrancy.d.ts +7 -0
- package/dist/detectors/flashloan-reentrancy.js +383 -0
- package/dist/detectors/flashloan-token-migrate.d.ts +7 -0
- package/dist/detectors/flashloan-token-migrate.js +274 -0
- package/dist/detectors/force-fed-eth-state-corruption.d.ts +32 -0
- package/dist/detectors/force-fed-eth-state-corruption.js +293 -0
- package/dist/detectors/free-mint-bug.d.ts +41 -0
- package/dist/detectors/free-mint-bug.js +483 -0
- package/dist/detectors/front-running-orderbook-state-update.d.ts +37 -0
- package/dist/detectors/front-running-orderbook-state-update.js +471 -0
- package/dist/detectors/front-running-shared-collateral-write.d.ts +41 -0
- package/dist/detectors/front-running-shared-collateral-write.js +508 -0
- package/dist/detectors/fusion-v1-settlement-arbitrary-yul-calld.d.ts +30 -0
- package/dist/detectors/fusion-v1-settlement-arbitrary-yul-calld.js +354 -0
- package/dist/detectors/generalized-frontrunning.d.ts +7 -0
- package/dist/detectors/generalized-frontrunning.js +836 -0
- package/dist/detectors/governance-flash-loan.d.ts +62 -0
- package/dist/detectors/governance-flash-loan.js +452 -0
- package/dist/detectors/governance-flashloan-vote.d.ts +41 -0
- package/dist/detectors/governance-flashloan-vote.js +272 -0
- package/dist/detectors/halborn-security-report-aave-v3.d.ts +6 -0
- package/dist/detectors/halborn-security-report-aave-v3.js +357 -0
- package/dist/detectors/incorrect-access-control.d.ts +26 -0
- package/dist/detectors/incorrect-access-control.js +328 -0
- package/dist/detectors/incorrect-burn-accounting.d.ts +10 -0
- package/dist/detectors/incorrect-burn-accounting.js +387 -0
- package/dist/detectors/incorrect-dividends-calculation.d.ts +27 -0
- package/dist/detectors/incorrect-dividends-calculation.js +524 -0
- package/dist/detectors/incorrect-dividends.d.ts +27 -0
- package/dist/detectors/incorrect-dividends.js +485 -0
- package/dist/detectors/incorrect-input-validation.d.ts +23 -0
- package/dist/detectors/incorrect-input-validation.js +312 -0
- package/dist/detectors/incorrect-signature-verification.d.ts +26 -0
- package/dist/detectors/incorrect-signature-verification.js +530 -0
- package/dist/detectors/infinite-loop.d.ts +7 -0
- package/dist/detectors/infinite-loop.js +440 -0
- package/dist/detectors/infinite-number-of-loans.d.ts +13 -0
- package/dist/detectors/infinite-number-of-loans.js +565 -0
- package/dist/detectors/inheritance-override.d.ts +26 -0
- package/dist/detectors/inheritance-override.js +320 -0
- package/dist/detectors/initialization-access-control.d.ts +8 -0
- package/dist/detectors/initialization-access-control.js +659 -0
- package/dist/detectors/insecure-randomness.d.ts +73 -0
- package/dist/detectors/insecure-randomness.js +610 -0
- package/dist/detectors/insufficient-access-control-trusted-param.d.ts +39 -0
- package/dist/detectors/insufficient-access-control-trusted-param.js +356 -0
- package/dist/detectors/insufficient-dvn-threshold.d.ts +32 -0
- package/dist/detectors/insufficient-dvn-threshold.js +585 -0
- package/dist/detectors/integer-overflow-detector.d.ts +45 -0
- package/dist/detectors/integer-overflow-detector.js +284 -0
- package/dist/detectors/integer-overflow.d.ts +95 -0
- package/dist/detectors/integer-overflow.js +344 -0
- package/dist/detectors/integer-underflow.d.ts +7 -0
- package/dist/detectors/integer-underflow.js +422 -0
- package/dist/detectors/intent-settlement-balance-manipulation.d.ts +22 -0
- package/dist/detectors/intent-settlement-balance-manipulation.js +548 -0
- package/dist/detectors/l1-to-l2-message-reentrancy.d.ts +7 -0
- package/dist/detectors/l1-to-l2-message-reentrancy.js +545 -0
- package/dist/detectors/l2-withdrawal-validation.d.ts +8 -0
- package/dist/detectors/l2-withdrawal-validation.js +303 -0
- package/dist/detectors/lack-of-access-control.d.ts +7 -0
- package/dist/detectors/lack-of-access-control.js +425 -0
- package/dist/detectors/lack-of-calldata-validation.d.ts +16 -0
- package/dist/detectors/lack-of-calldata-validation.js +914 -0
- package/dist/detectors/lack-of-input-validation-reentrancy.d.ts +7 -0
- package/dist/detectors/lack-of-input-validation-reentrancy.js +637 -0
- package/dist/detectors/lack-of-slippage-control.d.ts +7 -0
- package/dist/detectors/lack-of-slippage-control.js +513 -0
- package/dist/detectors/lack-of-slippage-protection.d.ts +7 -0
- package/dist/detectors/lack-of-slippage-protection.js +474 -0
- package/dist/detectors/lack-of-validation-data.d.ts +23 -0
- package/dist/detectors/lack-of-validation-data.js +391 -0
- package/dist/detectors/lack-of-validation-pool.d.ts +7 -0
- package/dist/detectors/lack-of-validation-pool.js +492 -0
- package/dist/detectors/lack-of-validation-userdata.d.ts +7 -0
- package/dist/detectors/lack-of-validation-userdata.js +583 -0
- package/dist/detectors/lack-of-validation.d.ts +27 -0
- package/dist/detectors/lack-of-validation.js +609 -0
- package/dist/detectors/layerzero-dvn-quorum-missing.d.ts +22 -0
- package/dist/detectors/layerzero-dvn-quorum-missing.js +464 -0
- package/dist/detectors/layerzero-v2-unverified-origin.d.ts +40 -0
- package/dist/detectors/layerzero-v2-unverified-origin.js +368 -0
- package/dist/detectors/liquidation-accounting-desync.d.ts +14 -0
- package/dist/detectors/liquidation-accounting-desync.js +145 -0
- package/dist/detectors/liquidation-gain-manipulation.d.ts +42 -0
- package/dist/detectors/liquidation-gain-manipulation.js +606 -0
- package/dist/detectors/liquidation-price-rounding-advantage.d.ts +26 -0
- package/dist/detectors/liquidation-price-rounding-advantage.js +283 -0
- package/dist/detectors/liquidity-poisoning.d.ts +25 -0
- package/dist/detectors/liquidity-poisoning.js +339 -0
- package/dist/detectors/loans-malicious-proposal-price-oracle.d.ts +44 -0
- package/dist/detectors/loans-malicious-proposal-price-oracle.js +813 -0
- package/dist/detectors/logic-flaw.d.ts +186 -0
- package/dist/detectors/logic-flaw.js +3356 -0
- package/dist/detectors/manipulation-of-funds.d.ts +31 -0
- package/dist/detectors/manipulation-of-funds.js +304 -0
- package/dist/detectors/merkl-unsafe-claim-callback.d.ts +22 -0
- package/dist/detectors/merkl-unsafe-claim-callback.js +94 -0
- package/dist/detectors/mev-boost-timestamp.d.ts +7 -0
- package/dist/detectors/mev-boost-timestamp.js +318 -0
- package/dist/detectors/mev-merge-exploit.d.ts +29 -0
- package/dist/detectors/mev-merge-exploit.js +397 -0
- package/dist/detectors/mev-sandwich-vulnerability.d.ts +24 -0
- package/dist/detectors/mev-sandwich-vulnerability.js +648 -0
- package/dist/detectors/mev-slot-manipulation.d.ts +36 -0
- package/dist/detectors/mev-slot-manipulation.js +691 -0
- package/dist/detectors/mevbot-insufficient-validation.d.ts +48 -0
- package/dist/detectors/mevbot-insufficient-validation.js +574 -0
- package/dist/detectors/migration-rebalance-without-bound.d.ts +7 -0
- package/dist/detectors/migration-rebalance-without-bound.js +514 -0
- package/dist/detectors/mint-hardcoded-asset-parity.d.ts +31 -0
- package/dist/detectors/mint-hardcoded-asset-parity.js +356 -0
- package/dist/detectors/miscalculation-on-spendallowance.d.ts +7 -0
- package/dist/detectors/miscalculation-on-spendallowance.js +188 -0
- package/dist/detectors/misconfiguration.d.ts +27 -0
- package/dist/detectors/misconfiguration.js +410 -0
- package/dist/detectors/missing-access-control-caller-supplied-auth.d.ts +7 -0
- package/dist/detectors/missing-access-control-caller-supplied-auth.js +550 -0
- package/dist/detectors/missing-access-control-receiver-payout.d.ts +7 -0
- package/dist/detectors/missing-access-control-receiver-payout.js +460 -0
- package/dist/detectors/missing-access-control-role-or-transferfrom.d.ts +7 -0
- package/dist/detectors/missing-access-control-role-or-transferfrom.js +663 -0
- package/dist/detectors/missing-access-control.d.ts +19 -0
- package/dist/detectors/missing-access-control.js +781 -0
- package/dist/detectors/missing-sequencer-uptime-check.d.ts +30 -0
- package/dist/detectors/missing-sequencer-uptime-check.js +348 -0
- package/dist/detectors/missing-storage-gap.d.ts +19 -0
- package/dist/detectors/missing-storage-gap.js +193 -0
- package/dist/detectors/missing-swap-deadline-slippage.d.ts +31 -0
- package/dist/detectors/missing-swap-deadline-slippage.js +231 -0
- package/dist/detectors/missing-zk-proof-verification.d.ts +60 -0
- package/dist/detectors/missing-zk-proof-verification.js +547 -0
- package/dist/detectors/my-experience-with-yearn-finance.d.ts +7 -0
- package/dist/detectors/my-experience-with-yearn-finance.js +552 -0
- package/dist/detectors/network-bridge-ronin.d.ts +7 -0
- package/dist/detectors/network-bridge-ronin.js +408 -0
- package/dist/detectors/network-bridge.d.ts +7 -0
- package/dist/detectors/network-bridge.js +444 -0
- package/dist/detectors/network-underflow.d.ts +7 -0
- package/dist/detectors/network-underflow.js +517 -0
- package/dist/detectors/nft-denial-of-service.d.ts +7 -0
- package/dist/detectors/nft-denial-of-service.js +223 -0
- package/dist/detectors/nft-marketplace-order-reentrancy.d.ts +7 -0
- package/dist/detectors/nft-marketplace-order-reentrancy.js +427 -0
- package/dist/detectors/nft-token-standard-access-control.d.ts +7 -0
- package/dist/detectors/nft-token-standard-access-control.js +455 -0
- package/dist/detectors/oracle-manipulation-amm-spot-price.d.ts +42 -0
- package/dist/detectors/oracle-manipulation-amm-spot-price.js +321 -0
- package/dist/detectors/oracle-manipulation-liquidity-withdrawal.d.ts +27 -0
- package/dist/detectors/oracle-manipulation-liquidity-withdrawal.js +192 -0
- package/dist/detectors/oracle-manipulation.d.ts +90 -0
- package/dist/detectors/oracle-manipulation.js +1023 -0
- package/dist/detectors/oracle-vortex-manipulation.d.ts +30 -0
- package/dist/detectors/oracle-vortex-manipulation.js +473 -0
- package/dist/detectors/overpriced-asset-in-oracle.d.ts +41 -0
- package/dist/detectors/overpriced-asset-in-oracle.js +420 -0
- package/dist/detectors/oz-access-control-roles.d.ts +33 -0
- package/dist/detectors/oz-access-control-roles.js +359 -0
- package/dist/detectors/pair-manipulation-transfer-hook.d.ts +38 -0
- package/dist/detectors/pair-manipulation-transfer-hook.js +366 -0
- package/dist/detectors/parameter-access-control.d.ts +47 -0
- package/dist/detectors/parameter-access-control.js +511 -0
- package/dist/detectors/parameter-manipulation.d.ts +7 -0
- package/dist/detectors/parameter-manipulation.js +505 -0
- package/dist/detectors/parity-multisig-delegatecall.d.ts +7 -0
- package/dist/detectors/parity-multisig-delegatecall.js +707 -0
- package/dist/detectors/permissionless-claim-amm-spot-pricing.d.ts +7 -0
- package/dist/detectors/permissionless-claim-amm-spot-pricing.js +351 -0
- package/dist/detectors/permit-future-dated-deadline.d.ts +31 -0
- package/dist/detectors/permit-future-dated-deadline.js +339 -0
- package/dist/detectors/phishing-attack-bybit.d.ts +37 -0
- package/dist/detectors/phishing-attack-bybit.js +513 -0
- package/dist/detectors/post-insolvency-check.d.ts +7 -0
- package/dist/detectors/post-insolvency-check.js +277 -0
- package/dist/detectors/precision-loss-vulnerability.d.ts +7 -0
- package/dist/detectors/precision-loss-vulnerability.js +472 -0
- package/dist/detectors/precision-truncation.d.ts +8 -0
- package/dist/detectors/precision-truncation.js +425 -0
- package/dist/detectors/price-dependency-veth.d.ts +41 -0
- package/dist/detectors/price-dependency-veth.js +588 -0
- package/dist/detectors/price-feed-verification.d.ts +7 -0
- package/dist/detectors/price-feed-verification.js +557 -0
- package/dist/detectors/price-manipulation-reentrancy.d.ts +32 -0
- package/dist/detectors/price-manipulation-reentrancy.js +445 -0
- package/dist/detectors/price-manipulation-via-reentranc.d.ts +7 -0
- package/dist/detectors/price-manipulation-via-reentranc.js +569 -0
- package/dist/detectors/price-oracle-manipulation.d.ts +25 -0
- package/dist/detectors/price-oracle-manipulation.js +530 -0
- package/dist/detectors/project-instant-rewards-unlocked.d.ts +6 -0
- package/dist/detectors/project-instant-rewards-unlocked.js +462 -0
- package/dist/detectors/protocol-reentrancy.d.ts +7 -0
- package/dist/detectors/protocol-reentrancy.js +457 -0
- package/dist/detectors/proxy-init-race.d.ts +11 -0
- package/dist/detectors/proxy-init-race.js +634 -0
- package/dist/detectors/proxy-storage-slot-collision.d.ts +7 -0
- package/dist/detectors/proxy-storage-slot-collision.js +135 -0
- package/dist/detectors/public-internal-function.d.ts +39 -0
- package/dist/detectors/public-internal-function.js +233 -0
- package/dist/detectors/quote-silent-zero.d.ts +25 -0
- package/dist/detectors/quote-silent-zero.js +156 -0
- package/dist/detectors/readonly-reentrancy.d.ts +9 -0
- package/dist/detectors/readonly-reentrancy.js +108 -0
- package/dist/detectors/receipt-redemption-missing-validation.d.ts +31 -0
- package/dist/detectors/receipt-redemption-missing-validation.js +453 -0
- package/dist/detectors/reentrancy-balance.d.ts +36 -0
- package/dist/detectors/reentrancy-balance.js +577 -0
- package/dist/detectors/reentrancy-business-logic-game.d.ts +36 -0
- package/dist/detectors/reentrancy-business-logic-game.js +616 -0
- package/dist/detectors/reentrancy-on-sell-nft.d.ts +23 -0
- package/dist/detectors/reentrancy-on-sell-nft.js +510 -0
- package/dist/detectors/reflection-token-balance-desync.d.ts +28 -0
- package/dist/detectors/reflection-token-balance-desync.js +246 -0
- package/dist/detectors/registry-engine.d.ts +34 -0
- package/dist/detectors/registry-engine.js +388 -0
- package/dist/detectors/rollup-unvalidated-state-update.d.ts +35 -0
- package/dist/detectors/rollup-unvalidated-state-update.js +286 -0
- package/dist/detectors/s-horizon-bridge-private-key-compromis.d.ts +8 -0
- package/dist/detectors/s-horizon-bridge-private-key-compromis.js +615 -0
- package/dist/detectors/share-price-manipulation.d.ts +7 -0
- package/dist/detectors/share-price-manipulation.js +653 -0
- package/dist/detectors/signature-replay.d.ts +30 -0
- package/dist/detectors/signature-replay.js +367 -0
- package/dist/detectors/simpleswap-unverified-approval.d.ts +27 -0
- package/dist/detectors/simpleswap-unverified-approval.js +198 -0
- package/dist/detectors/single-spot-oracle-collateral-valuation.d.ts +22 -0
- package/dist/detectors/single-spot-oracle-collateral-valuation.js +419 -0
- package/dist/detectors/skim-token-balance.d.ts +7 -0
- package/dist/detectors/skim-token-balance.js +788 -0
- package/dist/detectors/sky-oft-governance-payload.d.ts +7 -0
- package/dist/detectors/sky-oft-governance-payload.js +515 -0
- package/dist/detectors/sky-oft-governance-truncation.d.ts +32 -0
- package/dist/detectors/sky-oft-governance-truncation.js +377 -0
- package/dist/detectors/solana-evm-bridge-truncation.d.ts +7 -0
- package/dist/detectors/solana-evm-bridge-truncation.js +638 -0
- package/dist/detectors/solhint-unchecked-low-level-call.d.ts +74 -0
- package/dist/detectors/solhint-unchecked-low-level-call.js +463 -0
- package/dist/detectors/stablecoin-pair-spot-oracle.d.ts +7 -0
- package/dist/detectors/stablecoin-pair-spot-oracle.js +364 -0
- package/dist/detectors/staked-rate-as-oracle.d.ts +44 -0
- package/dist/detectors/staked-rate-as-oracle.js +497 -0
- package/dist/detectors/stale-oracle.d.ts +63 -0
- package/dist/detectors/stale-oracle.js +649 -0
- package/dist/detectors/starkware-proof-validation-gap.d.ts +18 -0
- package/dist/detectors/starkware-proof-validation-gap.js +629 -0
- package/dist/detectors/steth-transfer-reentrancy.d.ts +8 -0
- package/dist/detectors/steth-transfer-reentrancy.js +317 -0
- package/dist/detectors/storage-collision-malicious-proposal.d.ts +27 -0
- package/dist/detectors/storage-collision-malicious-proposal.js +386 -0
- package/dist/detectors/timestamp-manipulation.d.ts +49 -0
- package/dist/detectors/timestamp-manipulation.js +383 -0
- package/dist/detectors/token-access-control.d.ts +7 -0
- package/dist/detectors/token-access-control.js +544 -0
- package/dist/detectors/token-incorrect-signature-verification.d.ts +23 -0
- package/dist/detectors/token-incorrect-signature-verification.js +434 -0
- package/dist/detectors/token-transfer-logic-flaw.d.ts +33 -0
- package/dist/detectors/token-transfer-logic-flaw.js +267 -0
- package/dist/detectors/transfer-double-debit-pool-recipient.d.ts +7 -0
- package/dist/detectors/transfer-double-debit-pool-recipient.js +542 -0
- package/dist/detectors/treasury-reentrancy.d.ts +7 -0
- package/dist/detectors/treasury-reentrancy.js +442 -0
- package/dist/detectors/tstore-poison.d.ts +32 -0
- package/dist/detectors/tstore-poison.js +417 -0
- package/dist/detectors/tstore-race-condition.d.ts +7 -0
- package/dist/detectors/tstore-race-condition.js +632 -0
- package/dist/detectors/types.d.ts +85 -0
- package/dist/detectors/types.js +20 -0
- package/dist/detectors/unauthorized-payer-transferfrom.d.ts +66 -0
- package/dist/detectors/unauthorized-payer-transferfrom.js +339 -0
- package/dist/detectors/unauthorized-transferfrom-shell.d.ts +7 -0
- package/dist/detectors/unauthorized-transferfrom-shell.js +504 -0
- package/dist/detectors/unauthorized-transferfrom.d.ts +16 -0
- package/dist/detectors/unauthorized-transferfrom.js +838 -0
- package/dist/detectors/unbound-zk-verifier-input.d.ts +7 -0
- package/dist/detectors/unbound-zk-verifier-input.js +445 -0
- package/dist/detectors/unbounded-share-price-collateral-oracle.d.ts +48 -0
- package/dist/detectors/unbounded-share-price-collateral-oracle.js +566 -0
- package/dist/detectors/uncapped-reward-emission.d.ts +7 -0
- package/dist/detectors/uncapped-reward-emission.js +493 -0
- package/dist/detectors/unchecked-call-forwarding.d.ts +31 -0
- package/dist/detectors/unchecked-call-forwarding.js +330 -0
- package/dist/detectors/unchecked-external-call-unconditional-state-mutation.d.ts +18 -0
- package/dist/detectors/unchecked-external-call-unconditional-state-mutation.js +311 -0
- package/dist/detectors/unchecked-external-call.d.ts +66 -0
- package/dist/detectors/unchecked-external-call.js +389 -0
- package/dist/detectors/unchecked-oft-return.d.ts +13 -0
- package/dist/detectors/unchecked-oft-return.js +118 -0
- package/dist/detectors/unguarded-governance-execution.d.ts +35 -0
- package/dist/detectors/unguarded-governance-execution.js +422 -0
- package/dist/detectors/unguarded-governance-executor.d.ts +35 -0
- package/dist/detectors/unguarded-governance-executor.js +349 -0
- package/dist/detectors/unindexed-event-address.d.ts +7 -0
- package/dist/detectors/unindexed-event-address.js +268 -0
- package/dist/detectors/uninitialized-implementation.d.ts +27 -0
- package/dist/detectors/uninitialized-implementation.js +333 -0
- package/dist/detectors/uninitialized-storage-pointer.d.ts +7 -0
- package/dist/detectors/uninitialized-storage-pointer.js +110 -0
- package/dist/detectors/uniswap-skim-token-balance-attack.d.ts +8 -0
- package/dist/detectors/uniswap-skim-token-balance-attack.js +331 -0
- package/dist/detectors/uniswap-v4-hook-state-manipulation.d.ts +7 -0
- package/dist/detectors/uniswap-v4-hook-state-manipulation.js +296 -0
- package/dist/detectors/unprotected-admin-or-fund-sink.d.ts +7 -0
- package/dist/detectors/unprotected-admin-or-fund-sink.js +643 -0
- package/dist/detectors/unprotected-dex-swap.d.ts +43 -0
- package/dist/detectors/unprotected-dex-swap.js +334 -0
- package/dist/detectors/unprotected-initializer.d.ts +7 -0
- package/dist/detectors/unprotected-initializer.js +707 -0
- package/dist/detectors/unprotected-pair-initializer.d.ts +22 -0
- package/dist/detectors/unprotected-pair-initializer.js +359 -0
- package/dist/detectors/unprotected-upgrade-function.d.ts +7 -0
- package/dist/detectors/unprotected-upgrade-function.js +180 -0
- package/dist/detectors/unreachable-code-0.8.28.d.ts +19 -0
- package/dist/detectors/unreachable-code-0.8.28.js +206 -0
- package/dist/detectors/unsafe-proxy-storage.d.ts +7 -0
- package/dist/detectors/unsafe-proxy-storage.js +436 -0
- package/dist/detectors/unsafe-transient-storage.d.ts +7 -0
- package/dist/detectors/unsafe-transient-storage.js +1052 -0
- package/dist/detectors/unsafe-tx-origin.d.ts +9 -0
- package/dist/detectors/unsafe-tx-origin.js +179 -0
- package/dist/detectors/unsigned-validity-window.d.ts +20 -0
- package/dist/detectors/unsigned-validity-window.js +220 -0
- package/dist/detectors/unvalidated-interface-address.d.ts +25 -0
- package/dist/detectors/unvalidated-interface-address.js +377 -0
- package/dist/detectors/uups-uninitialized-storage.d.ts +9 -0
- package/dist/detectors/uups-uninitialized-storage.js +366 -0
- package/dist/detectors/v2-error-k-value-attack.d.ts +33 -0
- package/dist/detectors/v2-error-k-value-attack.js +276 -0
- package/dist/detectors/v2-k-invariant-bypass.d.ts +33 -0
- package/dist/detectors/v2-k-invariant-bypass.js +283 -0
- package/dist/detectors/v4-hook-reentrancy.d.ts +9 -0
- package/dist/detectors/v4-hook-reentrancy.js +488 -0
- package/dist/detectors/vault-inflation-rounding.d.ts +23 -0
- package/dist/detectors/vault-inflation-rounding.js +477 -0
- package/dist/detectors/vault-share-price-manipulation.d.ts +7 -0
- package/dist/detectors/vault-share-price-manipulation.js +332 -0
- package/dist/detectors/vortex-interaction-guard.d.ts +45 -0
- package/dist/detectors/vortex-interaction-guard.js +275 -0
- package/dist/detectors/vortex-protocol-reentrancy-guard.d.ts +27 -0
- package/dist/detectors/vortex-protocol-reentrancy-guard.js +408 -0
- package/dist/detectors/vulnerable-price-dependency.d.ts +41 -0
- package/dist/detectors/vulnerable-price-dependency.js +473 -0
- package/dist/detectors/weak-random-mint.d.ts +37 -0
- package/dist/detectors/weak-random-mint.js +271 -0
- package/dist/detectors/withdraw-be-to-withdraw.d.ts +26 -0
- package/dist/detectors/withdraw-be-to-withdraw.js +329 -0
- package/dist/detectors/wrong-function-visibility.d.ts +29 -0
- package/dist/detectors/wrong-function-visibility.js +147 -0
- package/dist/detectors/wrong-price-calculation.d.ts +42 -0
- package/dist/detectors/wrong-price-calculation.js +387 -0
- package/dist/detectors/yearn-vault-v2-share-price-manipulation.d.ts +32 -0
- package/dist/detectors/yearn-vault-v2-share-price-manipulation.js +248 -0
- package/dist/detectors/zero-fee.d.ts +7 -0
- package/dist/detectors/zero-fee.js +596 -0
- package/dist/detectors/zetachain-gateway-hack-analysis.d.ts +7 -0
- package/dist/detectors/zetachain-gateway-hack-analysis.js +629 -0
- package/dist/detectors/zk-rollup-da-gap.d.ts +8 -0
- package/dist/detectors/zk-rollup-da-gap.js +322 -0
- package/dist/detectors/zksync-batch-validation.d.ts +8 -0
- package/dist/detectors/zksync-batch-validation.js +461 -0
- package/dist/detectors/zksync-era-rollup-state-update.d.ts +60 -0
- package/dist/detectors/zksync-era-rollup-state-update.js +360 -0
- package/dist/detectors/zksync-simulation-drift.d.ts +35 -0
- package/dist/detectors/zksync-simulation-drift.js +309 -0
- package/dist/exit-codes.d.ts +15 -0
- package/dist/exit-codes.js +18 -0
- package/dist/formatters/github-actions.d.ts +2 -0
- package/dist/formatters/github-actions.js +61 -0
- package/dist/formatters/sarif.d.ts +24 -0
- package/dist/formatters/sarif.js +670 -0
- package/dist/formatters/text.d.ts +14 -0
- package/dist/formatters/text.js +152 -0
- package/dist/fp-rates.json +70 -0
- package/dist/identity/diff-baseline.d.ts +16 -0
- package/dist/identity/diff-baseline.js +152 -0
- package/dist/identity/hashing.d.ts +39 -0
- package/dist/identity/hashing.js +96 -0
- package/dist/index.d.ts +174 -0
- package/dist/index.js +358 -0
- package/dist/parallel-scan.d.ts +66 -0
- package/dist/parallel-scan.js +227 -0
- package/dist/registry.d.ts +17 -0
- package/dist/registry.js +118 -0
- package/dist/rules/glob.d.ts +5 -0
- package/dist/rules/glob.js +76 -0
- package/dist/rules/suppressions.d.ts +23 -0
- package/dist/rules/suppressions.js +136 -0
- package/dist/rules/tiers.d.ts +23 -0
- package/dist/rules/tiers.js +341 -0
- package/dist/scan-worker.d.ts +1 -0
- package/dist/scan-worker.js +61 -0
- package/dist/scan.d.ts +24 -0
- package/dist/scan.js +558 -0
- package/dist/semantic/contracts.d.ts +10 -0
- package/dist/semantic/contracts.js +141 -0
- package/dist/semantic/diagnostics.d.ts +29 -0
- package/dist/semantic/diagnostics.js +25 -0
- package/dist/semantic/eog.d.ts +56 -0
- package/dist/semantic/eog.js +545 -0
- package/dist/semantic/imports.d.ts +88 -0
- package/dist/semantic/imports.js +246 -0
- package/dist/semantic/index.d.ts +2 -0
- package/dist/semantic/index.js +8 -0
- package/dist/semantic/inheritance.d.ts +33 -0
- package/dist/semantic/inheritance.js +137 -0
- package/dist/semantic/model.d.ts +95 -0
- package/dist/semantic/model.js +232 -0
- package/dist/semantic/taint-tracker.d.ts +49 -0
- package/dist/semantic/taint-tracker.js +410 -0
- package/dist/semantic/types.d.ts +119 -0
- package/dist/semantic/types.js +18 -0
- package/dist/severity.d.ts +10 -0
- package/dist/severity.js +78 -0
- package/package.json +52 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared AST helpers for SolAST detectors.
|
|
3
|
+
*
|
|
4
|
+
* The detector layer has accumulated dozens of identical copies of the same
|
|
5
|
+
* tiny helpers (`isNode`, `getName`, `buildLineOffsets`, etc.) and the same
|
|
6
|
+
* literal sets (the access-control modifier list). This module exists so that
|
|
7
|
+
* new and migrated detectors can import a single canonical implementation
|
|
8
|
+
* instead of redefining their own. Behavior of each helper here is the
|
|
9
|
+
* common-case implementation that already shipped across the detector files
|
|
10
|
+
* — adopting this module preserves observable behavior.
|
|
11
|
+
*
|
|
12
|
+
* Two notes for migration:
|
|
13
|
+
* - `ACCESS_CONTROL_MODIFIERS` uses lower-case keys. Callers must normalize
|
|
14
|
+
* before lookup. This matches the most-replicated form across detectors.
|
|
15
|
+
* - `byteOffsetToLineColumn` is binary-search-based; some older detector
|
|
16
|
+
* copies use a linear scan. Outputs are identical for all valid inputs.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Test whether `node` carries the given AST node type. Accepts both the
|
|
20
|
+
* `@solidity-parser/parser` shape (`type` field) and the solc compact JSON
|
|
21
|
+
* shape (`nodeType` field) so detectors written against either AST produce
|
|
22
|
+
* the same predicate.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isNode(node: any, kind: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Best-effort name extractor for AST nodes. Most detectors that ask "what is
|
|
27
|
+
* this node called?" only care about the literal `name` string. The fuller
|
|
28
|
+
* variant (`getCallName`) is for chained member-access expressions and lives
|
|
29
|
+
* with the access-control logic in `src/index.ts`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getName(node: any): string;
|
|
32
|
+
/**
|
|
33
|
+
* Set of guard modifier names recognized as proof of access control.
|
|
34
|
+
*
|
|
35
|
+
* Stored lower-case because the duplicated copies across detectors all
|
|
36
|
+
* compare with `.toLowerCase()`. Callers must lower-case the modifier name
|
|
37
|
+
* before lookup.
|
|
38
|
+
*
|
|
39
|
+
* NOTE: this is intentionally narrower than the per-detector regex
|
|
40
|
+
* `/owner|admin|role|.../` patterns some detectors use, which over-match.
|
|
41
|
+
* If you need that fuzzier surface, do it explicitly in the detector — don't
|
|
42
|
+
* widen this set silently.
|
|
43
|
+
*/
|
|
44
|
+
export declare const ACCESS_CONTROL_MODIFIERS: ReadonlySet<string>;
|
|
45
|
+
export declare function isAccessControlModifierName(name: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Build a `[lineStart, ...]` byte-offset table for a Solidity source text.
|
|
48
|
+
* Returns undefined when `sourceText` is undefined so callers can
|
|
49
|
+
* conditionally short-circuit. Identical in behavior to the shape duplicated
|
|
50
|
+
* across many detectors.
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildLineOffsets(sourceText?: string): number[] | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a UTF-8 byte offset back to (line, column). Lines are 1-indexed,
|
|
55
|
+
* columns are 0-indexed (matching `@solidity-parser/parser` conventions).
|
|
56
|
+
* Binary search keeps this O(log lines) per lookup; that matters because
|
|
57
|
+
* solc compact JSON gives every node a `src` offset, so the conversion is
|
|
58
|
+
* called once per visited node.
|
|
59
|
+
*/
|
|
60
|
+
export declare function byteOffsetToLineColumn(byteOffset: number, lineOffsets: number[]): {
|
|
61
|
+
line: number;
|
|
62
|
+
column: number;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Structured source location for emitting findings. The `line` and `endLine`
|
|
66
|
+
* fields are 1-based (matching `@solidity-parser/parser`'s convention).
|
|
67
|
+
*/
|
|
68
|
+
export interface LocInfo {
|
|
69
|
+
line: number;
|
|
70
|
+
endLine: number;
|
|
71
|
+
column: number;
|
|
72
|
+
endColumn: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Return the most specific available source location from `node`. If `node`
|
|
76
|
+
* has no usable `loc.start.line`, fall back to `fallbackNode`'s loc. Throws
|
|
77
|
+
* if neither node carries usable location data — this surfaces malformed
|
|
78
|
+
* AST input immediately rather than silently emitting `line: 0`, which the
|
|
79
|
+
* 0.3 conformance gate fails on (review G.7, roadmap 2.14).
|
|
80
|
+
*
|
|
81
|
+
* Callers should pass the most specific available node first (typically the
|
|
82
|
+
* node the finding describes) and the enclosing function or contract as the
|
|
83
|
+
* fallback (always has `loc` unless the AST is entirely malformed):
|
|
84
|
+
*
|
|
85
|
+
* const { line, endLine, column } = assertLoc(violationNode, this.currentFunctionNode);
|
|
86
|
+
*
|
|
87
|
+
* The single-arg form is for sites where the caller has already established
|
|
88
|
+
* that `node` has loc — but in those cases the explicit fallback is cheap
|
|
89
|
+
* and worth supplying for defence-in-depth.
|
|
90
|
+
*/
|
|
91
|
+
export declare function assertLoc(node: any, fallbackNode?: any): LocInfo;
|
|
92
|
+
/**
|
|
93
|
+
* Non-throwing variant of `assertLoc`. Returns the most specific available
|
|
94
|
+
* source location from `node`, falling back to `fallbackNode`, or `null`
|
|
95
|
+
* when neither carries usable location data.
|
|
96
|
+
*
|
|
97
|
+
* Use cases that legitimately need `null` rather than a throw:
|
|
98
|
+
*
|
|
99
|
+
* - **Synthetic AST nodes constructed inside a detector** for
|
|
100
|
+
* deduplication or summary purposes (e.g. `arbitrary-account-balance-transfer.ts`'s
|
|
101
|
+
* mutation/primitive nodes assembled from sub-trees). The synthetic
|
|
102
|
+
* node is not a real AST node, has no `loc`, and surfacing that as
|
|
103
|
+
* a scan crash would be wrong.
|
|
104
|
+
* - **Dedup-key hash components** (e.g. `cross-chain-arbitrary-call.ts`'s
|
|
105
|
+
* `fnStartLine` in an instance key). The value is hashed, not emitted
|
|
106
|
+
* in a finding; producing a less-unique key is a graceful degradation.
|
|
107
|
+
*
|
|
108
|
+
* `assertLoc` is still the right choice when emitting a finding from a
|
|
109
|
+
* real AST node — silent `line: 0` emissions are the bug class roadmap
|
|
110
|
+
* 2.14 eliminates. `tryLoc` is the explicit escape hatch for the
|
|
111
|
+
* legitimate cases above.
|
|
112
|
+
*/
|
|
113
|
+
export declare function tryLoc(node: any, fallbackNode?: any): LocInfo | null;
|
|
114
|
+
/**
|
|
115
|
+
* Resolve a node's source location across both AST shapes — parser-style
|
|
116
|
+
* (`node.loc.start`) and solc compact JSON (`node.src` byte offset).
|
|
117
|
+
*
|
|
118
|
+
* Returns `LocInfo | null` mirroring `tryLoc`. Use this when a detector
|
|
119
|
+
* declares `supportedAstKinds: ['parser', 'solc']` and a single helper
|
|
120
|
+
* needs to extract location data from whichever shape the AST node
|
|
121
|
+
* carries. Sibling detectors today duplicate this exact body ~80 times
|
|
122
|
+
* as a local `getLoc(node, lineOffsets?)` helper — adopting this shared
|
|
123
|
+
* version drops the duplication and standardises the null-on-missing
|
|
124
|
+
* semantics (some local copies return `undefined`, others return `null`).
|
|
125
|
+
*
|
|
126
|
+
* Behaviour matches the local copies' fast/slow path:
|
|
127
|
+
* - Fast path: `node.loc.start.line >= 1` → returns the full LocInfo
|
|
128
|
+
* (line, endLine, column, endColumn from `node.loc`).
|
|
129
|
+
* - Slow path: `node.src` byte offset + `lineOffsets` → returns a
|
|
130
|
+
* LocInfo with `endLine === line` and `endColumn === column` since
|
|
131
|
+
* the solc compact JSON `src` field is the START offset only.
|
|
132
|
+
* - Both unavailable → null. Callers that need a hard floor should
|
|
133
|
+
* `?? { line: 0, column: 0, endLine: 0, endColumn: 0 }`.
|
|
134
|
+
*
|
|
135
|
+
* `lineOffsets` is required only for the slow path — call sites that
|
|
136
|
+
* never produce solc-AST input can pass `undefined`. The slow path is
|
|
137
|
+
* skipped entirely when `lineOffsets` is missing.
|
|
138
|
+
*/
|
|
139
|
+
export declare function getLoc(node: any, lineOffsets?: number[]): LocInfo | null;
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared AST helpers for SolAST detectors.
|
|
4
|
+
*
|
|
5
|
+
* The detector layer has accumulated dozens of identical copies of the same
|
|
6
|
+
* tiny helpers (`isNode`, `getName`, `buildLineOffsets`, etc.) and the same
|
|
7
|
+
* literal sets (the access-control modifier list). This module exists so that
|
|
8
|
+
* new and migrated detectors can import a single canonical implementation
|
|
9
|
+
* instead of redefining their own. Behavior of each helper here is the
|
|
10
|
+
* common-case implementation that already shipped across the detector files
|
|
11
|
+
* — adopting this module preserves observable behavior.
|
|
12
|
+
*
|
|
13
|
+
* Two notes for migration:
|
|
14
|
+
* - `ACCESS_CONTROL_MODIFIERS` uses lower-case keys. Callers must normalize
|
|
15
|
+
* before lookup. This matches the most-replicated form across detectors.
|
|
16
|
+
* - `byteOffsetToLineColumn` is binary-search-based; some older detector
|
|
17
|
+
* copies use a linear scan. Outputs are identical for all valid inputs.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.ACCESS_CONTROL_MODIFIERS = void 0;
|
|
21
|
+
exports.isNode = isNode;
|
|
22
|
+
exports.getName = getName;
|
|
23
|
+
exports.isAccessControlModifierName = isAccessControlModifierName;
|
|
24
|
+
exports.buildLineOffsets = buildLineOffsets;
|
|
25
|
+
exports.byteOffsetToLineColumn = byteOffsetToLineColumn;
|
|
26
|
+
exports.assertLoc = assertLoc;
|
|
27
|
+
exports.tryLoc = tryLoc;
|
|
28
|
+
exports.getLoc = getLoc;
|
|
29
|
+
/**
|
|
30
|
+
* Test whether `node` carries the given AST node type. Accepts both the
|
|
31
|
+
* `@solidity-parser/parser` shape (`type` field) and the solc compact JSON
|
|
32
|
+
* shape (`nodeType` field) so detectors written against either AST produce
|
|
33
|
+
* the same predicate.
|
|
34
|
+
*/
|
|
35
|
+
function isNode(node, kind) {
|
|
36
|
+
return node?.type === kind || node?.nodeType === kind;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Best-effort name extractor for AST nodes. Most detectors that ask "what is
|
|
40
|
+
* this node called?" only care about the literal `name` string. The fuller
|
|
41
|
+
* variant (`getCallName`) is for chained member-access expressions and lives
|
|
42
|
+
* with the access-control logic in `src/index.ts`.
|
|
43
|
+
*/
|
|
44
|
+
function getName(node) {
|
|
45
|
+
return typeof node?.name === 'string' ? node.name : '';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Set of guard modifier names recognized as proof of access control.
|
|
49
|
+
*
|
|
50
|
+
* Stored lower-case because the duplicated copies across detectors all
|
|
51
|
+
* compare with `.toLowerCase()`. Callers must lower-case the modifier name
|
|
52
|
+
* before lookup.
|
|
53
|
+
*
|
|
54
|
+
* NOTE: this is intentionally narrower than the per-detector regex
|
|
55
|
+
* `/owner|admin|role|.../` patterns some detectors use, which over-match.
|
|
56
|
+
* If you need that fuzzier surface, do it explicitly in the detector — don't
|
|
57
|
+
* widen this set silently.
|
|
58
|
+
*/
|
|
59
|
+
exports.ACCESS_CONTROL_MODIFIERS = new Set([
|
|
60
|
+
'onlyowner',
|
|
61
|
+
'onlyowners',
|
|
62
|
+
'onlyrole',
|
|
63
|
+
'onlyadmin',
|
|
64
|
+
'onlyauthorized',
|
|
65
|
+
'onlyoperator',
|
|
66
|
+
'onlyoperators',
|
|
67
|
+
'onlygovernance',
|
|
68
|
+
'onlygovernor',
|
|
69
|
+
'onlyguardian',
|
|
70
|
+
'onlymanager',
|
|
71
|
+
]);
|
|
72
|
+
function isAccessControlModifierName(name) {
|
|
73
|
+
return exports.ACCESS_CONTROL_MODIFIERS.has(name.toLowerCase());
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build a `[lineStart, ...]` byte-offset table for a Solidity source text.
|
|
77
|
+
* Returns undefined when `sourceText` is undefined so callers can
|
|
78
|
+
* conditionally short-circuit. Identical in behavior to the shape duplicated
|
|
79
|
+
* across many detectors.
|
|
80
|
+
*/
|
|
81
|
+
function buildLineOffsets(sourceText) {
|
|
82
|
+
if (sourceText === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
const lineOffsets = [0];
|
|
85
|
+
let byteOffset = 0;
|
|
86
|
+
for (const char of sourceText) {
|
|
87
|
+
byteOffset += Buffer.byteLength(char, 'utf8');
|
|
88
|
+
if (char === '\n')
|
|
89
|
+
lineOffsets.push(byteOffset);
|
|
90
|
+
}
|
|
91
|
+
return lineOffsets;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve a UTF-8 byte offset back to (line, column). Lines are 1-indexed,
|
|
95
|
+
* columns are 0-indexed (matching `@solidity-parser/parser` conventions).
|
|
96
|
+
* Binary search keeps this O(log lines) per lookup; that matters because
|
|
97
|
+
* solc compact JSON gives every node a `src` offset, so the conversion is
|
|
98
|
+
* called once per visited node.
|
|
99
|
+
*/
|
|
100
|
+
function byteOffsetToLineColumn(byteOffset, lineOffsets) {
|
|
101
|
+
let low = 0;
|
|
102
|
+
let high = lineOffsets.length - 1;
|
|
103
|
+
let lineIndex = 0;
|
|
104
|
+
while (low <= high) {
|
|
105
|
+
const mid = Math.floor((low + high) / 2);
|
|
106
|
+
if (lineOffsets[mid] <= byteOffset) {
|
|
107
|
+
lineIndex = mid;
|
|
108
|
+
low = mid + 1;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
high = mid - 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { line: lineIndex + 1, column: byteOffset - lineOffsets[lineIndex] };
|
|
115
|
+
}
|
|
116
|
+
function tryExtractLoc(node) {
|
|
117
|
+
if (!node || typeof node !== 'object')
|
|
118
|
+
return null;
|
|
119
|
+
const startLine = node.loc?.start?.line;
|
|
120
|
+
if (typeof startLine !== 'number' || startLine <= 0)
|
|
121
|
+
return null;
|
|
122
|
+
const endLine = typeof node.loc?.end?.line === 'number' && node.loc.end.line > 0
|
|
123
|
+
? node.loc.end.line
|
|
124
|
+
: startLine;
|
|
125
|
+
const column = typeof node.loc?.start?.column === 'number' && node.loc.start.column >= 0
|
|
126
|
+
? node.loc.start.column
|
|
127
|
+
: 0;
|
|
128
|
+
// endColumn falls back to startColumn when end is missing or invalid —
|
|
129
|
+
// mirrors the endLine→startLine fallback above and matches the inline
|
|
130
|
+
// `<node>.loc?.end?.column || <startColumn>` pattern the f-stream is
|
|
131
|
+
// draining (roadmap 2.14.f).
|
|
132
|
+
const endColumn = typeof node.loc?.end?.column === 'number' && node.loc.end.column >= 0
|
|
133
|
+
? node.loc.end.column
|
|
134
|
+
: column;
|
|
135
|
+
return { line: startLine, endLine, column, endColumn };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Return the most specific available source location from `node`. If `node`
|
|
139
|
+
* has no usable `loc.start.line`, fall back to `fallbackNode`'s loc. Throws
|
|
140
|
+
* if neither node carries usable location data — this surfaces malformed
|
|
141
|
+
* AST input immediately rather than silently emitting `line: 0`, which the
|
|
142
|
+
* 0.3 conformance gate fails on (review G.7, roadmap 2.14).
|
|
143
|
+
*
|
|
144
|
+
* Callers should pass the most specific available node first (typically the
|
|
145
|
+
* node the finding describes) and the enclosing function or contract as the
|
|
146
|
+
* fallback (always has `loc` unless the AST is entirely malformed):
|
|
147
|
+
*
|
|
148
|
+
* const { line, endLine, column } = assertLoc(violationNode, this.currentFunctionNode);
|
|
149
|
+
*
|
|
150
|
+
* The single-arg form is for sites where the caller has already established
|
|
151
|
+
* that `node` has loc — but in those cases the explicit fallback is cheap
|
|
152
|
+
* and worth supplying for defence-in-depth.
|
|
153
|
+
*/
|
|
154
|
+
function assertLoc(node, fallbackNode) {
|
|
155
|
+
const primary = tryExtractLoc(node);
|
|
156
|
+
if (primary)
|
|
157
|
+
return primary;
|
|
158
|
+
if (fallbackNode !== undefined) {
|
|
159
|
+
const fb = tryExtractLoc(fallbackNode);
|
|
160
|
+
if (fb)
|
|
161
|
+
return fb;
|
|
162
|
+
}
|
|
163
|
+
const nodeKind = node?.type ?? node?.nodeType ?? 'unknown';
|
|
164
|
+
const fallbackHint = fallbackNode !== undefined ? ' and fallback node has no usable loc either' : '';
|
|
165
|
+
throw new Error(`assertLoc: node has no usable loc.start.line (node kind ${nodeKind})${fallbackHint}`);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Non-throwing variant of `assertLoc`. Returns the most specific available
|
|
169
|
+
* source location from `node`, falling back to `fallbackNode`, or `null`
|
|
170
|
+
* when neither carries usable location data.
|
|
171
|
+
*
|
|
172
|
+
* Use cases that legitimately need `null` rather than a throw:
|
|
173
|
+
*
|
|
174
|
+
* - **Synthetic AST nodes constructed inside a detector** for
|
|
175
|
+
* deduplication or summary purposes (e.g. `arbitrary-account-balance-transfer.ts`'s
|
|
176
|
+
* mutation/primitive nodes assembled from sub-trees). The synthetic
|
|
177
|
+
* node is not a real AST node, has no `loc`, and surfacing that as
|
|
178
|
+
* a scan crash would be wrong.
|
|
179
|
+
* - **Dedup-key hash components** (e.g. `cross-chain-arbitrary-call.ts`'s
|
|
180
|
+
* `fnStartLine` in an instance key). The value is hashed, not emitted
|
|
181
|
+
* in a finding; producing a less-unique key is a graceful degradation.
|
|
182
|
+
*
|
|
183
|
+
* `assertLoc` is still the right choice when emitting a finding from a
|
|
184
|
+
* real AST node — silent `line: 0` emissions are the bug class roadmap
|
|
185
|
+
* 2.14 eliminates. `tryLoc` is the explicit escape hatch for the
|
|
186
|
+
* legitimate cases above.
|
|
187
|
+
*/
|
|
188
|
+
function tryLoc(node, fallbackNode) {
|
|
189
|
+
const primary = tryExtractLoc(node);
|
|
190
|
+
if (primary)
|
|
191
|
+
return primary;
|
|
192
|
+
if (fallbackNode !== undefined) {
|
|
193
|
+
const fb = tryExtractLoc(fallbackNode);
|
|
194
|
+
if (fb)
|
|
195
|
+
return fb;
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Resolve a node's source location across both AST shapes — parser-style
|
|
201
|
+
* (`node.loc.start`) and solc compact JSON (`node.src` byte offset).
|
|
202
|
+
*
|
|
203
|
+
* Returns `LocInfo | null` mirroring `tryLoc`. Use this when a detector
|
|
204
|
+
* declares `supportedAstKinds: ['parser', 'solc']` and a single helper
|
|
205
|
+
* needs to extract location data from whichever shape the AST node
|
|
206
|
+
* carries. Sibling detectors today duplicate this exact body ~80 times
|
|
207
|
+
* as a local `getLoc(node, lineOffsets?)` helper — adopting this shared
|
|
208
|
+
* version drops the duplication and standardises the null-on-missing
|
|
209
|
+
* semantics (some local copies return `undefined`, others return `null`).
|
|
210
|
+
*
|
|
211
|
+
* Behaviour matches the local copies' fast/slow path:
|
|
212
|
+
* - Fast path: `node.loc.start.line >= 1` → returns the full LocInfo
|
|
213
|
+
* (line, endLine, column, endColumn from `node.loc`).
|
|
214
|
+
* - Slow path: `node.src` byte offset + `lineOffsets` → returns a
|
|
215
|
+
* LocInfo with `endLine === line` and `endColumn === column` since
|
|
216
|
+
* the solc compact JSON `src` field is the START offset only.
|
|
217
|
+
* - Both unavailable → null. Callers that need a hard floor should
|
|
218
|
+
* `?? { line: 0, column: 0, endLine: 0, endColumn: 0 }`.
|
|
219
|
+
*
|
|
220
|
+
* `lineOffsets` is required only for the slow path — call sites that
|
|
221
|
+
* never produce solc-AST input can pass `undefined`. The slow path is
|
|
222
|
+
* skipped entirely when `lineOffsets` is missing.
|
|
223
|
+
*/
|
|
224
|
+
function getLoc(node, lineOffsets) {
|
|
225
|
+
const primary = tryExtractLoc(node);
|
|
226
|
+
if (primary)
|
|
227
|
+
return primary;
|
|
228
|
+
if (!lineOffsets)
|
|
229
|
+
return null;
|
|
230
|
+
const src = node?.src;
|
|
231
|
+
if (typeof src !== 'string')
|
|
232
|
+
return null;
|
|
233
|
+
const offset = Number(src.split(':')[0]);
|
|
234
|
+
if (!Number.isFinite(offset) || offset < 0)
|
|
235
|
+
return null;
|
|
236
|
+
const { line, column } = byteOffsetToLineColumn(offset, lineOffsets);
|
|
237
|
+
return { line, endLine: line, column, endColumn: column };
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=ast.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SolidityArithmeticProfile = {
|
|
2
|
+
allowsPre08Semantics: boolean;
|
|
3
|
+
source: 'pragma' | 'context' | 'unknown';
|
|
4
|
+
raw: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Classify Solidity arithmetic semantics at the 0.8.0 checked-arithmetic
|
|
8
|
+
* boundary. Ambiguous or unrecognized ranges are conservative: if any branch
|
|
9
|
+
* can select a pre-0.8 compiler, callers should assume unchecked arithmetic is
|
|
10
|
+
* possible unless a detector proves otherwise.
|
|
11
|
+
*/
|
|
12
|
+
export declare function classifySolidityArithmeticProfile(pragmaValues: string[], fallbackSolcVersion?: string): SolidityArithmeticProfile;
|
|
13
|
+
export declare function arithmeticMayWrap(profile: SolidityArithmeticProfile, uncheckedDepth: number): boolean;
|
|
14
|
+
export declare function pragmaAllowsPre080(pragmaValue: string): boolean;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifySolidityArithmeticProfile = classifySolidityArithmeticProfile;
|
|
4
|
+
exports.arithmeticMayWrap = arithmeticMayWrap;
|
|
5
|
+
exports.pragmaAllowsPre080 = pragmaAllowsPre080;
|
|
6
|
+
/**
|
|
7
|
+
* Classify Solidity arithmetic semantics at the 0.8.0 checked-arithmetic
|
|
8
|
+
* boundary. Ambiguous or unrecognized ranges are conservative: if any branch
|
|
9
|
+
* can select a pre-0.8 compiler, callers should assume unchecked arithmetic is
|
|
10
|
+
* possible unless a detector proves otherwise.
|
|
11
|
+
*/
|
|
12
|
+
function classifySolidityArithmeticProfile(pragmaValues, fallbackSolcVersion) {
|
|
13
|
+
const solidityPragmas = pragmaValues
|
|
14
|
+
.map(value => String(value || '').trim())
|
|
15
|
+
.filter(Boolean);
|
|
16
|
+
if (solidityPragmas.length > 0) {
|
|
17
|
+
return {
|
|
18
|
+
allowsPre08Semantics: solidityPragmas.some(pragmaAllowsPre080),
|
|
19
|
+
source: 'pragma',
|
|
20
|
+
raw: solidityPragmas.join(' || '),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const fallback = String(fallbackSolcVersion || '').trim();
|
|
24
|
+
if (fallback) {
|
|
25
|
+
return {
|
|
26
|
+
allowsPre08Semantics: pragmaAllowsPre080(fallback),
|
|
27
|
+
source: 'context',
|
|
28
|
+
raw: fallback,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { allowsPre08Semantics: true, source: 'unknown', raw: '' };
|
|
32
|
+
}
|
|
33
|
+
function arithmeticMayWrap(profile, uncheckedDepth) {
|
|
34
|
+
return profile.allowsPre08Semantics || uncheckedDepth > 0;
|
|
35
|
+
}
|
|
36
|
+
function pragmaAllowsPre080(pragmaValue) {
|
|
37
|
+
if (!pragmaValue)
|
|
38
|
+
return true;
|
|
39
|
+
const normalized = pragmaValue.replace(/^v(?=\d)/i, '').replace(/\+commit\.[a-f0-9]+/ig, '');
|
|
40
|
+
const branches = normalized.split('||');
|
|
41
|
+
for (const branch of branches) {
|
|
42
|
+
const tokens = branch.trim().split(/\s+/).filter(Boolean);
|
|
43
|
+
if (tokens.length === 0)
|
|
44
|
+
return true;
|
|
45
|
+
let lowerMinor = -1;
|
|
46
|
+
let sawComparator = false;
|
|
47
|
+
for (const token of tokens) {
|
|
48
|
+
const match = token.match(/^([\^~]|>=|>|<=|<|=)?\s*0\.(\d+)(?:\.(\d+))?/);
|
|
49
|
+
if (!match)
|
|
50
|
+
continue;
|
|
51
|
+
const op = match[1] || '=';
|
|
52
|
+
const minor = parseInt(match[2], 10);
|
|
53
|
+
if (op === '<' || op === '<=')
|
|
54
|
+
continue;
|
|
55
|
+
sawComparator = true;
|
|
56
|
+
if (lowerMinor < 0 || minor > lowerMinor)
|
|
57
|
+
lowerMinor = minor;
|
|
58
|
+
}
|
|
59
|
+
if (!sawComparator)
|
|
60
|
+
return true;
|
|
61
|
+
if (lowerMinor < 8)
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=compiler-profile.js.map
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataflow primitives shared by detectors that compute fixed points
|
|
3
|
+
* over taint, reachability, or other monotone-over-finite-set
|
|
4
|
+
* lattices.
|
|
5
|
+
*
|
|
6
|
+
* Today this module exports one primitive — `runFixedPoint` — used by
|
|
7
|
+
* the inter-procedural taint analyses in `arbitrary-call-error`,
|
|
8
|
+
* `lack-of-calldata-validation`, and `halborn-security-report-aave-v3`.
|
|
9
|
+
* Each of those detectors used to hand-roll its own
|
|
10
|
+
* `for (let pass = 0; changed && pass < N; pass++)` loop, with
|
|
11
|
+
* different N values and (in one case) no cap at all. The audit's
|
|
12
|
+
* concern was the inconsistency: a copy-paste with a typo could
|
|
13
|
+
* silently spin forever, and there was no shared place to add
|
|
14
|
+
* observability or change the cap policy. This primitive collapses
|
|
15
|
+
* the three loops into one well-documented signature.
|
|
16
|
+
*/
|
|
17
|
+
export interface FixedPointOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Maximum number of `step` invocations before we give up. Default
|
|
20
|
+
* 32. The lattices the existing detectors use are all monotone
|
|
21
|
+
* over a finite set (parameter indexes, function names), so 32 is
|
|
22
|
+
* comfortably above any real workload — if a detector hits this
|
|
23
|
+
* cap, the step function is almost certainly not shrinking the
|
|
24
|
+
* dirty set on each iteration and that's the bug to fix, not the
|
|
25
|
+
* cap to raise.
|
|
26
|
+
*/
|
|
27
|
+
maxPasses?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Optional label used in non-convergence error messages. Pass the
|
|
30
|
+
* detector or analysis name so a stack trace points to which
|
|
31
|
+
* fixed-point failed.
|
|
32
|
+
*/
|
|
33
|
+
name?: string;
|
|
34
|
+
/**
|
|
35
|
+
* When the cap is hit and `step` is still returning `true`, the
|
|
36
|
+
* default is to return `{ converged: false }` so the caller can
|
|
37
|
+
* decide what to do (some lattices are "best-effort"). Set this
|
|
38
|
+
* flag to throw instead — useful in tests where non-convergence
|
|
39
|
+
* is the bug being asserted against.
|
|
40
|
+
*/
|
|
41
|
+
throwOnNonConvergence?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface FixedPointResult {
|
|
44
|
+
/** Number of times `step` was invoked, i.e. the iteration count. */
|
|
45
|
+
passes: number;
|
|
46
|
+
/** True when `step` returned `false` before the cap. */
|
|
47
|
+
converged: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Run an imperative fixed-point loop. `step` is called repeatedly
|
|
51
|
+
* until either it returns `false` (no work was done this iteration —
|
|
52
|
+
* convergence) or the `maxPasses` cap is hit. `step` is responsible
|
|
53
|
+
* for the actual state mutations; this helper only enforces the
|
|
54
|
+
* loop shape.
|
|
55
|
+
*
|
|
56
|
+
* The shape `step: () => boolean` is intentional. The detectors
|
|
57
|
+
* mutate `Set`s and `Map`s in place, so a functional
|
|
58
|
+
* `(prev: T) => T` signature would force every detector to either
|
|
59
|
+
* deep-copy on each iteration or produce a wrapper that fakes
|
|
60
|
+
* immutability. Instead the caller mutates and returns whether any
|
|
61
|
+
* mutation actually happened — which is what the original hand-
|
|
62
|
+
* rolled loops already tracked via a `changed` flag.
|
|
63
|
+
*
|
|
64
|
+
* Example:
|
|
65
|
+
*
|
|
66
|
+
* const propagated = new Map<string, Set<number>>();
|
|
67
|
+
* runFixedPoint(() => {
|
|
68
|
+
* let didWork = false;
|
|
69
|
+
* for (const fn of functions) {
|
|
70
|
+
* // ... compute new tainted args, set didWork=true if added ...
|
|
71
|
+
* }
|
|
72
|
+
* return didWork;
|
|
73
|
+
* }, { maxPasses: 12, name: 'propagateParamTaint' });
|
|
74
|
+
*/
|
|
75
|
+
export declare function runFixedPoint(step: () => boolean, opts?: FixedPointOptions): FixedPointResult;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dataflow primitives shared by detectors that compute fixed points
|
|
4
|
+
* over taint, reachability, or other monotone-over-finite-set
|
|
5
|
+
* lattices.
|
|
6
|
+
*
|
|
7
|
+
* Today this module exports one primitive — `runFixedPoint` — used by
|
|
8
|
+
* the inter-procedural taint analyses in `arbitrary-call-error`,
|
|
9
|
+
* `lack-of-calldata-validation`, and `halborn-security-report-aave-v3`.
|
|
10
|
+
* Each of those detectors used to hand-roll its own
|
|
11
|
+
* `for (let pass = 0; changed && pass < N; pass++)` loop, with
|
|
12
|
+
* different N values and (in one case) no cap at all. The audit's
|
|
13
|
+
* concern was the inconsistency: a copy-paste with a typo could
|
|
14
|
+
* silently spin forever, and there was no shared place to add
|
|
15
|
+
* observability or change the cap policy. This primitive collapses
|
|
16
|
+
* the three loops into one well-documented signature.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.runFixedPoint = runFixedPoint;
|
|
20
|
+
/**
|
|
21
|
+
* Run an imperative fixed-point loop. `step` is called repeatedly
|
|
22
|
+
* until either it returns `false` (no work was done this iteration —
|
|
23
|
+
* convergence) or the `maxPasses` cap is hit. `step` is responsible
|
|
24
|
+
* for the actual state mutations; this helper only enforces the
|
|
25
|
+
* loop shape.
|
|
26
|
+
*
|
|
27
|
+
* The shape `step: () => boolean` is intentional. The detectors
|
|
28
|
+
* mutate `Set`s and `Map`s in place, so a functional
|
|
29
|
+
* `(prev: T) => T` signature would force every detector to either
|
|
30
|
+
* deep-copy on each iteration or produce a wrapper that fakes
|
|
31
|
+
* immutability. Instead the caller mutates and returns whether any
|
|
32
|
+
* mutation actually happened — which is what the original hand-
|
|
33
|
+
* rolled loops already tracked via a `changed` flag.
|
|
34
|
+
*
|
|
35
|
+
* Example:
|
|
36
|
+
*
|
|
37
|
+
* const propagated = new Map<string, Set<number>>();
|
|
38
|
+
* runFixedPoint(() => {
|
|
39
|
+
* let didWork = false;
|
|
40
|
+
* for (const fn of functions) {
|
|
41
|
+
* // ... compute new tainted args, set didWork=true if added ...
|
|
42
|
+
* }
|
|
43
|
+
* return didWork;
|
|
44
|
+
* }, { maxPasses: 12, name: 'propagateParamTaint' });
|
|
45
|
+
*/
|
|
46
|
+
function runFixedPoint(step, opts = {}) {
|
|
47
|
+
const maxPasses = opts.maxPasses ?? 32;
|
|
48
|
+
for (let pass = 1; pass <= maxPasses; pass++) {
|
|
49
|
+
if (!step())
|
|
50
|
+
return { passes: pass, converged: true };
|
|
51
|
+
}
|
|
52
|
+
if (opts.throwOnNonConvergence) {
|
|
53
|
+
throw new Error(`runFixedPoint(${opts.name || 'anonymous'}) did not converge after ${maxPasses} passes`);
|
|
54
|
+
}
|
|
55
|
+
return { passes: maxPasses, converged: false };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=dataflow.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function isFheTypeName(typeName: string): boolean;
|
|
2
|
+
export declare function isFheCipherType(typeName: string, fheAliases?: Set<string>, localNonAliasFheNames?: Set<string>): boolean;
|
|
3
|
+
export declare function isFheNamespaceCall(node: any): boolean;
|
|
4
|
+
export declare function isFheNamespaceMemberCall(node: any, memberName: string): boolean;
|
|
5
|
+
export declare function isFheAllowCall(node: any): boolean;
|
|
6
|
+
export declare function isFheAllowThisCall(node: any): boolean;
|
|
7
|
+
export declare function isFheDecryptCall(node: any): boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isFheTypeName = isFheTypeName;
|
|
4
|
+
exports.isFheCipherType = isFheCipherType;
|
|
5
|
+
exports.isFheNamespaceCall = isFheNamespaceCall;
|
|
6
|
+
exports.isFheNamespaceMemberCall = isFheNamespaceMemberCall;
|
|
7
|
+
exports.isFheAllowCall = isFheAllowCall;
|
|
8
|
+
exports.isFheAllowThisCall = isFheAllowThisCall;
|
|
9
|
+
exports.isFheDecryptCall = isFheDecryptCall;
|
|
10
|
+
const ast_1 = require("./ast");
|
|
11
|
+
const FHE_NAMESPACES = new Set(['TFHE', 'FHE']);
|
|
12
|
+
const FHE_TYPE_RE = /^e(?:bool|uint(?:[0-9]+)?)$/;
|
|
13
|
+
function isFheTypeName(typeName) {
|
|
14
|
+
return FHE_TYPE_RE.test(typeName);
|
|
15
|
+
}
|
|
16
|
+
function isFheCipherType(typeName, fheAliases = new Set(), localNonAliasFheNames = new Set()) {
|
|
17
|
+
return fheAliases.has(typeName) || (isFheTypeName(typeName) && !localNonAliasFheNames.has(typeName));
|
|
18
|
+
}
|
|
19
|
+
function isFheNamespaceCall(node) {
|
|
20
|
+
if (!(0, ast_1.isNode)(node, 'FunctionCall'))
|
|
21
|
+
return false;
|
|
22
|
+
const callee = node.expression;
|
|
23
|
+
if (!(0, ast_1.isNode)(callee, 'MemberAccess'))
|
|
24
|
+
return false;
|
|
25
|
+
const receiver = callee.expression;
|
|
26
|
+
return !!receiver && (0, ast_1.isNode)(receiver, 'Identifier') && FHE_NAMESPACES.has(receiver.name);
|
|
27
|
+
}
|
|
28
|
+
function isFheNamespaceMemberCall(node, memberName) {
|
|
29
|
+
return isFheNamespaceCall(node) && node.expression?.memberName === memberName;
|
|
30
|
+
}
|
|
31
|
+
function isFheAllowCall(node) {
|
|
32
|
+
return isFheNamespaceMemberCall(node, 'allow');
|
|
33
|
+
}
|
|
34
|
+
function isFheAllowThisCall(node) {
|
|
35
|
+
return isFheNamespaceMemberCall(node, 'allowThis');
|
|
36
|
+
}
|
|
37
|
+
function isFheDecryptCall(node) {
|
|
38
|
+
return isFheNamespaceMemberCall(node, 'decrypt');
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=fhe.js.map
|