diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 16ac9d7f1..4ab2225f4 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -156,7 +156,7 @@ class ExternalFunction(AbstractDetector): for arg in function.parameters: if self.is_reference_type(arg) and arg.location == 'memory': reference_args.append(arg) - if len(reference_args) == 0 and len(function.parameters) > 0: + if len(reference_args) == 0: continue # If the function is a constructor, or is public, we skip it. diff --git a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json index 17885c854..5825bcacc 100644 --- a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json @@ -1,280 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.4.25/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.4.25/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.4.25/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.4.25/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 3a0514955..5825bcacc 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -1,280 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.5.16/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.5.16/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.5.16/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.5.16/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file