webshell-analyzer 1.0.0__py3-none-any.whl
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.
- webshell_analyzer/__init__.py +0 -0
- webshell_analyzer/cli/__init__.py +0 -0
- webshell_analyzer/cli/cli.py +151 -0
- webshell_analyzer/extractor/ast_extraction/composer.json +5 -0
- webshell_analyzer/extractor/ast_extraction/composer.lock +77 -0
- webshell_analyzer/extractor/ast_extraction/src/NodeVisitor.php +85 -0
- webshell_analyzer/extractor/ast_extraction/src/astBuilder.php +50 -0
- webshell_analyzer/extractor/ast_extraction/src/astExtractor.php +50 -0
- webshell_analyzer/extractor/ast_extraction/src/featuresDeclare.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/autoload.php +25 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/ClassLoader.php +579 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/InstalledVersions.php +378 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_classmap.php +10 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_namespaces.php +9 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_psr4.php +10 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_real.php +38 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_static.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.json +67 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/composer/platform_check.php +26 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +150 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +151 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +50 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +86 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +73 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +67 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +94 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +147 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +171 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +223 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +65 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +145 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +83 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder.php +12 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +375 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +338 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +6 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment.php +209 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +237 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Error.php +173 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +43 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +12 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +31 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +178 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +71 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +282 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +108 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +230 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +93 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +26 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +60 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +19 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +60 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +19 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php +98 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +116 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php +85 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +284 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +44 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +84 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +60 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +16 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php +11 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +25 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +86 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +38 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +38 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +35 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +45 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +8 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +85 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +278 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +123 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +105 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +161 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +6 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +77 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +109 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +154 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +94 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +36 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +44 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +32 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +47 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +50 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +81 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +41 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +46 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +40 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +16 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +121 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +15 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +12 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +34 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +37 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +29 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +17 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +33 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +8 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +16 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node.php +150 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +181 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +299 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +90 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +287 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +26 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +19 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +47 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +49 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +269 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +73 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +51 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +124 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +24 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2919 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2917 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser.php +24 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +1335 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +42 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +175 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +1232 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +1706 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Token.php +18 -0
- webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +71 -0
- webshell_analyzer/extractor/extractor.py +73 -0
- webshell_analyzer/extractor/lexical_extraction/lexicalExtractor.py +31 -0
- webshell_analyzer/extractor/statistical_extraction/statisticalExtractor.py +60 -0
- webshell_analyzer/model/features_selected.json +1 -0
- webshell_analyzer/model/model_loader.py +19 -0
- webshell_analyzer/model/rf_webshell_model.joblib +0 -0
- webshell_analyzer/modules/__init__.py +0 -0
- webshell_analyzer/modules/detector.py +174 -0
- webshell_analyzer/modules/scanner.py +68 -0
- webshell_analyzer-1.0.0.dist-info/METADATA +105 -0
- webshell_analyzer-1.0.0.dist-info/RECORD +304 -0
- webshell_analyzer-1.0.0.dist-info/WHEEL +5 -0
- webshell_analyzer-1.0.0.dist-info/entry_points.txt +2 -0
- webshell_analyzer-1.0.0.dist-info/licenses/LICENSE +21 -0
- webshell_analyzer-1.0.0.dist-info/top_level.txt +1 -0
webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
use PhpParser\Node\Expr\Array_;
|
|
6
|
+
use PhpParser\Node\Expr\Include_;
|
|
7
|
+
use PhpParser\Node\Expr\List_;
|
|
8
|
+
use PhpParser\Node\Scalar\Int_;
|
|
9
|
+
use PhpParser\Node\Scalar\InterpolatedString;
|
|
10
|
+
use PhpParser\Node\Scalar\String_;
|
|
11
|
+
use PhpParser\Node\Stmt\GroupUse;
|
|
12
|
+
use PhpParser\Node\Stmt\Use_;
|
|
13
|
+
use PhpParser\Node\UseItem;
|
|
14
|
+
|
|
15
|
+
class NodeDumper {
|
|
16
|
+
private bool $dumpComments;
|
|
17
|
+
private bool $dumpPositions;
|
|
18
|
+
private bool $dumpOtherAttributes;
|
|
19
|
+
private ?string $code;
|
|
20
|
+
private string $res;
|
|
21
|
+
private string $nl;
|
|
22
|
+
|
|
23
|
+
private const IGNORE_ATTRIBUTES = [
|
|
24
|
+
'comments' => true,
|
|
25
|
+
'startLine' => true,
|
|
26
|
+
'endLine' => true,
|
|
27
|
+
'startFilePos' => true,
|
|
28
|
+
'endFilePos' => true,
|
|
29
|
+
'startTokenPos' => true,
|
|
30
|
+
'endTokenPos' => true,
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a NodeDumper.
|
|
35
|
+
*
|
|
36
|
+
* Supported options:
|
|
37
|
+
* * bool dumpComments: Whether comments should be dumped.
|
|
38
|
+
* * bool dumpPositions: Whether line/offset information should be dumped. To dump offset
|
|
39
|
+
* information, the code needs to be passed to dump().
|
|
40
|
+
* * bool dumpOtherAttributes: Whether non-comment, non-position attributes should be dumped.
|
|
41
|
+
*
|
|
42
|
+
* @param array $options Options (see description)
|
|
43
|
+
*/
|
|
44
|
+
public function __construct(array $options = []) {
|
|
45
|
+
$this->dumpComments = !empty($options['dumpComments']);
|
|
46
|
+
$this->dumpPositions = !empty($options['dumpPositions']);
|
|
47
|
+
$this->dumpOtherAttributes = !empty($options['dumpOtherAttributes']);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Dumps a node or array.
|
|
52
|
+
*
|
|
53
|
+
* @param array|Node $node Node or array to dump
|
|
54
|
+
* @param string|null $code Code corresponding to dumped AST. This only needs to be passed if
|
|
55
|
+
* the dumpPositions option is enabled and the dumping of node offsets
|
|
56
|
+
* is desired.
|
|
57
|
+
*
|
|
58
|
+
* @return string Dumped value
|
|
59
|
+
*/
|
|
60
|
+
public function dump($node, ?string $code = null): string {
|
|
61
|
+
$this->code = $code;
|
|
62
|
+
$this->res = '';
|
|
63
|
+
$this->nl = "\n";
|
|
64
|
+
$this->dumpRecursive($node, false);
|
|
65
|
+
return $this->res;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** @param mixed $node */
|
|
69
|
+
protected function dumpRecursive($node, bool $indent = true): void {
|
|
70
|
+
if ($indent) {
|
|
71
|
+
$this->nl .= " ";
|
|
72
|
+
}
|
|
73
|
+
if ($node instanceof Node) {
|
|
74
|
+
$this->res .= $node->getType();
|
|
75
|
+
if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) {
|
|
76
|
+
$this->res .= $p;
|
|
77
|
+
}
|
|
78
|
+
$this->res .= '(';
|
|
79
|
+
|
|
80
|
+
foreach ($node->getSubNodeNames() as $key) {
|
|
81
|
+
$this->res .= "$this->nl " . $key . ': ';
|
|
82
|
+
|
|
83
|
+
$value = $node->$key;
|
|
84
|
+
if (\is_int($value)) {
|
|
85
|
+
if ('flags' === $key || 'newModifier' === $key) {
|
|
86
|
+
$this->res .= $this->dumpFlags($value);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if ('type' === $key && $node instanceof Include_) {
|
|
90
|
+
$this->res .= $this->dumpIncludeType($value);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if ('type' === $key
|
|
94
|
+
&& ($node instanceof Use_ || $node instanceof UseItem || $node instanceof GroupUse)) {
|
|
95
|
+
$this->res .= $this->dumpUseType($value);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
$this->dumpRecursive($value);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if ($this->dumpComments && $comments = $node->getComments()) {
|
|
103
|
+
$this->res .= "$this->nl comments: ";
|
|
104
|
+
$this->dumpRecursive($comments);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if ($this->dumpOtherAttributes) {
|
|
108
|
+
foreach ($node->getAttributes() as $key => $value) {
|
|
109
|
+
if (isset(self::IGNORE_ATTRIBUTES[$key])) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
$this->res .= "$this->nl $key: ";
|
|
114
|
+
if (\is_int($value)) {
|
|
115
|
+
if ('kind' === $key) {
|
|
116
|
+
if ($node instanceof Int_) {
|
|
117
|
+
$this->res .= $this->dumpIntKind($value);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if ($node instanceof String_ || $node instanceof InterpolatedString) {
|
|
121
|
+
$this->res .= $this->dumpStringKind($value);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if ($node instanceof Array_) {
|
|
125
|
+
$this->res .= $this->dumpArrayKind($value);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if ($node instanceof List_) {
|
|
129
|
+
$this->res .= $this->dumpListKind($value);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
$this->dumpRecursive($value);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
$this->res .= "$this->nl)";
|
|
138
|
+
} elseif (\is_array($node)) {
|
|
139
|
+
$this->res .= 'array(';
|
|
140
|
+
foreach ($node as $key => $value) {
|
|
141
|
+
$this->res .= "$this->nl " . $key . ': ';
|
|
142
|
+
$this->dumpRecursive($value);
|
|
143
|
+
}
|
|
144
|
+
$this->res .= "$this->nl)";
|
|
145
|
+
} elseif ($node instanceof Comment) {
|
|
146
|
+
$this->res .= \str_replace("\n", $this->nl, $node->getReformattedText());
|
|
147
|
+
} elseif (\is_string($node)) {
|
|
148
|
+
$this->res .= \str_replace("\n", $this->nl, $node);
|
|
149
|
+
} elseif (\is_int($node) || \is_float($node)) {
|
|
150
|
+
$this->res .= $node;
|
|
151
|
+
} elseif (null === $node) {
|
|
152
|
+
$this->res .= 'null';
|
|
153
|
+
} elseif (false === $node) {
|
|
154
|
+
$this->res .= 'false';
|
|
155
|
+
} elseif (true === $node) {
|
|
156
|
+
$this->res .= 'true';
|
|
157
|
+
} else {
|
|
158
|
+
throw new \InvalidArgumentException('Can only dump nodes and arrays.');
|
|
159
|
+
}
|
|
160
|
+
if ($indent) {
|
|
161
|
+
$this->nl = \substr($this->nl, 0, -4);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
protected function dumpFlags(int $flags): string {
|
|
166
|
+
$strs = [];
|
|
167
|
+
if ($flags & Modifiers::PUBLIC) {
|
|
168
|
+
$strs[] = 'PUBLIC';
|
|
169
|
+
}
|
|
170
|
+
if ($flags & Modifiers::PROTECTED) {
|
|
171
|
+
$strs[] = 'PROTECTED';
|
|
172
|
+
}
|
|
173
|
+
if ($flags & Modifiers::PRIVATE) {
|
|
174
|
+
$strs[] = 'PRIVATE';
|
|
175
|
+
}
|
|
176
|
+
if ($flags & Modifiers::ABSTRACT) {
|
|
177
|
+
$strs[] = 'ABSTRACT';
|
|
178
|
+
}
|
|
179
|
+
if ($flags & Modifiers::STATIC) {
|
|
180
|
+
$strs[] = 'STATIC';
|
|
181
|
+
}
|
|
182
|
+
if ($flags & Modifiers::FINAL) {
|
|
183
|
+
$strs[] = 'FINAL';
|
|
184
|
+
}
|
|
185
|
+
if ($flags & Modifiers::READONLY) {
|
|
186
|
+
$strs[] = 'READONLY';
|
|
187
|
+
}
|
|
188
|
+
if ($flags & Modifiers::PUBLIC_SET) {
|
|
189
|
+
$strs[] = 'PUBLIC_SET';
|
|
190
|
+
}
|
|
191
|
+
if ($flags & Modifiers::PROTECTED_SET) {
|
|
192
|
+
$strs[] = 'PROTECTED_SET';
|
|
193
|
+
}
|
|
194
|
+
if ($flags & Modifiers::PRIVATE_SET) {
|
|
195
|
+
$strs[] = 'PRIVATE_SET';
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if ($strs) {
|
|
199
|
+
return implode(' | ', $strs) . ' (' . $flags . ')';
|
|
200
|
+
} else {
|
|
201
|
+
return (string) $flags;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/** @param array<int, string> $map */
|
|
206
|
+
private function dumpEnum(int $value, array $map): string {
|
|
207
|
+
if (!isset($map[$value])) {
|
|
208
|
+
return (string) $value;
|
|
209
|
+
}
|
|
210
|
+
return $map[$value] . ' (' . $value . ')';
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private function dumpIncludeType(int $type): string {
|
|
214
|
+
return $this->dumpEnum($type, [
|
|
215
|
+
Include_::TYPE_INCLUDE => 'TYPE_INCLUDE',
|
|
216
|
+
Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE',
|
|
217
|
+
Include_::TYPE_REQUIRE => 'TYPE_REQUIRE',
|
|
218
|
+
Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE',
|
|
219
|
+
]);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
private function dumpUseType(int $type): string {
|
|
223
|
+
return $this->dumpEnum($type, [
|
|
224
|
+
Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN',
|
|
225
|
+
Use_::TYPE_NORMAL => 'TYPE_NORMAL',
|
|
226
|
+
Use_::TYPE_FUNCTION => 'TYPE_FUNCTION',
|
|
227
|
+
Use_::TYPE_CONSTANT => 'TYPE_CONSTANT',
|
|
228
|
+
]);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
private function dumpIntKind(int $kind): string {
|
|
232
|
+
return $this->dumpEnum($kind, [
|
|
233
|
+
Int_::KIND_BIN => 'KIND_BIN',
|
|
234
|
+
Int_::KIND_OCT => 'KIND_OCT',
|
|
235
|
+
Int_::KIND_DEC => 'KIND_DEC',
|
|
236
|
+
Int_::KIND_HEX => 'KIND_HEX',
|
|
237
|
+
]);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private function dumpStringKind(int $kind): string {
|
|
241
|
+
return $this->dumpEnum($kind, [
|
|
242
|
+
String_::KIND_SINGLE_QUOTED => 'KIND_SINGLE_QUOTED',
|
|
243
|
+
String_::KIND_DOUBLE_QUOTED => 'KIND_DOUBLE_QUOTED',
|
|
244
|
+
String_::KIND_HEREDOC => 'KIND_HEREDOC',
|
|
245
|
+
String_::KIND_NOWDOC => 'KIND_NOWDOC',
|
|
246
|
+
]);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private function dumpArrayKind(int $kind): string {
|
|
250
|
+
return $this->dumpEnum($kind, [
|
|
251
|
+
Array_::KIND_LONG => 'KIND_LONG',
|
|
252
|
+
Array_::KIND_SHORT => 'KIND_SHORT',
|
|
253
|
+
]);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private function dumpListKind(int $kind): string {
|
|
257
|
+
return $this->dumpEnum($kind, [
|
|
258
|
+
List_::KIND_LIST => 'KIND_LIST',
|
|
259
|
+
List_::KIND_ARRAY => 'KIND_ARRAY',
|
|
260
|
+
]);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Dump node position, if possible.
|
|
265
|
+
*
|
|
266
|
+
* @param Node $node Node for which to dump position
|
|
267
|
+
*
|
|
268
|
+
* @return string|null Dump of position, or null if position information not available
|
|
269
|
+
*/
|
|
270
|
+
protected function dumpPosition(Node $node): ?string {
|
|
271
|
+
if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
$start = $node->getStartLine();
|
|
276
|
+
$end = $node->getEndLine();
|
|
277
|
+
if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos')
|
|
278
|
+
&& null !== $this->code
|
|
279
|
+
) {
|
|
280
|
+
$start .= ':' . $this->toColumn($this->code, $node->getStartFilePos());
|
|
281
|
+
$end .= ':' . $this->toColumn($this->code, $node->getEndFilePos());
|
|
282
|
+
}
|
|
283
|
+
return "[$start - $end]";
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Copied from Error class
|
|
287
|
+
private function toColumn(string $code, int $pos): int {
|
|
288
|
+
if ($pos > strlen($code)) {
|
|
289
|
+
throw new \RuntimeException('Invalid position information');
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
$lineStartPos = strrpos($code, "\n", $pos - strlen($code));
|
|
293
|
+
if (false === $lineStartPos) {
|
|
294
|
+
$lineStartPos = -1;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return $pos - $lineStartPos;
|
|
298
|
+
}
|
|
299
|
+
}
|
webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
use PhpParser\NodeVisitor\FindingVisitor;
|
|
6
|
+
use PhpParser\NodeVisitor\FirstFindingVisitor;
|
|
7
|
+
|
|
8
|
+
class NodeFinder {
|
|
9
|
+
/**
|
|
10
|
+
* Find all nodes satisfying a filter callback.
|
|
11
|
+
*
|
|
12
|
+
* @param Node|Node[] $nodes Single node or array of nodes to search in
|
|
13
|
+
* @param callable $filter Filter callback: function(Node $node) : bool
|
|
14
|
+
*
|
|
15
|
+
* @return Node[] Found nodes satisfying the filter callback
|
|
16
|
+
*/
|
|
17
|
+
public function find($nodes, callable $filter): array {
|
|
18
|
+
if ($nodes === []) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (!is_array($nodes)) {
|
|
23
|
+
$nodes = [$nodes];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
$visitor = new FindingVisitor($filter);
|
|
27
|
+
|
|
28
|
+
$traverser = new NodeTraverser($visitor);
|
|
29
|
+
$traverser->traverse($nodes);
|
|
30
|
+
|
|
31
|
+
return $visitor->getFoundNodes();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Find all nodes that are instances of a certain class.
|
|
36
|
+
|
|
37
|
+
* @template TNode as Node
|
|
38
|
+
*
|
|
39
|
+
* @param Node|Node[] $nodes Single node or array of nodes to search in
|
|
40
|
+
* @param class-string<TNode> $class Class name
|
|
41
|
+
*
|
|
42
|
+
* @return TNode[] Found nodes (all instances of $class)
|
|
43
|
+
*/
|
|
44
|
+
public function findInstanceOf($nodes, string $class): array {
|
|
45
|
+
return $this->find($nodes, function ($node) use ($class) {
|
|
46
|
+
return $node instanceof $class;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Find first node satisfying a filter callback.
|
|
52
|
+
*
|
|
53
|
+
* @param Node|Node[] $nodes Single node or array of nodes to search in
|
|
54
|
+
* @param callable $filter Filter callback: function(Node $node) : bool
|
|
55
|
+
*
|
|
56
|
+
* @return null|Node Found node (or null if none found)
|
|
57
|
+
*/
|
|
58
|
+
public function findFirst($nodes, callable $filter): ?Node {
|
|
59
|
+
if ($nodes === []) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!is_array($nodes)) {
|
|
64
|
+
$nodes = [$nodes];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
$visitor = new FirstFindingVisitor($filter);
|
|
68
|
+
|
|
69
|
+
$traverser = new NodeTraverser($visitor);
|
|
70
|
+
$traverser->traverse($nodes);
|
|
71
|
+
|
|
72
|
+
return $visitor->getFoundNode();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Find first node that is an instance of a certain class.
|
|
77
|
+
*
|
|
78
|
+
* @template TNode as Node
|
|
79
|
+
*
|
|
80
|
+
* @param Node|Node[] $nodes Single node or array of nodes to search in
|
|
81
|
+
* @param class-string<TNode> $class Class name
|
|
82
|
+
*
|
|
83
|
+
* @return null|TNode Found node, which is an instance of $class (or null if none found)
|
|
84
|
+
*/
|
|
85
|
+
public function findFirstInstanceOf($nodes, string $class): ?Node {
|
|
86
|
+
return $this->findFirst($nodes, function ($node) use ($class) {
|
|
87
|
+
return $node instanceof $class;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
class NodeTraverser implements NodeTraverserInterface {
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use NodeVisitor::DONT_TRAVERSE_CHILDREN instead.
|
|
8
|
+
*/
|
|
9
|
+
public const DONT_TRAVERSE_CHILDREN = NodeVisitor::DONT_TRAVERSE_CHILDREN;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Use NodeVisitor::STOP_TRAVERSAL instead.
|
|
13
|
+
*/
|
|
14
|
+
public const STOP_TRAVERSAL = NodeVisitor::STOP_TRAVERSAL;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Use NodeVisitor::REMOVE_NODE instead.
|
|
18
|
+
*/
|
|
19
|
+
public const REMOVE_NODE = NodeVisitor::REMOVE_NODE;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated Use NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN instead.
|
|
23
|
+
*/
|
|
24
|
+
public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN;
|
|
25
|
+
|
|
26
|
+
/** @var list<NodeVisitor> Visitors */
|
|
27
|
+
protected array $visitors = [];
|
|
28
|
+
|
|
29
|
+
/** @var bool Whether traversal should be stopped */
|
|
30
|
+
protected bool $stopTraversal;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create a traverser with the given visitors.
|
|
34
|
+
*
|
|
35
|
+
* @param NodeVisitor ...$visitors Node visitors
|
|
36
|
+
*/
|
|
37
|
+
public function __construct(NodeVisitor ...$visitors) {
|
|
38
|
+
$this->visitors = $visitors;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Adds a visitor.
|
|
43
|
+
*
|
|
44
|
+
* @param NodeVisitor $visitor Visitor to add
|
|
45
|
+
*/
|
|
46
|
+
public function addVisitor(NodeVisitor $visitor): void {
|
|
47
|
+
$this->visitors[] = $visitor;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Removes an added visitor.
|
|
52
|
+
*/
|
|
53
|
+
public function removeVisitor(NodeVisitor $visitor): void {
|
|
54
|
+
$index = array_search($visitor, $this->visitors);
|
|
55
|
+
if ($index !== false) {
|
|
56
|
+
array_splice($this->visitors, $index, 1, []);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Traverses an array of nodes using the registered visitors.
|
|
62
|
+
*
|
|
63
|
+
* @param Node[] $nodes Array of nodes
|
|
64
|
+
*
|
|
65
|
+
* @return Node[] Traversed array of nodes
|
|
66
|
+
*/
|
|
67
|
+
public function traverse(array $nodes): array {
|
|
68
|
+
$this->stopTraversal = false;
|
|
69
|
+
|
|
70
|
+
foreach ($this->visitors as $visitor) {
|
|
71
|
+
if (null !== $return = $visitor->beforeTraverse($nodes)) {
|
|
72
|
+
$nodes = $return;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
$nodes = $this->traverseArray($nodes);
|
|
77
|
+
|
|
78
|
+
for ($i = \count($this->visitors) - 1; $i >= 0; --$i) {
|
|
79
|
+
$visitor = $this->visitors[$i];
|
|
80
|
+
if (null !== $return = $visitor->afterTraverse($nodes)) {
|
|
81
|
+
$nodes = $return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return $nodes;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Recursively traverse a node.
|
|
90
|
+
*
|
|
91
|
+
* @param Node $node Node to traverse.
|
|
92
|
+
*/
|
|
93
|
+
protected function traverseNode(Node $node): void {
|
|
94
|
+
foreach ($node->getSubNodeNames() as $name) {
|
|
95
|
+
$subNode = $node->$name;
|
|
96
|
+
|
|
97
|
+
if (\is_array($subNode)) {
|
|
98
|
+
$node->$name = $this->traverseArray($subNode);
|
|
99
|
+
if ($this->stopTraversal) {
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!$subNode instanceof Node) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
$traverseChildren = true;
|
|
111
|
+
$visitorIndex = -1;
|
|
112
|
+
|
|
113
|
+
foreach ($this->visitors as $visitorIndex => $visitor) {
|
|
114
|
+
$return = $visitor->enterNode($subNode);
|
|
115
|
+
if (null !== $return) {
|
|
116
|
+
if ($return instanceof Node) {
|
|
117
|
+
$this->ensureReplacementReasonable($subNode, $return);
|
|
118
|
+
$subNode = $node->$name = $return;
|
|
119
|
+
} elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
|
|
120
|
+
$traverseChildren = false;
|
|
121
|
+
} elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
|
|
122
|
+
$traverseChildren = false;
|
|
123
|
+
break;
|
|
124
|
+
} elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
|
|
125
|
+
$this->stopTraversal = true;
|
|
126
|
+
break 2;
|
|
127
|
+
} elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
|
|
128
|
+
$node->$name = null;
|
|
129
|
+
continue 2;
|
|
130
|
+
} else {
|
|
131
|
+
throw new \LogicException(
|
|
132
|
+
'enterNode() returned invalid value of type ' . gettype($return)
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if ($traverseChildren) {
|
|
139
|
+
$this->traverseNode($subNode);
|
|
140
|
+
if ($this->stopTraversal) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
for (; $visitorIndex >= 0; --$visitorIndex) {
|
|
146
|
+
$visitor = $this->visitors[$visitorIndex];
|
|
147
|
+
$return = $visitor->leaveNode($subNode);
|
|
148
|
+
|
|
149
|
+
if (null !== $return) {
|
|
150
|
+
if ($return instanceof Node) {
|
|
151
|
+
$this->ensureReplacementReasonable($subNode, $return);
|
|
152
|
+
$subNode = $node->$name = $return;
|
|
153
|
+
} elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
|
|
154
|
+
$this->stopTraversal = true;
|
|
155
|
+
break 2;
|
|
156
|
+
} elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
|
|
157
|
+
$node->$name = null;
|
|
158
|
+
break;
|
|
159
|
+
} elseif (\is_array($return)) {
|
|
160
|
+
throw new \LogicException(
|
|
161
|
+
'leaveNode() may only return an array ' .
|
|
162
|
+
'if the parent structure is an array'
|
|
163
|
+
);
|
|
164
|
+
} else {
|
|
165
|
+
throw new \LogicException(
|
|
166
|
+
'leaveNode() returned invalid value of type ' . gettype($return)
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Recursively traverse array (usually of nodes).
|
|
176
|
+
*
|
|
177
|
+
* @param Node[] $nodes Array to traverse
|
|
178
|
+
*
|
|
179
|
+
* @return Node[] Result of traversal (may be original array or changed one)
|
|
180
|
+
*/
|
|
181
|
+
protected function traverseArray(array $nodes): array {
|
|
182
|
+
$doNodes = [];
|
|
183
|
+
|
|
184
|
+
foreach ($nodes as $i => $node) {
|
|
185
|
+
if (!$node instanceof Node) {
|
|
186
|
+
if (\is_array($node)) {
|
|
187
|
+
throw new \LogicException('Invalid node structure: Contains nested arrays');
|
|
188
|
+
}
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
$traverseChildren = true;
|
|
193
|
+
$visitorIndex = -1;
|
|
194
|
+
|
|
195
|
+
foreach ($this->visitors as $visitorIndex => $visitor) {
|
|
196
|
+
$return = $visitor->enterNode($node);
|
|
197
|
+
if (null !== $return) {
|
|
198
|
+
if ($return instanceof Node) {
|
|
199
|
+
$this->ensureReplacementReasonable($node, $return);
|
|
200
|
+
$nodes[$i] = $node = $return;
|
|
201
|
+
} elseif (\is_array($return)) {
|
|
202
|
+
$doNodes[] = [$i, $return];
|
|
203
|
+
continue 2;
|
|
204
|
+
} elseif (NodeVisitor::REMOVE_NODE === $return) {
|
|
205
|
+
$doNodes[] = [$i, []];
|
|
206
|
+
continue 2;
|
|
207
|
+
} elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
|
|
208
|
+
$traverseChildren = false;
|
|
209
|
+
} elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
|
|
210
|
+
$traverseChildren = false;
|
|
211
|
+
break;
|
|
212
|
+
} elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
|
|
213
|
+
$this->stopTraversal = true;
|
|
214
|
+
break 2;
|
|
215
|
+
} elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
|
|
216
|
+
throw new \LogicException(
|
|
217
|
+
'REPLACE_WITH_NULL can not be used if the parent structure is an array');
|
|
218
|
+
} else {
|
|
219
|
+
throw new \LogicException(
|
|
220
|
+
'enterNode() returned invalid value of type ' . gettype($return)
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if ($traverseChildren) {
|
|
227
|
+
$this->traverseNode($node);
|
|
228
|
+
if ($this->stopTraversal) {
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
for (; $visitorIndex >= 0; --$visitorIndex) {
|
|
234
|
+
$visitor = $this->visitors[$visitorIndex];
|
|
235
|
+
$return = $visitor->leaveNode($node);
|
|
236
|
+
|
|
237
|
+
if (null !== $return) {
|
|
238
|
+
if ($return instanceof Node) {
|
|
239
|
+
$this->ensureReplacementReasonable($node, $return);
|
|
240
|
+
$nodes[$i] = $node = $return;
|
|
241
|
+
} elseif (\is_array($return)) {
|
|
242
|
+
$doNodes[] = [$i, $return];
|
|
243
|
+
break;
|
|
244
|
+
} elseif (NodeVisitor::REMOVE_NODE === $return) {
|
|
245
|
+
$doNodes[] = [$i, []];
|
|
246
|
+
break;
|
|
247
|
+
} elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
|
|
248
|
+
$this->stopTraversal = true;
|
|
249
|
+
break 2;
|
|
250
|
+
} elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
|
|
251
|
+
throw new \LogicException(
|
|
252
|
+
'REPLACE_WITH_NULL can not be used if the parent structure is an array');
|
|
253
|
+
} else {
|
|
254
|
+
throw new \LogicException(
|
|
255
|
+
'leaveNode() returned invalid value of type ' . gettype($return)
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (!empty($doNodes)) {
|
|
263
|
+
while (list($i, $replace) = array_pop($doNodes)) {
|
|
264
|
+
array_splice($nodes, $i, 1, $replace);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return $nodes;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
private function ensureReplacementReasonable(Node $old, Node $new): void {
|
|
272
|
+
if ($old instanceof Node\Stmt && $new instanceof Node\Expr) {
|
|
273
|
+
throw new \LogicException(
|
|
274
|
+
"Trying to replace statement ({$old->getType()}) " .
|
|
275
|
+
"with expression ({$new->getType()}). Are you missing a " .
|
|
276
|
+
"Stmt_Expression wrapper?"
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if ($old instanceof Node\Expr && $new instanceof Node\Stmt) {
|
|
281
|
+
throw new \LogicException(
|
|
282
|
+
"Trying to replace expression ({$old->getType()}) " .
|
|
283
|
+
"with statement ({$new->getType()})"
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
interface NodeTraverserInterface {
|
|
6
|
+
/**
|
|
7
|
+
* Adds a visitor.
|
|
8
|
+
*
|
|
9
|
+
* @param NodeVisitor $visitor Visitor to add
|
|
10
|
+
*/
|
|
11
|
+
public function addVisitor(NodeVisitor $visitor): void;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Removes an added visitor.
|
|
15
|
+
*/
|
|
16
|
+
public function removeVisitor(NodeVisitor $visitor): void;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Traverses an array of nodes using the registered visitors.
|
|
20
|
+
*
|
|
21
|
+
* @param Node[] $nodes Array of nodes
|
|
22
|
+
*
|
|
23
|
+
* @return Node[] Traversed array of nodes
|
|
24
|
+
*/
|
|
25
|
+
public function traverse(array $nodes): array;
|
|
26
|
+
}
|