@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,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-pool dispatcher for SolAST's file scan.
|
|
3
|
+
*
|
|
4
|
+
* The synchronous `scanFiles` walks ~100+ detectors against every file
|
|
5
|
+
* on a single thread. `scanFilesParallel` shards a file list across
|
|
6
|
+
* `worker_threads` Workers, each of which calls the same `scanFiles`
|
|
7
|
+
* on its slice. The async public surface is intentional: Node has no
|
|
8
|
+
* non-hacky way to wait synchronously for parallel workers, and the
|
|
9
|
+
* existing CLI is already comfortable with async (see
|
|
10
|
+
* `runAddressScanCommand` in `src/cli.ts`).
|
|
11
|
+
*
|
|
12
|
+
* Design choices:
|
|
13
|
+
*
|
|
14
|
+
* - **Opt-in, gated by a threshold.** Worker startup costs ~hundreds
|
|
15
|
+
* of ms because each Worker imports the solast module and
|
|
16
|
+
* constructs the detector registry. For small file sets the
|
|
17
|
+
* overhead exceeds the parallelism win, so callers explicitly
|
|
18
|
+
* pass `workerCount > 0` and we additionally insist on
|
|
19
|
+
* `files.length >= MIN_FILES_PER_WORKER * workerCount` before
|
|
20
|
+
* splitting at all.
|
|
21
|
+
* - **Round-robin slicing.** Files are interleaved across workers
|
|
22
|
+
* instead of contiguous chunks. Real-world contract directories
|
|
23
|
+
* tend to have heavy files clustered (deep dependency trees in
|
|
24
|
+
* one folder, leaf libraries in another). Round-robin spreads
|
|
25
|
+
* the heavy ones across workers.
|
|
26
|
+
* - **Deterministic output ordering.** Each finding carries the
|
|
27
|
+
* index of its source file in the original list; after merging
|
|
28
|
+
* we sort by that index then by line, restoring exactly the
|
|
29
|
+
* order the sync path would have produced.
|
|
30
|
+
* - **Failure propagation.** A worker that throws bubbles its
|
|
31
|
+
* error up; the dispatcher rejects the returned Promise after
|
|
32
|
+
* terminating any still-running siblings.
|
|
33
|
+
*/
|
|
34
|
+
import { ScanOptions, ScanResult } from './index';
|
|
35
|
+
export declare const DEFAULT_MIN_FILES_PER_WORKER = 8;
|
|
36
|
+
export interface ParallelScanOptions extends ScanOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Maximum number of worker threads to use. The actual count is
|
|
39
|
+
* clamped to `[1, files.length]` and to a safety cap of 32 to keep
|
|
40
|
+
* memory predictable. When unset or `<= 1`, the call falls through
|
|
41
|
+
* to the synchronous `scanFiles` path.
|
|
42
|
+
*/
|
|
43
|
+
workerCount?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Minimum files per worker before the work is parallelised.
|
|
46
|
+
* Defaults to `DEFAULT_MIN_FILES_PER_WORKER`. With fewer than
|
|
47
|
+
* `workerCount * minFilesPerWorker` files the call falls through
|
|
48
|
+
* to the synchronous path so we never pay worker startup for a
|
|
49
|
+
* trivial scan.
|
|
50
|
+
*/
|
|
51
|
+
minFilesPerWorker?: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function shouldUseWorkers(fileCount: number, options: ParallelScanOptions): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Run an SolAST scan over `files` using a worker_threads pool.
|
|
56
|
+
* Falls through to the synchronous `scanFiles` when the file count is
|
|
57
|
+
* below the parallelism threshold so the call site doesn't have to
|
|
58
|
+
* special-case small scans.
|
|
59
|
+
*/
|
|
60
|
+
export declare function scanFilesParallel(files: string[], options?: ParallelScanOptions): Promise<ScanResult[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Convenience helper for the CLI: pick a sensible worker count given
|
|
63
|
+
* a user request and the host CPU. Returns `0` when workers should be
|
|
64
|
+
* skipped entirely (the request was zero, negative, or NaN).
|
|
65
|
+
*/
|
|
66
|
+
export declare function resolveWorkerCount(requested: number | undefined): number;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Worker-pool dispatcher for SolAST's file scan.
|
|
4
|
+
*
|
|
5
|
+
* The synchronous `scanFiles` walks ~100+ detectors against every file
|
|
6
|
+
* on a single thread. `scanFilesParallel` shards a file list across
|
|
7
|
+
* `worker_threads` Workers, each of which calls the same `scanFiles`
|
|
8
|
+
* on its slice. The async public surface is intentional: Node has no
|
|
9
|
+
* non-hacky way to wait synchronously for parallel workers, and the
|
|
10
|
+
* existing CLI is already comfortable with async (see
|
|
11
|
+
* `runAddressScanCommand` in `src/cli.ts`).
|
|
12
|
+
*
|
|
13
|
+
* Design choices:
|
|
14
|
+
*
|
|
15
|
+
* - **Opt-in, gated by a threshold.** Worker startup costs ~hundreds
|
|
16
|
+
* of ms because each Worker imports the solast module and
|
|
17
|
+
* constructs the detector registry. For small file sets the
|
|
18
|
+
* overhead exceeds the parallelism win, so callers explicitly
|
|
19
|
+
* pass `workerCount > 0` and we additionally insist on
|
|
20
|
+
* `files.length >= MIN_FILES_PER_WORKER * workerCount` before
|
|
21
|
+
* splitting at all.
|
|
22
|
+
* - **Round-robin slicing.** Files are interleaved across workers
|
|
23
|
+
* instead of contiguous chunks. Real-world contract directories
|
|
24
|
+
* tend to have heavy files clustered (deep dependency trees in
|
|
25
|
+
* one folder, leaf libraries in another). Round-robin spreads
|
|
26
|
+
* the heavy ones across workers.
|
|
27
|
+
* - **Deterministic output ordering.** Each finding carries the
|
|
28
|
+
* index of its source file in the original list; after merging
|
|
29
|
+
* we sort by that index then by line, restoring exactly the
|
|
30
|
+
* order the sync path would have produced.
|
|
31
|
+
* - **Failure propagation.** A worker that throws bubbles its
|
|
32
|
+
* error up; the dispatcher rejects the returned Promise after
|
|
33
|
+
* terminating any still-running siblings.
|
|
34
|
+
*/
|
|
35
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
38
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
39
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
40
|
+
}
|
|
41
|
+
Object.defineProperty(o, k2, desc);
|
|
42
|
+
}) : (function(o, m, k, k2) {
|
|
43
|
+
if (k2 === undefined) k2 = k;
|
|
44
|
+
o[k2] = m[k];
|
|
45
|
+
}));
|
|
46
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
47
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
48
|
+
}) : function(o, v) {
|
|
49
|
+
o["default"] = v;
|
|
50
|
+
});
|
|
51
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
52
|
+
var ownKeys = function(o) {
|
|
53
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
54
|
+
var ar = [];
|
|
55
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
56
|
+
return ar;
|
|
57
|
+
};
|
|
58
|
+
return ownKeys(o);
|
|
59
|
+
};
|
|
60
|
+
return function (mod) {
|
|
61
|
+
if (mod && mod.__esModule) return mod;
|
|
62
|
+
var result = {};
|
|
63
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
64
|
+
__setModuleDefault(result, mod);
|
|
65
|
+
return result;
|
|
66
|
+
};
|
|
67
|
+
})();
|
|
68
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
69
|
+
exports.DEFAULT_MIN_FILES_PER_WORKER = void 0;
|
|
70
|
+
exports.shouldUseWorkers = shouldUseWorkers;
|
|
71
|
+
exports.scanFilesParallel = scanFilesParallel;
|
|
72
|
+
exports.resolveWorkerCount = resolveWorkerCount;
|
|
73
|
+
const os = __importStar(require("os"));
|
|
74
|
+
const path = __importStar(require("path"));
|
|
75
|
+
const worker_threads_1 = require("worker_threads");
|
|
76
|
+
const index_1 = require("./index");
|
|
77
|
+
const findings_1 = require("./dedup/findings");
|
|
78
|
+
const files_1 = require("./dedup/files");
|
|
79
|
+
exports.DEFAULT_MIN_FILES_PER_WORKER = 8;
|
|
80
|
+
function shouldUseWorkers(fileCount, options) {
|
|
81
|
+
const requested = options.workerCount ?? 0;
|
|
82
|
+
if (requested <= 1)
|
|
83
|
+
return false;
|
|
84
|
+
const minPerWorker = options.minFilesPerWorker ?? exports.DEFAULT_MIN_FILES_PER_WORKER;
|
|
85
|
+
return fileCount >= requested * minPerWorker;
|
|
86
|
+
}
|
|
87
|
+
function effectiveWorkerCount(fileCount, requested) {
|
|
88
|
+
return Math.max(1, Math.min(fileCount, requested, 32));
|
|
89
|
+
}
|
|
90
|
+
function sliceRoundRobin(items, slices) {
|
|
91
|
+
const out = Array.from({ length: slices }, () => []);
|
|
92
|
+
for (let i = 0; i < items.length; i++)
|
|
93
|
+
out[i % slices].push(items[i]);
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Run an SolAST scan over `files` using a worker_threads pool.
|
|
98
|
+
* Falls through to the synchronous `scanFiles` when the file count is
|
|
99
|
+
* below the parallelism threshold so the call site doesn't have to
|
|
100
|
+
* special-case small scans.
|
|
101
|
+
*/
|
|
102
|
+
async function scanFilesParallel(files, options = {}) {
|
|
103
|
+
files = (0, files_1.deduplicateFilesByContent)(files);
|
|
104
|
+
if (!shouldUseWorkers(files.length, options)) {
|
|
105
|
+
// Strip parallel-only options before delegating to keep the sync
|
|
106
|
+
// path's contract clean.
|
|
107
|
+
const { workerCount: _wc, minFilesPerWorker: _mfp, ...rest } = options;
|
|
108
|
+
return (0, index_1.scanFiles)(files, rest);
|
|
109
|
+
}
|
|
110
|
+
const requested = options.workerCount ?? 0;
|
|
111
|
+
const workerCount = effectiveWorkerCount(files.length, requested);
|
|
112
|
+
const batches = sliceRoundRobin(files, workerCount);
|
|
113
|
+
// Pass only the ScanOptions fields the worker understands. Extra
|
|
114
|
+
// ParallelScanOptions fields (workerCount, minFilesPerWorker) are
|
|
115
|
+
// intentionally not forwarded.
|
|
116
|
+
const workerScanOptions = {};
|
|
117
|
+
if (options.rules)
|
|
118
|
+
workerScanOptions.rules = options.rules;
|
|
119
|
+
if (options.enabledRules)
|
|
120
|
+
workerScanOptions.enabledRules = options.enabledRules;
|
|
121
|
+
if (options.solcVersion)
|
|
122
|
+
workerScanOptions.solcVersion = options.solcVersion;
|
|
123
|
+
if (options.ignorePatterns)
|
|
124
|
+
workerScanOptions.ignorePatterns = options.ignorePatterns;
|
|
125
|
+
if (options.tier)
|
|
126
|
+
workerScanOptions.tier = options.tier;
|
|
127
|
+
// detectorOptions carries per-detector config from `.solast.yml`
|
|
128
|
+
// (e.g. custom Vortex bracket names). It is plain YAML-derived data,
|
|
129
|
+
// so it survives the worker `postMessage` boundary as-is. Without
|
|
130
|
+
// this line a `--workers` scan silently runs detectors with their
|
|
131
|
+
// defaults while the synchronous path honours the config.
|
|
132
|
+
if (options.detectorOptions)
|
|
133
|
+
workerScanOptions.detectorOptions = options.detectorOptions;
|
|
134
|
+
const workerScript = path.join(__dirname, 'scan-worker.js');
|
|
135
|
+
const workers = [];
|
|
136
|
+
const pending = [];
|
|
137
|
+
for (let i = 0; i < batches.length; i++) {
|
|
138
|
+
const batch = batches[i];
|
|
139
|
+
const worker = new worker_threads_1.Worker(workerScript, {
|
|
140
|
+
workerData: { options: workerScanOptions },
|
|
141
|
+
});
|
|
142
|
+
workers.push(worker);
|
|
143
|
+
pending.push(new Promise((resolve, reject) => {
|
|
144
|
+
worker.once('message', (msg) => {
|
|
145
|
+
if (msg.type === 'result' && msg.batchId === i) {
|
|
146
|
+
if (msg.sourceSuppressionDiagnostics && msg.sourceSuppressionDiagnostics.length > 0) {
|
|
147
|
+
msg.findings._sourceSuppressionDiagnostics = msg.sourceSuppressionDiagnostics;
|
|
148
|
+
}
|
|
149
|
+
resolve(msg.findings);
|
|
150
|
+
}
|
|
151
|
+
else if (msg.type === 'error' && msg.batchId === i) {
|
|
152
|
+
const err = new Error(`scan worker ${i} failed: ${msg.message}`);
|
|
153
|
+
if (msg.stack)
|
|
154
|
+
err.workerStack = msg.stack;
|
|
155
|
+
reject(err);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
reject(new Error(`unexpected message from scan worker ${i}: ${msg.type}`));
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
worker.once('error', reject);
|
|
162
|
+
worker.once('exit', code => {
|
|
163
|
+
if (code !== 0)
|
|
164
|
+
reject(new Error(`scan worker ${i} exited with code ${code}`));
|
|
165
|
+
});
|
|
166
|
+
worker.postMessage({ type: 'scan', batchId: i, files: batch });
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
let perBatchFindings;
|
|
170
|
+
try {
|
|
171
|
+
perBatchFindings = await Promise.all(pending);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
for (const worker of workers) {
|
|
175
|
+
worker.postMessage({ type: 'shutdown' });
|
|
176
|
+
// terminate() is idempotent and forces shutdown if the worker
|
|
177
|
+
// ignores our shutdown message for any reason.
|
|
178
|
+
worker.terminate().catch(() => undefined);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Reassemble in original file order. Each finding identifies its
|
|
182
|
+
// source file via `finding.file`, so an indexOf lookup against the
|
|
183
|
+
// original list is enough — and avoids needing the worker to echo
|
|
184
|
+
// a per-finding original index back.
|
|
185
|
+
const fileOrder = new Map();
|
|
186
|
+
for (let i = 0; i < files.length; i++)
|
|
187
|
+
fileOrder.set(files[i], i);
|
|
188
|
+
const merged = perBatchFindings.flat();
|
|
189
|
+
const sourceSuppressionDiagnostics = perBatchFindings.flatMap(findings => findings._sourceSuppressionDiagnostics ?? []);
|
|
190
|
+
merged.sort((a, b) => {
|
|
191
|
+
const orderA = fileOrder.get(a.file) ?? Number.MAX_SAFE_INTEGER;
|
|
192
|
+
const orderB = fileOrder.get(b.file) ?? Number.MAX_SAFE_INTEGER;
|
|
193
|
+
if (orderA !== orderB)
|
|
194
|
+
return orderA - orderB;
|
|
195
|
+
if ((a.line || 0) !== (b.line || 0))
|
|
196
|
+
return (a.line || 0) - (b.line || 0);
|
|
197
|
+
return (a.ruleId || '').localeCompare(b.ruleId || '');
|
|
198
|
+
});
|
|
199
|
+
if (options.dedup && merged.length > 0) {
|
|
200
|
+
const { findings: deduped, rawCount, uniqueCount } = (0, findings_1.dedupFindings)(merged);
|
|
201
|
+
deduped._dedup = { rawCount, uniqueCount };
|
|
202
|
+
if (sourceSuppressionDiagnostics.length > 0) {
|
|
203
|
+
deduped._sourceSuppressionDiagnostics = sourceSuppressionDiagnostics;
|
|
204
|
+
}
|
|
205
|
+
return deduped;
|
|
206
|
+
}
|
|
207
|
+
if (sourceSuppressionDiagnostics.length > 0) {
|
|
208
|
+
merged._sourceSuppressionDiagnostics = sourceSuppressionDiagnostics;
|
|
209
|
+
}
|
|
210
|
+
return merged;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Convenience helper for the CLI: pick a sensible worker count given
|
|
214
|
+
* a user request and the host CPU. Returns `0` when workers should be
|
|
215
|
+
* skipped entirely (the request was zero, negative, or NaN).
|
|
216
|
+
*/
|
|
217
|
+
function resolveWorkerCount(requested) {
|
|
218
|
+
if (requested === undefined)
|
|
219
|
+
return 0;
|
|
220
|
+
if (!Number.isFinite(requested) || requested <= 0)
|
|
221
|
+
return 0;
|
|
222
|
+
const cpus = typeof os.availableParallelism === 'function'
|
|
223
|
+
? os.availableParallelism()
|
|
224
|
+
: Math.max(1, (os.cpus() || []).length || 1);
|
|
225
|
+
return Math.max(1, Math.min(Math.floor(requested), cpus, 32));
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=parallel-scan.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DetectorRegistry } from './detectors/registry-engine';
|
|
2
|
+
/**
|
|
3
|
+
* Build the default registry by auto-discovering every detector class.
|
|
4
|
+
*
|
|
5
|
+
* Each src/detectors/*.ts file exports a `*Detector` class that self-declares its id
|
|
6
|
+
* and supportedAstKinds. We glob the compiled detector directory, instantiate each such
|
|
7
|
+
* class, and register it — skipping the EXPLICIT (registered below) and UNREGISTERED
|
|
8
|
+
* (curated-out) sets.
|
|
9
|
+
*
|
|
10
|
+
* Registration order is not significant: dedup picks its surviving finding by a
|
|
11
|
+
* deterministic severity/confidence/findingId sort, and scan output is location-sorted —
|
|
12
|
+
* so the id-sort below is purely for stable iteration.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createDefaultDetectorRegistry(options?: {
|
|
15
|
+
profile?: boolean;
|
|
16
|
+
detectorOptions?: Record<string, any>;
|
|
17
|
+
}): DetectorRegistry;
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createDefaultDetectorRegistry = createDefaultDetectorRegistry;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const registry_engine_1 = require("./detectors/registry-engine");
|
|
40
|
+
// Four detectors need non-standard construction (a constructor argument, or a
|
|
41
|
+
// registry-assigned id/patternKey/supportedAstKinds the class does not self-declare),
|
|
42
|
+
// so they are registered explicitly below and skipped by the auto-discovery loop.
|
|
43
|
+
const vortex_interaction_guard_1 = require("./detectors/vortex-interaction-guard");
|
|
44
|
+
const protocol_reentrancy_1 = require("./detectors/protocol-reentrancy");
|
|
45
|
+
const readonly_reentrancy_1 = require("./detectors/readonly-reentrancy");
|
|
46
|
+
const v4_hook_reentrancy_1 = require("./detectors/v4-hook-reentrancy");
|
|
47
|
+
const EXPLICIT = new Set([
|
|
48
|
+
'VortexInteractionGuardDetector',
|
|
49
|
+
'ProtocolReentrancyDetector',
|
|
50
|
+
'ReadOnlyReentrancyDetector',
|
|
51
|
+
'V4HookReentrancyDetector',
|
|
52
|
+
]);
|
|
53
|
+
// Detector classes that exist as files but are intentionally NOT registered — kept as
|
|
54
|
+
// reference implementations (e.g. they do not declare supportedAstKinds). This short,
|
|
55
|
+
// explicit list is the curation that the old hand-written import list used to encode.
|
|
56
|
+
const UNREGISTERED = new Set([
|
|
57
|
+
'HalbornSecurityReportAaveV3Detector',
|
|
58
|
+
'ProjectInstantRewardsUnlockedDetector',
|
|
59
|
+
'BusinessLogicDetector', // third unauthorized-transferfrom variant; original registers only the other two
|
|
60
|
+
]);
|
|
61
|
+
/**
|
|
62
|
+
* Build the default registry by auto-discovering every detector class.
|
|
63
|
+
*
|
|
64
|
+
* Each src/detectors/*.ts file exports a `*Detector` class that self-declares its id
|
|
65
|
+
* and supportedAstKinds. We glob the compiled detector directory, instantiate each such
|
|
66
|
+
* class, and register it — skipping the EXPLICIT (registered below) and UNREGISTERED
|
|
67
|
+
* (curated-out) sets.
|
|
68
|
+
*
|
|
69
|
+
* Registration order is not significant: dedup picks its surviving finding by a
|
|
70
|
+
* deterministic severity/confidence/findingId sort, and scan output is location-sorted —
|
|
71
|
+
* so the id-sort below is purely for stable iteration.
|
|
72
|
+
*/
|
|
73
|
+
function createDefaultDetectorRegistry(options = {}) {
|
|
74
|
+
const registry = new registry_engine_1.DetectorRegistry(options);
|
|
75
|
+
const dir = path.join(__dirname, 'detectors');
|
|
76
|
+
const discovered = [];
|
|
77
|
+
for (const file of fs.readdirSync(dir)) {
|
|
78
|
+
if (!file.endsWith('.js') || file === 'types.js' || file === 'registry-engine.js')
|
|
79
|
+
continue;
|
|
80
|
+
const mod = require(path.join(dir, file));
|
|
81
|
+
for (const exportName of Object.keys(mod)) {
|
|
82
|
+
if (!exportName.endsWith('Detector') || EXPLICIT.has(exportName) || UNREGISTERED.has(exportName))
|
|
83
|
+
continue;
|
|
84
|
+
const Ctor = mod[exportName];
|
|
85
|
+
if (typeof Ctor !== 'function')
|
|
86
|
+
continue;
|
|
87
|
+
let instance;
|
|
88
|
+
try {
|
|
89
|
+
instance = new Ctor();
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
// A detector whose constructor throws would otherwise vanish from
|
|
93
|
+
// the registry with no trace — make the drop loud so a regression
|
|
94
|
+
// in one of 300+ files can't silently disable a rule.
|
|
95
|
+
process.stderr.write(`warning: detector class ${exportName} (${file}) failed to construct and was skipped: `
|
|
96
|
+
+ `${e instanceof Error ? e.message : String(e)}\n`);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (instance && typeof instance.id === 'string')
|
|
100
|
+
discovered.push(instance);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
discovered.sort((a, b) => a.id.localeCompare(b.id));
|
|
104
|
+
for (const detector of discovered)
|
|
105
|
+
registry.register(detector);
|
|
106
|
+
registry.register(new vortex_interaction_guard_1.VortexInteractionGuardDetector(options.detectorOptions?.['vortex-interaction-guard']));
|
|
107
|
+
registry.register(Object.assign(new protocol_reentrancy_1.ProtocolReentrancyDetector(), {
|
|
108
|
+
id: 'protocol-reentrancy', patternKey: 'protocol-reentrancy', supportedAstKinds: ['parser'],
|
|
109
|
+
}));
|
|
110
|
+
registry.register(Object.assign(new readonly_reentrancy_1.ReadOnlyReentrancyDetector(), {
|
|
111
|
+
id: 'read-only-reentrancy', patternKey: 'read-only-reentrancy', supportedAstKinds: ['parser'],
|
|
112
|
+
}));
|
|
113
|
+
registry.register(Object.assign(new v4_hook_reentrancy_1.V4HookReentrancyDetector(), {
|
|
114
|
+
id: 'v4-hook-reentrancy', patternKey: 'v4-hook-reentrancy', supportedAstKinds: ['parser'],
|
|
115
|
+
}));
|
|
116
|
+
return registry;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GlobPatternError = void 0;
|
|
4
|
+
exports.validateGlobPattern = validateGlobPattern;
|
|
5
|
+
exports.matchesRuleGlob = matchesRuleGlob;
|
|
6
|
+
class GlobPatternError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'GlobPatternError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.GlobPatternError = GlobPatternError;
|
|
13
|
+
function validateGlobPattern(pattern) {
|
|
14
|
+
const trimmed = pattern.trim();
|
|
15
|
+
if (!trimmed) {
|
|
16
|
+
throw new GlobPatternError('--ignore-pattern must not be empty');
|
|
17
|
+
}
|
|
18
|
+
compileRuleGlob(trimmed);
|
|
19
|
+
return trimmed;
|
|
20
|
+
}
|
|
21
|
+
function matchesRuleGlob(ruleId, pattern) {
|
|
22
|
+
return compileRuleGlob(pattern).test(ruleId);
|
|
23
|
+
}
|
|
24
|
+
function compileRuleGlob(pattern) {
|
|
25
|
+
let regex = '^';
|
|
26
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
27
|
+
const ch = pattern[i];
|
|
28
|
+
if (ch === '*') {
|
|
29
|
+
regex += '.*';
|
|
30
|
+
}
|
|
31
|
+
else if (ch === '?') {
|
|
32
|
+
regex += '.';
|
|
33
|
+
}
|
|
34
|
+
else if (ch === '[') {
|
|
35
|
+
const end = findCharacterClassEnd(pattern, i + 1);
|
|
36
|
+
if (end === -1) {
|
|
37
|
+
throw new GlobPatternError(`malformed glob pattern ${JSON.stringify(pattern)}: unterminated character class`);
|
|
38
|
+
}
|
|
39
|
+
const body = pattern.slice(i + 1, end);
|
|
40
|
+
if (body.length === 0 || body === '!' || body === '^') {
|
|
41
|
+
throw new GlobPatternError(`malformed glob pattern ${JSON.stringify(pattern)}: empty character class`);
|
|
42
|
+
}
|
|
43
|
+
const negated = body[0] === '!' || body[0] === '^';
|
|
44
|
+
const classBody = negated ? body.slice(1) : body;
|
|
45
|
+
regex += `[${negated ? '^' : ''}${classBody.replace(/\\/g, '\\\\')}]`;
|
|
46
|
+
i = end;
|
|
47
|
+
}
|
|
48
|
+
else if (ch === '\\') {
|
|
49
|
+
if (i === pattern.length - 1) {
|
|
50
|
+
throw new GlobPatternError(`malformed glob pattern ${JSON.stringify(pattern)}: trailing escape`);
|
|
51
|
+
}
|
|
52
|
+
regex += escapeRegExp(pattern[++i]);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
regex += escapeRegExp(ch);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
regex += '$';
|
|
59
|
+
try {
|
|
60
|
+
return new RegExp(regex);
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
throw new GlobPatternError(`malformed glob pattern ${JSON.stringify(pattern)}: ${e instanceof Error ? e.message : String(e)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function findCharacterClassEnd(pattern, start) {
|
|
67
|
+
for (let i = start; i < pattern.length; i++) {
|
|
68
|
+
if (pattern[i] === ']')
|
|
69
|
+
return i;
|
|
70
|
+
}
|
|
71
|
+
return -1;
|
|
72
|
+
}
|
|
73
|
+
function escapeRegExp(value) {
|
|
74
|
+
return value.replace(/[|\\{}()[\]^$+?.]/g, '\\$&');
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ScanResult } from '../api';
|
|
2
|
+
type SourceSuppression = {
|
|
3
|
+
kind: 'all';
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'rules';
|
|
6
|
+
ruleIds: Set<string>;
|
|
7
|
+
};
|
|
8
|
+
export interface SourceSuppressionDiagnostic {
|
|
9
|
+
file: string;
|
|
10
|
+
line: number;
|
|
11
|
+
ruleId: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SourceSuppressionResult {
|
|
15
|
+
findings: ScanResult[];
|
|
16
|
+
diagnostics: SourceSuppressionDiagnostic[];
|
|
17
|
+
}
|
|
18
|
+
export declare function applySourceSuppressions(findings: ScanResult[], file: string, sourceText: string | undefined, validRuleIds: ReadonlySet<string>): SourceSuppressionResult;
|
|
19
|
+
export declare function parseSourceSuppressions(file: string, sourceText: string, validRuleIds: ReadonlySet<string>): {
|
|
20
|
+
suppressions: Map<number, SourceSuppression>;
|
|
21
|
+
diagnostics: SourceSuppressionDiagnostic[];
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applySourceSuppressions = applySourceSuppressions;
|
|
4
|
+
exports.parseSourceSuppressions = parseSourceSuppressions;
|
|
5
|
+
const DIRECTIVE = 'solast-disable-next-line';
|
|
6
|
+
function applySourceSuppressions(findings, file, sourceText, validRuleIds) {
|
|
7
|
+
if (!sourceText) {
|
|
8
|
+
return { findings, diagnostics: [] };
|
|
9
|
+
}
|
|
10
|
+
const { suppressions, diagnostics } = parseSourceSuppressions(file, sourceText, validRuleIds);
|
|
11
|
+
if (suppressions.size === 0)
|
|
12
|
+
return { findings, diagnostics };
|
|
13
|
+
return {
|
|
14
|
+
findings: findings.filter(finding => !isSuppressed(finding, suppressions)),
|
|
15
|
+
diagnostics,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function parseSourceSuppressions(file, sourceText, validRuleIds) {
|
|
19
|
+
const suppressions = new Map();
|
|
20
|
+
const diagnostics = [];
|
|
21
|
+
const lines = sourceText.split(/\r?\n/);
|
|
22
|
+
let inBlockComment = false;
|
|
23
|
+
for (let i = 0; i < lines.length; i++) {
|
|
24
|
+
const scan = findLineCommentStart(lines[i], inBlockComment);
|
|
25
|
+
inBlockComment = scan.inBlockComment;
|
|
26
|
+
if (scan.commentStart < 0)
|
|
27
|
+
continue;
|
|
28
|
+
const comment = lines[i].slice(scan.commentStart + 2).trim();
|
|
29
|
+
if (!comment.startsWith(DIRECTIVE))
|
|
30
|
+
continue;
|
|
31
|
+
const next = comment.charAt(DIRECTIVE.length);
|
|
32
|
+
if (next && !/\s/.test(next))
|
|
33
|
+
continue;
|
|
34
|
+
const targetLine = nextNonBlankLine(lines, i + 1);
|
|
35
|
+
if (targetLine === undefined)
|
|
36
|
+
continue;
|
|
37
|
+
const scopeText = stripTrailingLineComment(comment.slice(DIRECTIVE.length)).trim();
|
|
38
|
+
if (!scopeText) {
|
|
39
|
+
mergeSuppression(suppressions, targetLine, { kind: 'all' });
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const knownRuleIds = new Set();
|
|
43
|
+
for (const ruleId of parseScopedRuleIds(scopeText)) {
|
|
44
|
+
if (validRuleIds.has(ruleId)) {
|
|
45
|
+
knownRuleIds.add(ruleId);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
diagnostics.push({
|
|
49
|
+
file,
|
|
50
|
+
line: i + 1,
|
|
51
|
+
ruleId,
|
|
52
|
+
message: `warning: ${file}:${i + 1} solast-disable-next-line references unknown rule id '${ruleId}'`,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
mergeSuppression(suppressions, targetLine, { kind: 'rules', ruleIds: knownRuleIds });
|
|
57
|
+
}
|
|
58
|
+
return { suppressions, diagnostics };
|
|
59
|
+
}
|
|
60
|
+
function isSuppressed(finding, suppressions) {
|
|
61
|
+
if (!Number.isFinite(finding.line) || finding.line <= 0)
|
|
62
|
+
return false;
|
|
63
|
+
const suppression = suppressions.get(finding.line);
|
|
64
|
+
if (!suppression)
|
|
65
|
+
return false;
|
|
66
|
+
if (suppression.kind === 'all')
|
|
67
|
+
return true;
|
|
68
|
+
return suppression.ruleIds.has(finding.ruleId);
|
|
69
|
+
}
|
|
70
|
+
function nextNonBlankLine(lines, startIndex) {
|
|
71
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
72
|
+
if (lines[i].trim().length > 0)
|
|
73
|
+
return i + 1;
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
function parseScopedRuleIds(scopeText) {
|
|
78
|
+
const ids = [];
|
|
79
|
+
for (const part of scopeText.split(',')) {
|
|
80
|
+
const token = part.trim().split(/\s+/)[0];
|
|
81
|
+
if (token)
|
|
82
|
+
ids.push(token);
|
|
83
|
+
}
|
|
84
|
+
return ids;
|
|
85
|
+
}
|
|
86
|
+
function stripTrailingLineComment(text) {
|
|
87
|
+
const nestedComment = text.indexOf('//');
|
|
88
|
+
return nestedComment >= 0 ? text.slice(0, nestedComment) : text;
|
|
89
|
+
}
|
|
90
|
+
function mergeSuppression(suppressions, line, next) {
|
|
91
|
+
const existing = suppressions.get(line);
|
|
92
|
+
if (!existing || existing.kind === 'all' || next.kind === 'all') {
|
|
93
|
+
suppressions.set(line, existing?.kind === 'all' ? existing : next);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const ruleId of next.ruleIds)
|
|
97
|
+
existing.ruleIds.add(ruleId);
|
|
98
|
+
}
|
|
99
|
+
function findLineCommentStart(line, inBlockCommentAtStart) {
|
|
100
|
+
let inBlockComment = inBlockCommentAtStart;
|
|
101
|
+
let quote = null;
|
|
102
|
+
for (let i = 0; i < line.length; i++) {
|
|
103
|
+
const ch = line[i];
|
|
104
|
+
const next = line[i + 1];
|
|
105
|
+
if (quote) {
|
|
106
|
+
if (ch === '\\') {
|
|
107
|
+
i++;
|
|
108
|
+
}
|
|
109
|
+
else if (ch === quote) {
|
|
110
|
+
quote = null;
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (inBlockComment) {
|
|
115
|
+
if (ch === '*' && next === '/') {
|
|
116
|
+
inBlockComment = false;
|
|
117
|
+
i++;
|
|
118
|
+
}
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (ch === '"' || ch === "'") {
|
|
122
|
+
quote = ch;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (ch === '/' && next === '*') {
|
|
126
|
+
inBlockComment = true;
|
|
127
|
+
i++;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (ch === '/' && next === '/') {
|
|
131
|
+
return { commentStart: i, inBlockComment };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { commentStart: -1, inBlockComment };
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=suppressions.js.map
|