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
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
class Comment implements \JsonSerializable {
|
|
6
|
+
protected string $text;
|
|
7
|
+
protected int $startLine;
|
|
8
|
+
protected int $startFilePos;
|
|
9
|
+
protected int $startTokenPos;
|
|
10
|
+
protected int $endLine;
|
|
11
|
+
protected int $endFilePos;
|
|
12
|
+
protected int $endTokenPos;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a comment node.
|
|
16
|
+
*
|
|
17
|
+
* @param string $text Comment text (including comment delimiters like /*)
|
|
18
|
+
* @param int $startLine Line number the comment started on
|
|
19
|
+
* @param int $startFilePos File offset the comment started on
|
|
20
|
+
* @param int $startTokenPos Token offset the comment started on
|
|
21
|
+
*/
|
|
22
|
+
public function __construct(
|
|
23
|
+
string $text,
|
|
24
|
+
int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1,
|
|
25
|
+
int $endLine = -1, int $endFilePos = -1, int $endTokenPos = -1
|
|
26
|
+
) {
|
|
27
|
+
$this->text = $text;
|
|
28
|
+
$this->startLine = $startLine;
|
|
29
|
+
$this->startFilePos = $startFilePos;
|
|
30
|
+
$this->startTokenPos = $startTokenPos;
|
|
31
|
+
$this->endLine = $endLine;
|
|
32
|
+
$this->endFilePos = $endFilePos;
|
|
33
|
+
$this->endTokenPos = $endTokenPos;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Gets the comment text.
|
|
38
|
+
*
|
|
39
|
+
* @return string The comment text (including comment delimiters like /*)
|
|
40
|
+
*/
|
|
41
|
+
public function getText(): string {
|
|
42
|
+
return $this->text;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Gets the line number the comment started on.
|
|
47
|
+
*
|
|
48
|
+
* @return int Line number (or -1 if not available)
|
|
49
|
+
* @phpstan-return -1|positive-int
|
|
50
|
+
*/
|
|
51
|
+
public function getStartLine(): int {
|
|
52
|
+
return $this->startLine;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Gets the file offset the comment started on.
|
|
57
|
+
*
|
|
58
|
+
* @return int File offset (or -1 if not available)
|
|
59
|
+
*/
|
|
60
|
+
public function getStartFilePos(): int {
|
|
61
|
+
return $this->startFilePos;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Gets the token offset the comment started on.
|
|
66
|
+
*
|
|
67
|
+
* @return int Token offset (or -1 if not available)
|
|
68
|
+
*/
|
|
69
|
+
public function getStartTokenPos(): int {
|
|
70
|
+
return $this->startTokenPos;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Gets the line number the comment ends on.
|
|
75
|
+
*
|
|
76
|
+
* @return int Line number (or -1 if not available)
|
|
77
|
+
* @phpstan-return -1|positive-int
|
|
78
|
+
*/
|
|
79
|
+
public function getEndLine(): int {
|
|
80
|
+
return $this->endLine;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Gets the file offset the comment ends on.
|
|
85
|
+
*
|
|
86
|
+
* @return int File offset (or -1 if not available)
|
|
87
|
+
*/
|
|
88
|
+
public function getEndFilePos(): int {
|
|
89
|
+
return $this->endFilePos;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Gets the token offset the comment ends on.
|
|
94
|
+
*
|
|
95
|
+
* @return int Token offset (or -1 if not available)
|
|
96
|
+
*/
|
|
97
|
+
public function getEndTokenPos(): int {
|
|
98
|
+
return $this->endTokenPos;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Gets the comment text.
|
|
103
|
+
*
|
|
104
|
+
* @return string The comment text (including comment delimiters like /*)
|
|
105
|
+
*/
|
|
106
|
+
public function __toString(): string {
|
|
107
|
+
return $this->text;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Gets the reformatted comment text.
|
|
112
|
+
*
|
|
113
|
+
* "Reformatted" here means that we try to clean up the whitespace at the
|
|
114
|
+
* starts of the lines. This is necessary because we receive the comments
|
|
115
|
+
* without leading whitespace on the first line, but with leading whitespace
|
|
116
|
+
* on all subsequent lines.
|
|
117
|
+
*
|
|
118
|
+
* Additionally, this normalizes CRLF newlines to LF newlines.
|
|
119
|
+
*/
|
|
120
|
+
public function getReformattedText(): string {
|
|
121
|
+
$text = str_replace("\r\n", "\n", $this->text);
|
|
122
|
+
$newlinePos = strpos($text, "\n");
|
|
123
|
+
if (false === $newlinePos) {
|
|
124
|
+
// Single line comments don't need further processing
|
|
125
|
+
return $text;
|
|
126
|
+
}
|
|
127
|
+
if (preg_match('(^.*(?:\n\s+\*.*)+$)', $text)) {
|
|
128
|
+
// Multi line comment of the type
|
|
129
|
+
//
|
|
130
|
+
// /*
|
|
131
|
+
// * Some text.
|
|
132
|
+
// * Some more text.
|
|
133
|
+
// */
|
|
134
|
+
//
|
|
135
|
+
// is handled by replacing the whitespace sequences before the * by a single space
|
|
136
|
+
return preg_replace('(^\s+\*)m', ' *', $text);
|
|
137
|
+
}
|
|
138
|
+
if (preg_match('(^/\*\*?\s*\n)', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) {
|
|
139
|
+
// Multi line comment of the type
|
|
140
|
+
//
|
|
141
|
+
// /*
|
|
142
|
+
// Some text.
|
|
143
|
+
// Some more text.
|
|
144
|
+
// */
|
|
145
|
+
//
|
|
146
|
+
// is handled by removing the whitespace sequence on the line before the closing
|
|
147
|
+
// */ on all lines. So if the last line is " */", then " " is removed at the
|
|
148
|
+
// start of all lines.
|
|
149
|
+
return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text);
|
|
150
|
+
}
|
|
151
|
+
if (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) {
|
|
152
|
+
// Multi line comment of the type
|
|
153
|
+
//
|
|
154
|
+
// /* Some text.
|
|
155
|
+
// Some more text.
|
|
156
|
+
// Indented text.
|
|
157
|
+
// Even more text. */
|
|
158
|
+
//
|
|
159
|
+
// is handled by removing the difference between the shortest whitespace prefix on all
|
|
160
|
+
// lines and the length of the "/* " opening sequence.
|
|
161
|
+
$prefixLen = $this->getShortestWhitespacePrefixLen(substr($text, $newlinePos + 1));
|
|
162
|
+
$removeLen = $prefixLen - strlen($matches[0]);
|
|
163
|
+
return preg_replace('(^\s{' . $removeLen . '})m', '', $text);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// No idea how to format this comment, so simply return as is
|
|
167
|
+
return $text;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get length of shortest whitespace prefix (at the start of a line).
|
|
172
|
+
*
|
|
173
|
+
* If there is a line with no prefix whitespace, 0 is a valid return value.
|
|
174
|
+
*
|
|
175
|
+
* @param string $str String to check
|
|
176
|
+
* @return int Length in characters. Tabs count as single characters.
|
|
177
|
+
*/
|
|
178
|
+
private function getShortestWhitespacePrefixLen(string $str): int {
|
|
179
|
+
$lines = explode("\n", $str);
|
|
180
|
+
$shortestPrefixLen = \PHP_INT_MAX;
|
|
181
|
+
foreach ($lines as $line) {
|
|
182
|
+
preg_match('(^\s*)', $line, $matches);
|
|
183
|
+
$prefixLen = strlen($matches[0]);
|
|
184
|
+
if ($prefixLen < $shortestPrefixLen) {
|
|
185
|
+
$shortestPrefixLen = $prefixLen;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return $shortestPrefixLen;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @return array{nodeType:string, text:mixed, line:mixed, filePos:mixed}
|
|
193
|
+
*/
|
|
194
|
+
public function jsonSerialize(): array {
|
|
195
|
+
// Technically not a node, but we make it look like one anyway
|
|
196
|
+
$type = $this instanceof Comment\Doc ? 'Comment_Doc' : 'Comment';
|
|
197
|
+
return [
|
|
198
|
+
'nodeType' => $type,
|
|
199
|
+
'text' => $this->text,
|
|
200
|
+
// TODO: Rename these to include "start".
|
|
201
|
+
'line' => $this->startLine,
|
|
202
|
+
'filePos' => $this->startFilePos,
|
|
203
|
+
'tokenPos' => $this->startTokenPos,
|
|
204
|
+
'endLine' => $this->endLine,
|
|
205
|
+
'endFilePos' => $this->endFilePos,
|
|
206
|
+
'endTokenPos' => $this->endTokenPos,
|
|
207
|
+
];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
use PhpParser\Node\Expr;
|
|
6
|
+
use PhpParser\Node\Scalar;
|
|
7
|
+
|
|
8
|
+
use function array_merge;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Evaluates constant expressions.
|
|
12
|
+
*
|
|
13
|
+
* This evaluator is able to evaluate all constant expressions (as defined by PHP), which can be
|
|
14
|
+
* evaluated without further context. If a subexpression is not of this type, a user-provided
|
|
15
|
+
* fallback evaluator is invoked. To support all constant expressions that are also supported by
|
|
16
|
+
* PHP (and not already handled by this class), the fallback evaluator must be able to handle the
|
|
17
|
+
* following node types:
|
|
18
|
+
*
|
|
19
|
+
* * All Scalar\MagicConst\* nodes.
|
|
20
|
+
* * Expr\ConstFetch nodes. Only null/false/true are already handled by this class.
|
|
21
|
+
* * Expr\ClassConstFetch nodes.
|
|
22
|
+
*
|
|
23
|
+
* The fallback evaluator should throw ConstExprEvaluationException for nodes it cannot evaluate.
|
|
24
|
+
*
|
|
25
|
+
* The evaluation is dependent on runtime configuration in two respects: Firstly, floating
|
|
26
|
+
* point to string conversions are affected by the precision ini setting. Secondly, they are also
|
|
27
|
+
* affected by the LC_NUMERIC locale.
|
|
28
|
+
*/
|
|
29
|
+
class ConstExprEvaluator {
|
|
30
|
+
/** @var callable|null */
|
|
31
|
+
private $fallbackEvaluator;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Create a constant expression evaluator.
|
|
35
|
+
*
|
|
36
|
+
* The provided fallback evaluator is invoked whenever a subexpression cannot be evaluated. See
|
|
37
|
+
* class doc comment for more information.
|
|
38
|
+
*
|
|
39
|
+
* @param callable|null $fallbackEvaluator To call if subexpression cannot be evaluated
|
|
40
|
+
*/
|
|
41
|
+
public function __construct(?callable $fallbackEvaluator = null) {
|
|
42
|
+
$this->fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) {
|
|
43
|
+
throw new ConstExprEvaluationException(
|
|
44
|
+
"Expression of type {$expr->getType()} cannot be evaluated"
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Silently evaluates a constant expression into a PHP value.
|
|
51
|
+
*
|
|
52
|
+
* Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException.
|
|
53
|
+
* The original source of the exception is available through getPrevious().
|
|
54
|
+
*
|
|
55
|
+
* If some part of the expression cannot be evaluated, the fallback evaluator passed to the
|
|
56
|
+
* constructor will be invoked. By default, if no fallback is provided, an exception of type
|
|
57
|
+
* ConstExprEvaluationException is thrown.
|
|
58
|
+
*
|
|
59
|
+
* See class doc comment for caveats and limitations.
|
|
60
|
+
*
|
|
61
|
+
* @param Expr $expr Constant expression to evaluate
|
|
62
|
+
* @return mixed Result of evaluation
|
|
63
|
+
*
|
|
64
|
+
* @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred
|
|
65
|
+
*/
|
|
66
|
+
public function evaluateSilently(Expr $expr) {
|
|
67
|
+
set_error_handler(function ($num, $str, $file, $line) {
|
|
68
|
+
throw new \ErrorException($str, 0, $num, $file, $line);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
return $this->evaluate($expr);
|
|
73
|
+
} catch (\Throwable $e) {
|
|
74
|
+
if (!$e instanceof ConstExprEvaluationException) {
|
|
75
|
+
$e = new ConstExprEvaluationException(
|
|
76
|
+
"An error occurred during constant expression evaluation", 0, $e);
|
|
77
|
+
}
|
|
78
|
+
throw $e;
|
|
79
|
+
} finally {
|
|
80
|
+
restore_error_handler();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Directly evaluates a constant expression into a PHP value.
|
|
86
|
+
*
|
|
87
|
+
* May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these
|
|
88
|
+
* into a ConstExprEvaluationException.
|
|
89
|
+
*
|
|
90
|
+
* If some part of the expression cannot be evaluated, the fallback evaluator passed to the
|
|
91
|
+
* constructor will be invoked. By default, if no fallback is provided, an exception of type
|
|
92
|
+
* ConstExprEvaluationException is thrown.
|
|
93
|
+
*
|
|
94
|
+
* See class doc comment for caveats and limitations.
|
|
95
|
+
*
|
|
96
|
+
* @param Expr $expr Constant expression to evaluate
|
|
97
|
+
* @return mixed Result of evaluation
|
|
98
|
+
*
|
|
99
|
+
* @throws ConstExprEvaluationException if the expression cannot be evaluated
|
|
100
|
+
*/
|
|
101
|
+
public function evaluateDirectly(Expr $expr) {
|
|
102
|
+
return $this->evaluate($expr);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** @return mixed */
|
|
106
|
+
private function evaluate(Expr $expr) {
|
|
107
|
+
if ($expr instanceof Scalar\Int_
|
|
108
|
+
|| $expr instanceof Scalar\Float_
|
|
109
|
+
|| $expr instanceof Scalar\String_
|
|
110
|
+
) {
|
|
111
|
+
return $expr->value;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if ($expr instanceof Expr\Array_) {
|
|
115
|
+
return $this->evaluateArray($expr);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Unary operators
|
|
119
|
+
if ($expr instanceof Expr\UnaryPlus) {
|
|
120
|
+
return +$this->evaluate($expr->expr);
|
|
121
|
+
}
|
|
122
|
+
if ($expr instanceof Expr\UnaryMinus) {
|
|
123
|
+
return -$this->evaluate($expr->expr);
|
|
124
|
+
}
|
|
125
|
+
if ($expr instanceof Expr\BooleanNot) {
|
|
126
|
+
return !$this->evaluate($expr->expr);
|
|
127
|
+
}
|
|
128
|
+
if ($expr instanceof Expr\BitwiseNot) {
|
|
129
|
+
return ~$this->evaluate($expr->expr);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if ($expr instanceof Expr\BinaryOp) {
|
|
133
|
+
return $this->evaluateBinaryOp($expr);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if ($expr instanceof Expr\Ternary) {
|
|
137
|
+
return $this->evaluateTernary($expr);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) {
|
|
141
|
+
return $this->evaluate($expr->var)[$this->evaluate($expr->dim)];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if ($expr instanceof Expr\ConstFetch) {
|
|
145
|
+
return $this->evaluateConstFetch($expr);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return ($this->fallbackEvaluator)($expr);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private function evaluateArray(Expr\Array_ $expr): array {
|
|
152
|
+
$array = [];
|
|
153
|
+
foreach ($expr->items as $item) {
|
|
154
|
+
if (null !== $item->key) {
|
|
155
|
+
$array[$this->evaluate($item->key)] = $this->evaluate($item->value);
|
|
156
|
+
} elseif ($item->unpack) {
|
|
157
|
+
$array = array_merge($array, $this->evaluate($item->value));
|
|
158
|
+
} else {
|
|
159
|
+
$array[] = $this->evaluate($item->value);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return $array;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** @return mixed */
|
|
166
|
+
private function evaluateTernary(Expr\Ternary $expr) {
|
|
167
|
+
if (null === $expr->if) {
|
|
168
|
+
return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return $this->evaluate($expr->cond)
|
|
172
|
+
? $this->evaluate($expr->if)
|
|
173
|
+
: $this->evaluate($expr->else);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** @return mixed */
|
|
177
|
+
private function evaluateBinaryOp(Expr\BinaryOp $expr) {
|
|
178
|
+
if ($expr instanceof Expr\BinaryOp\Coalesce
|
|
179
|
+
&& $expr->left instanceof Expr\ArrayDimFetch
|
|
180
|
+
) {
|
|
181
|
+
// This needs to be special cased to respect BP_VAR_IS fetch semantics
|
|
182
|
+
return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)]
|
|
183
|
+
?? $this->evaluate($expr->right);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// The evaluate() calls are repeated in each branch, because some of the operators are
|
|
187
|
+
// short-circuiting and evaluating the RHS in advance may be illegal in that case
|
|
188
|
+
$l = $expr->left;
|
|
189
|
+
$r = $expr->right;
|
|
190
|
+
switch ($expr->getOperatorSigil()) {
|
|
191
|
+
case '&': return $this->evaluate($l) & $this->evaluate($r);
|
|
192
|
+
case '|': return $this->evaluate($l) | $this->evaluate($r);
|
|
193
|
+
case '^': return $this->evaluate($l) ^ $this->evaluate($r);
|
|
194
|
+
case '&&': return $this->evaluate($l) && $this->evaluate($r);
|
|
195
|
+
case '||': return $this->evaluate($l) || $this->evaluate($r);
|
|
196
|
+
case '??': return $this->evaluate($l) ?? $this->evaluate($r);
|
|
197
|
+
case '.': return $this->evaluate($l) . $this->evaluate($r);
|
|
198
|
+
case '/': return $this->evaluate($l) / $this->evaluate($r);
|
|
199
|
+
case '==': return $this->evaluate($l) == $this->evaluate($r);
|
|
200
|
+
case '>': return $this->evaluate($l) > $this->evaluate($r);
|
|
201
|
+
case '>=': return $this->evaluate($l) >= $this->evaluate($r);
|
|
202
|
+
case '===': return $this->evaluate($l) === $this->evaluate($r);
|
|
203
|
+
case 'and': return $this->evaluate($l) and $this->evaluate($r);
|
|
204
|
+
case 'or': return $this->evaluate($l) or $this->evaluate($r);
|
|
205
|
+
case 'xor': return $this->evaluate($l) xor $this->evaluate($r);
|
|
206
|
+
case '-': return $this->evaluate($l) - $this->evaluate($r);
|
|
207
|
+
case '%': return $this->evaluate($l) % $this->evaluate($r);
|
|
208
|
+
case '*': return $this->evaluate($l) * $this->evaluate($r);
|
|
209
|
+
case '!=': return $this->evaluate($l) != $this->evaluate($r);
|
|
210
|
+
case '!==': return $this->evaluate($l) !== $this->evaluate($r);
|
|
211
|
+
case '+': return $this->evaluate($l) + $this->evaluate($r);
|
|
212
|
+
case '**': return $this->evaluate($l) ** $this->evaluate($r);
|
|
213
|
+
case '<<': return $this->evaluate($l) << $this->evaluate($r);
|
|
214
|
+
case '>>': return $this->evaluate($l) >> $this->evaluate($r);
|
|
215
|
+
case '<': return $this->evaluate($l) < $this->evaluate($r);
|
|
216
|
+
case '<=': return $this->evaluate($l) <= $this->evaluate($r);
|
|
217
|
+
case '<=>': return $this->evaluate($l) <=> $this->evaluate($r);
|
|
218
|
+
case '|>':
|
|
219
|
+
$lval = $this->evaluate($l);
|
|
220
|
+
return $this->evaluate($r)($lval);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
throw new \Exception('Should not happen');
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** @return mixed */
|
|
227
|
+
private function evaluateConstFetch(Expr\ConstFetch $expr) {
|
|
228
|
+
$name = $expr->name->toLowerString();
|
|
229
|
+
switch ($name) {
|
|
230
|
+
case 'null': return null;
|
|
231
|
+
case 'false': return false;
|
|
232
|
+
case 'true': return true;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return ($this->fallbackEvaluator)($expr);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
class Error extends \RuntimeException {
|
|
6
|
+
protected string $rawMessage;
|
|
7
|
+
/** @var array<string, mixed> */
|
|
8
|
+
protected array $attributes;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Creates an Exception signifying a parse error.
|
|
12
|
+
*
|
|
13
|
+
* @param string $message Error message
|
|
14
|
+
* @param array<string, mixed> $attributes Attributes of node/token where error occurred
|
|
15
|
+
*/
|
|
16
|
+
public function __construct(string $message, array $attributes = []) {
|
|
17
|
+
$this->rawMessage = $message;
|
|
18
|
+
$this->attributes = $attributes;
|
|
19
|
+
$this->updateMessage();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Gets the error message
|
|
24
|
+
*
|
|
25
|
+
* @return string Error message
|
|
26
|
+
*/
|
|
27
|
+
public function getRawMessage(): string {
|
|
28
|
+
return $this->rawMessage;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Gets the line the error starts in.
|
|
33
|
+
*
|
|
34
|
+
* @return int Error start line
|
|
35
|
+
* @phpstan-return -1|positive-int
|
|
36
|
+
*/
|
|
37
|
+
public function getStartLine(): int {
|
|
38
|
+
return $this->attributes['startLine'] ?? -1;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Gets the line the error ends in.
|
|
43
|
+
*
|
|
44
|
+
* @return int Error end line
|
|
45
|
+
* @phpstan-return -1|positive-int
|
|
46
|
+
*/
|
|
47
|
+
public function getEndLine(): int {
|
|
48
|
+
return $this->attributes['endLine'] ?? -1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Gets the attributes of the node/token the error occurred at.
|
|
53
|
+
*
|
|
54
|
+
* @return array<string, mixed>
|
|
55
|
+
*/
|
|
56
|
+
public function getAttributes(): array {
|
|
57
|
+
return $this->attributes;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Sets the attributes of the node/token the error occurred at.
|
|
62
|
+
*
|
|
63
|
+
* @param array<string, mixed> $attributes
|
|
64
|
+
*/
|
|
65
|
+
public function setAttributes(array $attributes): void {
|
|
66
|
+
$this->attributes = $attributes;
|
|
67
|
+
$this->updateMessage();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Sets the line of the PHP file the error occurred in.
|
|
72
|
+
*
|
|
73
|
+
* @param string $message Error message
|
|
74
|
+
*/
|
|
75
|
+
public function setRawMessage(string $message): void {
|
|
76
|
+
$this->rawMessage = $message;
|
|
77
|
+
$this->updateMessage();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Sets the line the error starts in.
|
|
82
|
+
*
|
|
83
|
+
* @param int $line Error start line
|
|
84
|
+
*/
|
|
85
|
+
public function setStartLine(int $line): void {
|
|
86
|
+
$this->attributes['startLine'] = $line;
|
|
87
|
+
$this->updateMessage();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Returns whether the error has start and end column information.
|
|
92
|
+
*
|
|
93
|
+
* For column information enable the startFilePos and endFilePos in the lexer options.
|
|
94
|
+
*/
|
|
95
|
+
public function hasColumnInfo(): bool {
|
|
96
|
+
return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Gets the start column (1-based) into the line where the error started.
|
|
101
|
+
*
|
|
102
|
+
* @param string $code Source code of the file
|
|
103
|
+
*/
|
|
104
|
+
public function getStartColumn(string $code): int {
|
|
105
|
+
if (!$this->hasColumnInfo()) {
|
|
106
|
+
throw new \RuntimeException('Error does not have column information');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return $this->toColumn($code, $this->attributes['startFilePos']);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Gets the end column (1-based) into the line where the error ended.
|
|
114
|
+
*
|
|
115
|
+
* @param string $code Source code of the file
|
|
116
|
+
*/
|
|
117
|
+
public function getEndColumn(string $code): int {
|
|
118
|
+
if (!$this->hasColumnInfo()) {
|
|
119
|
+
throw new \RuntimeException('Error does not have column information');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return $this->toColumn($code, $this->attributes['endFilePos']);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Formats message including line and column information.
|
|
127
|
+
*
|
|
128
|
+
* @param string $code Source code associated with the error, for calculation of the columns
|
|
129
|
+
*
|
|
130
|
+
* @return string Formatted message
|
|
131
|
+
*/
|
|
132
|
+
public function getMessageWithColumnInfo(string $code): string {
|
|
133
|
+
return sprintf(
|
|
134
|
+
'%s from %d:%d to %d:%d', $this->getRawMessage(),
|
|
135
|
+
$this->getStartLine(), $this->getStartColumn($code),
|
|
136
|
+
$this->getEndLine(), $this->getEndColumn($code)
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Converts a file offset into a column.
|
|
142
|
+
*
|
|
143
|
+
* @param string $code Source code that $pos indexes into
|
|
144
|
+
* @param int $pos 0-based position in $code
|
|
145
|
+
*
|
|
146
|
+
* @return int 1-based column (relative to start of line)
|
|
147
|
+
*/
|
|
148
|
+
private function toColumn(string $code, int $pos): int {
|
|
149
|
+
if ($pos > strlen($code)) {
|
|
150
|
+
throw new \RuntimeException('Invalid position information');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
$lineStartPos = strrpos($code, "\n", $pos - strlen($code));
|
|
154
|
+
if (false === $lineStartPos) {
|
|
155
|
+
$lineStartPos = -1;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return $pos - $lineStartPos;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Updates the exception message after a change to rawMessage or rawLine.
|
|
163
|
+
*/
|
|
164
|
+
protected function updateMessage(): void {
|
|
165
|
+
$this->message = $this->rawMessage;
|
|
166
|
+
|
|
167
|
+
if (-1 === $this->getStartLine()) {
|
|
168
|
+
$this->message .= ' on unknown line';
|
|
169
|
+
} else {
|
|
170
|
+
$this->message .= ' on line ' . $this->getStartLine();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser\ErrorHandler;
|
|
4
|
+
|
|
5
|
+
use PhpParser\Error;
|
|
6
|
+
use PhpParser\ErrorHandler;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Error handler that collects all errors into an array.
|
|
10
|
+
*
|
|
11
|
+
* This allows graceful handling of errors.
|
|
12
|
+
*/
|
|
13
|
+
class Collecting implements ErrorHandler {
|
|
14
|
+
/** @var Error[] Collected errors */
|
|
15
|
+
private array $errors = [];
|
|
16
|
+
|
|
17
|
+
public function handleError(Error $error): void {
|
|
18
|
+
$this->errors[] = $error;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Get collected errors.
|
|
23
|
+
*
|
|
24
|
+
* @return Error[]
|
|
25
|
+
*/
|
|
26
|
+
public function getErrors(): array {
|
|
27
|
+
return $this->errors;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Check whether there are any errors.
|
|
32
|
+
*/
|
|
33
|
+
public function hasErrors(): bool {
|
|
34
|
+
return !empty($this->errors);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Reset/clear collected errors.
|
|
39
|
+
*/
|
|
40
|
+
public function clearErrors(): void {
|
|
41
|
+
$this->errors = [];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser\ErrorHandler;
|
|
4
|
+
|
|
5
|
+
use PhpParser\Error;
|
|
6
|
+
use PhpParser\ErrorHandler;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Error handler that handles all errors by throwing them.
|
|
10
|
+
*
|
|
11
|
+
* This is the default strategy used by all components.
|
|
12
|
+
*/
|
|
13
|
+
class Throwing implements ErrorHandler {
|
|
14
|
+
public function handleError(Error $error): void {
|
|
15
|
+
throw $error;
|
|
16
|
+
}
|
|
17
|
+
}
|
webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
namespace PhpParser;
|
|
4
|
+
|
|
5
|
+
interface ErrorHandler {
|
|
6
|
+
/**
|
|
7
|
+
* Handle an error generated during lexing, parsing or some other operation.
|
|
8
|
+
*
|
|
9
|
+
* @param Error $error The error that needs to be handled
|
|
10
|
+
*/
|
|
11
|
+
public function handleError(Error $error): void;
|
|
12
|
+
}
|