def visit_Call(self, node):
"""
함수 호출 노드를 방문할 때 호출되는 메서드
Args:
node: ast.Call 노드 객체
"""
func_name = ""
# 함수 이름 추출
# ast.Name: 직접 함수 호출 (예: eval())
if isinstance(node.func, ast.Name):
func_name = node.func.id
# ast.Attribute: 메서드 호출 (예: obj.method())
elif isinstance(node.func, ast.Attribute):
func_name = node.func.attr
# 위험한 함수 호출 탐지 (eval, exec)
if func_name in ("eval", "exec"):
# 발견된 이슈를 리스트에 추가 (라인 번호 포함)
self.issues.append(f"위험 함수 호출: {func_name}() (라인 {node.lineno})")
# 자식 노드들도 계속 방문 (재귀적 순회)
self.generic_visit(node)