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.
Files changed (304) hide show
  1. webshell_analyzer/__init__.py +0 -0
  2. webshell_analyzer/cli/__init__.py +0 -0
  3. webshell_analyzer/cli/cli.py +151 -0
  4. webshell_analyzer/extractor/ast_extraction/composer.json +5 -0
  5. webshell_analyzer/extractor/ast_extraction/composer.lock +77 -0
  6. webshell_analyzer/extractor/ast_extraction/src/NodeVisitor.php +85 -0
  7. webshell_analyzer/extractor/ast_extraction/src/astBuilder.php +50 -0
  8. webshell_analyzer/extractor/ast_extraction/src/astExtractor.php +50 -0
  9. webshell_analyzer/extractor/ast_extraction/src/featuresDeclare.php +36 -0
  10. webshell_analyzer/extractor/ast_extraction/vendor/autoload.php +25 -0
  11. webshell_analyzer/extractor/ast_extraction/vendor/composer/ClassLoader.php +579 -0
  12. webshell_analyzer/extractor/ast_extraction/vendor/composer/InstalledVersions.php +378 -0
  13. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_classmap.php +10 -0
  14. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_namespaces.php +9 -0
  15. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_psr4.php +10 -0
  16. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_real.php +38 -0
  17. webshell_analyzer/extractor/ast_extraction/vendor/composer/autoload_static.php +36 -0
  18. webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.json +67 -0
  19. webshell_analyzer/extractor/ast_extraction/vendor/composer/installed.php +32 -0
  20. webshell_analyzer/extractor/ast_extraction/vendor/composer/platform_check.php +26 -0
  21. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php +150 -0
  22. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +151 -0
  23. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +50 -0
  24. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +86 -0
  25. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +116 -0
  26. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +73 -0
  27. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +67 -0
  28. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +94 -0
  29. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +147 -0
  30. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
  31. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +171 -0
  32. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +223 -0
  33. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +65 -0
  34. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +145 -0
  35. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +83 -0
  36. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
  37. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Builder.php +12 -0
  38. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +375 -0
  39. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +338 -0
  40. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +6 -0
  41. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Comment.php +209 -0
  42. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
  43. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +237 -0
  44. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Error.php +173 -0
  45. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +43 -0
  46. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +17 -0
  47. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +12 -0
  48. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +31 -0
  49. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +178 -0
  50. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +71 -0
  51. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +237 -0
  52. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +282 -0
  53. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +108 -0
  54. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +230 -0
  55. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +93 -0
  56. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +49 -0
  57. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +26 -0
  58. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +45 -0
  59. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +60 -0
  60. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +19 -0
  61. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php +60 -0
  62. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php +45 -0
  63. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +19 -0
  64. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php +31 -0
  65. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php +31 -0
  66. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +37 -0
  67. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +30 -0
  68. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php +98 -0
  69. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +116 -0
  70. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Modifiers.php +85 -0
  71. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +284 -0
  72. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +44 -0
  73. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +43 -0
  74. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +33 -0
  75. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +27 -0
  76. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +36 -0
  77. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +13 -0
  78. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +36 -0
  79. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +37 -0
  80. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +33 -0
  81. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +15 -0
  82. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
  83. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +84 -0
  84. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +33 -0
  85. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +11 -0
  86. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +11 -0
  87. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +11 -0
  88. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +11 -0
  89. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +11 -0
  90. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +11 -0
  91. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +11 -0
  92. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +11 -0
  93. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +11 -0
  94. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +11 -0
  95. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +11 -0
  96. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +11 -0
  97. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +11 -0
  98. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +29 -0
  99. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +33 -0
  100. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +15 -0
  101. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +15 -0
  102. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +15 -0
  103. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +15 -0
  104. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +15 -0
  105. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +15 -0
  106. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +15 -0
  107. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +15 -0
  108. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +15 -0
  109. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +15 -0
  110. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +15 -0
  111. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +15 -0
  112. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +15 -0
  113. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +15 -0
  114. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +15 -0
  115. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +15 -0
  116. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +15 -0
  117. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +15 -0
  118. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +15 -0
  119. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +15 -0
  120. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php +15 -0
  121. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +15 -0
  122. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +15 -0
  123. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +15 -0
  124. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +15 -0
  125. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +15 -0
  126. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +15 -0
  127. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +15 -0
  128. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +37 -0
  129. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +29 -0
  130. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +29 -0
  131. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +60 -0
  132. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +11 -0
  133. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +15 -0
  134. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +16 -0
  135. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +15 -0
  136. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +11 -0
  137. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +15 -0
  138. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +11 -0
  139. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php +11 -0
  140. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +25 -0
  141. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
  142. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +29 -0
  143. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +86 -0
  144. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +15 -0
  145. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +30 -0
  146. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +29 -0
  147. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +30 -0
  148. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +29 -0
  149. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +29 -0
  150. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +33 -0
  151. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +38 -0
  152. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +38 -0
  153. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
  154. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +29 -0
  155. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +34 -0
  156. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +32 -0
  157. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +45 -0
  158. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +40 -0
  159. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +45 -0
  160. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +35 -0
  161. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +29 -0
  162. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +29 -0
  163. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +29 -0
  164. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +29 -0
  165. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +29 -0
  166. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
  167. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
  168. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +45 -0
  169. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
  170. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +37 -0
  171. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +29 -0
  172. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +29 -0
  173. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +29 -0
  174. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +29 -0
  175. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +29 -0
  176. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +33 -0
  177. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +8 -0
  178. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +40 -0
  179. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +85 -0
  180. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +32 -0
  181. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +27 -0
  182. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +29 -0
  183. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +49 -0
  184. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +49 -0
  185. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +278 -0
  186. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +29 -0
  187. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +123 -0
  188. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +105 -0
  189. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +37 -0
  190. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +15 -0
  191. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +15 -0
  192. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +17 -0
  193. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php +78 -0
  194. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +82 -0
  195. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +34 -0
  196. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +15 -0
  197. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +15 -0
  198. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +15 -0
  199. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +15 -0
  200. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +15 -0
  201. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +15 -0
  202. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +15 -0
  203. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +15 -0
  204. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php +15 -0
  205. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +15 -0
  206. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +27 -0
  207. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +161 -0
  208. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +6 -0
  209. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +39 -0
  210. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php +29 -0
  211. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +29 -0
  212. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +33 -0
  213. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +40 -0
  214. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +77 -0
  215. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +109 -0
  216. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +154 -0
  217. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +94 -0
  218. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +37 -0
  219. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +29 -0
  220. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +17 -0
  221. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
  222. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +33 -0
  223. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +29 -0
  224. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +33 -0
  225. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +29 -0
  226. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +36 -0
  227. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +44 -0
  228. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +32 -0
  229. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +29 -0
  230. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +47 -0
  231. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +50 -0
  232. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +81 -0
  233. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +29 -0
  234. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +30 -0
  235. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +41 -0
  236. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +29 -0
  237. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +46 -0
  238. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +29 -0
  239. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +40 -0
  240. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +30 -0
  241. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +37 -0
  242. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +16 -0
  243. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +121 -0
  244. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +17 -0
  245. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +29 -0
  246. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +15 -0
  247. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
  248. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +33 -0
  249. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +33 -0
  250. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +37 -0
  251. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +33 -0
  252. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +12 -0
  253. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +34 -0
  254. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +37 -0
  255. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +29 -0
  256. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +17 -0
  257. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
  258. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +33 -0
  259. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +8 -0
  260. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +27 -0
  261. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +55 -0
  262. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +16 -0
  263. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php +27 -0
  264. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Node.php +150 -0
  265. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +181 -0
  266. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +299 -0
  267. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +90 -0
  268. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +287 -0
  269. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +26 -0
  270. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +19 -0
  271. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +82 -0
  272. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +47 -0
  273. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +49 -0
  274. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +269 -0
  275. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +73 -0
  276. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +51 -0
  277. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +124 -0
  278. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +24 -0
  279. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php +2919 -0
  280. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +2917 -0
  281. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Parser.php +24 -0
  282. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +1335 -0
  283. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +42 -0
  284. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +175 -0
  285. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php +1232 -0
  286. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +51 -0
  287. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +1706 -0
  288. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/Token.php +18 -0
  289. webshell_analyzer/extractor/ast_extraction/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +71 -0
  290. webshell_analyzer/extractor/extractor.py +73 -0
  291. webshell_analyzer/extractor/lexical_extraction/lexicalExtractor.py +31 -0
  292. webshell_analyzer/extractor/statistical_extraction/statisticalExtractor.py +60 -0
  293. webshell_analyzer/model/features_selected.json +1 -0
  294. webshell_analyzer/model/model_loader.py +19 -0
  295. webshell_analyzer/model/rf_webshell_model.joblib +0 -0
  296. webshell_analyzer/modules/__init__.py +0 -0
  297. webshell_analyzer/modules/detector.py +174 -0
  298. webshell_analyzer/modules/scanner.py +68 -0
  299. webshell_analyzer-1.0.0.dist-info/METADATA +105 -0
  300. webshell_analyzer-1.0.0.dist-info/RECORD +304 -0
  301. webshell_analyzer-1.0.0.dist-info/WHEEL +5 -0
  302. webshell_analyzer-1.0.0.dist-info/entry_points.txt +2 -0
  303. webshell_analyzer-1.0.0.dist-info/licenses/LICENSE +21 -0
  304. 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,6 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class ConstExprEvaluationException extends \Exception {
6
+ }
@@ -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
+ }
@@ -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
+ }