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,93 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+ use PhpParser\Token;
7
+
8
+ final class AsymmetricVisibilityTokenEmulator extends TokenEmulator {
9
+ public function getPhpVersion(): PhpVersion {
10
+ return PhpVersion::fromComponents(8, 4);
11
+ }
12
+ public function isEmulationNeeded(string $code): bool {
13
+ $code = strtolower($code);
14
+ return strpos($code, 'public(set)') !== false ||
15
+ strpos($code, 'protected(set)') !== false ||
16
+ strpos($code, 'private(set)') !== false;
17
+ }
18
+
19
+ public function emulate(string $code, array $tokens): array {
20
+ $map = [
21
+ \T_PUBLIC => \T_PUBLIC_SET,
22
+ \T_PROTECTED => \T_PROTECTED_SET,
23
+ \T_PRIVATE => \T_PRIVATE_SET,
24
+ ];
25
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
26
+ $token = $tokens[$i];
27
+ if (isset($map[$token->id]) && $i + 3 < $c && $tokens[$i + 1]->text === '(' &&
28
+ $tokens[$i + 2]->id === \T_STRING && \strtolower($tokens[$i + 2]->text) === 'set' &&
29
+ $tokens[$i + 3]->text === ')' &&
30
+ $this->isKeywordContext($tokens, $i)
31
+ ) {
32
+ array_splice($tokens, $i, 4, [
33
+ new Token(
34
+ $map[$token->id], $token->text . '(' . $tokens[$i + 2]->text . ')',
35
+ $token->line, $token->pos),
36
+ ]);
37
+ $c -= 3;
38
+ }
39
+ }
40
+
41
+ return $tokens;
42
+ }
43
+
44
+ public function reverseEmulate(string $code, array $tokens): array {
45
+ $reverseMap = [
46
+ \T_PUBLIC_SET => \T_PUBLIC,
47
+ \T_PROTECTED_SET => \T_PROTECTED,
48
+ \T_PRIVATE_SET => \T_PRIVATE,
49
+ ];
50
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
51
+ $token = $tokens[$i];
52
+ if (isset($reverseMap[$token->id]) &&
53
+ \preg_match('/(public|protected|private)\((set)\)/i', $token->text, $matches)
54
+ ) {
55
+ [, $modifier, $set] = $matches;
56
+ $modifierLen = \strlen($modifier);
57
+ array_splice($tokens, $i, 1, [
58
+ new Token($reverseMap[$token->id], $modifier, $token->line, $token->pos),
59
+ new Token(\ord('('), '(', $token->line, $token->pos + $modifierLen),
60
+ new Token(\T_STRING, $set, $token->line, $token->pos + $modifierLen + 1),
61
+ new Token(\ord(')'), ')', $token->line, $token->pos + $modifierLen + 4),
62
+ ]);
63
+ $i += 3;
64
+ $c += 3;
65
+ }
66
+ }
67
+
68
+ return $tokens;
69
+ }
70
+
71
+ /** @param Token[] $tokens */
72
+ protected function isKeywordContext(array $tokens, int $pos): bool {
73
+ $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos);
74
+ if ($prevToken === null) {
75
+ return false;
76
+ }
77
+ return $prevToken->id !== \T_OBJECT_OPERATOR
78
+ && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR;
79
+ }
80
+
81
+ /** @param Token[] $tokens */
82
+ private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token {
83
+ for ($i = $start - 1; $i >= 0; --$i) {
84
+ if ($tokens[$i]->id === T_WHITESPACE) {
85
+ continue;
86
+ }
87
+
88
+ return $tokens[$i];
89
+ }
90
+
91
+ return null;
92
+ }
93
+ }
@@ -0,0 +1,49 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+ use PhpParser\Token;
7
+
8
+ final class AttributeEmulator extends TokenEmulator {
9
+ public function getPhpVersion(): PhpVersion {
10
+ return PhpVersion::fromComponents(8, 0);
11
+ }
12
+
13
+ public function isEmulationNeeded(string $code): bool {
14
+ return strpos($code, '#[') !== false;
15
+ }
16
+
17
+ public function emulate(string $code, array $tokens): array {
18
+ // We need to manually iterate and manage a count because we'll change
19
+ // the tokens array on the way.
20
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
21
+ $token = $tokens[$i];
22
+ if ($token->text === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '[') {
23
+ array_splice($tokens, $i, 2, [
24
+ new Token(\T_ATTRIBUTE, '#[', $token->line, $token->pos),
25
+ ]);
26
+ $c--;
27
+ continue;
28
+ }
29
+ }
30
+
31
+ return $tokens;
32
+ }
33
+
34
+ public function reverseEmulate(string $code, array $tokens): array {
35
+ // TODO
36
+ return $tokens;
37
+ }
38
+
39
+ public function preprocessCode(string $code, array &$patches): string {
40
+ $pos = 0;
41
+ while (false !== $pos = strpos($code, '#[', $pos)) {
42
+ // Replace #[ with %[
43
+ $code[$pos] = '%';
44
+ $patches[] = [$pos, 'replace', '#'];
45
+ $pos += 2;
46
+ }
47
+ return $code;
48
+ }
49
+ }
@@ -0,0 +1,26 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+
7
+ final class EnumTokenEmulator extends KeywordEmulator {
8
+ public function getPhpVersion(): PhpVersion {
9
+ return PhpVersion::fromComponents(8, 1);
10
+ }
11
+
12
+ public function getKeywordString(): string {
13
+ return 'enum';
14
+ }
15
+
16
+ public function getKeywordToken(): int {
17
+ return \T_ENUM;
18
+ }
19
+
20
+ protected function isKeywordContext(array $tokens, int $pos): bool {
21
+ return parent::isKeywordContext($tokens, $pos)
22
+ && isset($tokens[$pos + 2])
23
+ && $tokens[$pos + 1]->id === \T_WHITESPACE
24
+ && $tokens[$pos + 2]->id === \T_STRING;
25
+ }
26
+ }
@@ -0,0 +1,45 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+ use PhpParser\Token;
7
+
8
+ class ExplicitOctalEmulator extends TokenEmulator {
9
+ public function getPhpVersion(): PhpVersion {
10
+ return PhpVersion::fromComponents(8, 1);
11
+ }
12
+
13
+ public function isEmulationNeeded(string $code): bool {
14
+ return strpos($code, '0o') !== false || strpos($code, '0O') !== false;
15
+ }
16
+
17
+ public function emulate(string $code, array $tokens): array {
18
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
19
+ $token = $tokens[$i];
20
+ if ($token->id == \T_LNUMBER && $token->text === '0' &&
21
+ isset($tokens[$i + 1]) && $tokens[$i + 1]->id == \T_STRING &&
22
+ preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1]->text)
23
+ ) {
24
+ $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1]->text);
25
+ array_splice($tokens, $i, 2, [
26
+ new Token($tokenKind, '0' . $tokens[$i + 1]->text, $token->line, $token->pos),
27
+ ]);
28
+ $c--;
29
+ }
30
+ }
31
+ return $tokens;
32
+ }
33
+
34
+ private function resolveIntegerOrFloatToken(string $str): int {
35
+ $str = substr($str, 1);
36
+ $str = str_replace('_', '', $str);
37
+ $num = octdec($str);
38
+ return is_float($num) ? \T_DNUMBER : \T_LNUMBER;
39
+ }
40
+
41
+ public function reverseEmulate(string $code, array $tokens): array {
42
+ // Explicit octals were not legal code previously, don't bother.
43
+ return $tokens;
44
+ }
45
+ }
@@ -0,0 +1,60 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Token;
6
+
7
+ abstract class KeywordEmulator extends TokenEmulator {
8
+ abstract public function getKeywordString(): string;
9
+ abstract public function getKeywordToken(): int;
10
+
11
+ public function isEmulationNeeded(string $code): bool {
12
+ return strpos(strtolower($code), $this->getKeywordString()) !== false;
13
+ }
14
+
15
+ /** @param Token[] $tokens */
16
+ protected function isKeywordContext(array $tokens, int $pos): bool {
17
+ $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos);
18
+ if ($prevToken === null) {
19
+ return false;
20
+ }
21
+ return $prevToken->id !== \T_OBJECT_OPERATOR
22
+ && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR;
23
+ }
24
+
25
+ public function emulate(string $code, array $tokens): array {
26
+ $keywordString = $this->getKeywordString();
27
+ foreach ($tokens as $i => $token) {
28
+ if ($token->id === T_STRING && strtolower($token->text) === $keywordString
29
+ && $this->isKeywordContext($tokens, $i)) {
30
+ $token->id = $this->getKeywordToken();
31
+ }
32
+ }
33
+
34
+ return $tokens;
35
+ }
36
+
37
+ /** @param Token[] $tokens */
38
+ private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token {
39
+ for ($i = $start - 1; $i >= 0; --$i) {
40
+ if ($tokens[$i]->id === T_WHITESPACE) {
41
+ continue;
42
+ }
43
+
44
+ return $tokens[$i];
45
+ }
46
+
47
+ return null;
48
+ }
49
+
50
+ public function reverseEmulate(string $code, array $tokens): array {
51
+ $keywordToken = $this->getKeywordToken();
52
+ foreach ($tokens as $token) {
53
+ if ($token->id === $keywordToken) {
54
+ $token->id = \T_STRING;
55
+ }
56
+ }
57
+
58
+ return $tokens;
59
+ }
60
+ }
@@ -0,0 +1,19 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+
7
+ final class MatchTokenEmulator extends KeywordEmulator {
8
+ public function getPhpVersion(): PhpVersion {
9
+ return PhpVersion::fromComponents(8, 0);
10
+ }
11
+
12
+ public function getKeywordString(): string {
13
+ return 'match';
14
+ }
15
+
16
+ public function getKeywordToken(): int {
17
+ return \T_MATCH;
18
+ }
19
+ }
@@ -0,0 +1,60 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+ use PhpParser\Token;
7
+
8
+ final class NullsafeTokenEmulator extends TokenEmulator {
9
+ public function getPhpVersion(): PhpVersion {
10
+ return PhpVersion::fromComponents(8, 0);
11
+ }
12
+
13
+ public function isEmulationNeeded(string $code): bool {
14
+ return strpos($code, '?->') !== false;
15
+ }
16
+
17
+ public function emulate(string $code, array $tokens): array {
18
+ // We need to manually iterate and manage a count because we'll change
19
+ // the tokens array on the way
20
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
21
+ $token = $tokens[$i];
22
+ if ($token->text === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id === \T_OBJECT_OPERATOR) {
23
+ array_splice($tokens, $i, 2, [
24
+ new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos),
25
+ ]);
26
+ $c--;
27
+ continue;
28
+ }
29
+
30
+ // Handle ?-> inside encapsed string.
31
+ if ($token->id === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1])
32
+ && $tokens[$i - 1]->id === \T_VARIABLE
33
+ && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $token->text, $matches)
34
+ ) {
35
+ $replacement = [
36
+ new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos),
37
+ new Token(\T_STRING, $matches[1], $token->line, $token->pos + 3),
38
+ ];
39
+ $matchLen = \strlen($matches[0]);
40
+ if ($matchLen !== \strlen($token->text)) {
41
+ $replacement[] = new Token(
42
+ \T_ENCAPSED_AND_WHITESPACE,
43
+ \substr($token->text, $matchLen),
44
+ $token->line, $token->pos + $matchLen
45
+ );
46
+ }
47
+ array_splice($tokens, $i, 1, $replacement);
48
+ $c += \count($replacement) - 1;
49
+ continue;
50
+ }
51
+ }
52
+
53
+ return $tokens;
54
+ }
55
+
56
+ public function reverseEmulate(string $code, array $tokens): array {
57
+ // ?-> was not valid code previously, don't bother.
58
+ return $tokens;
59
+ }
60
+ }
@@ -0,0 +1,45 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\TokenEmulator\TokenEmulator;
6
+ use PhpParser\PhpVersion;
7
+ use PhpParser\Token;
8
+
9
+ class PipeOperatorEmulator extends TokenEmulator {
10
+ public function getPhpVersion(): PhpVersion {
11
+ return PhpVersion::fromComponents(8, 5);
12
+ }
13
+
14
+ public function isEmulationNeeded(string $code): bool {
15
+ return \strpos($code, '|>') !== false;
16
+ }
17
+
18
+ public function emulate(string $code, array $tokens): array {
19
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
20
+ $token = $tokens[$i];
21
+ if ($token->text === '|' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '>') {
22
+ array_splice($tokens, $i, 2, [
23
+ new Token(\T_PIPE, '|>', $token->line, $token->pos),
24
+ ]);
25
+ $c--;
26
+ }
27
+ }
28
+ return $tokens;
29
+ }
30
+
31
+ public function reverseEmulate(string $code, array $tokens): array {
32
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
33
+ $token = $tokens[$i];
34
+ if ($token->id === \T_PIPE) {
35
+ array_splice($tokens, $i, 1, [
36
+ new Token(\ord('|'), '|', $token->line, $token->pos),
37
+ new Token(\ord('>'), '>', $token->line, $token->pos + 1),
38
+ ]);
39
+ $i++;
40
+ $c++;
41
+ }
42
+ }
43
+ return $tokens;
44
+ }
45
+ }
@@ -0,0 +1,19 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+
7
+ final class PropertyTokenEmulator extends KeywordEmulator {
8
+ public function getPhpVersion(): PhpVersion {
9
+ return PhpVersion::fromComponents(8, 4);
10
+ }
11
+
12
+ public function getKeywordString(): string {
13
+ return '__property__';
14
+ }
15
+
16
+ public function getKeywordToken(): int {
17
+ return \T_PROPERTY_C;
18
+ }
19
+ }
@@ -0,0 +1,31 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+
7
+ /*
8
+ * In PHP 8.1, "readonly(" was special cased in the lexer in order to support functions with
9
+ * name readonly. In PHP 8.2, this may conflict with readonly properties having a DNF type. For
10
+ * this reason, PHP 8.2 instead treats this as T_READONLY and then handles it specially in the
11
+ * parser. This emulator only exists to handle this special case, which is skipped by the
12
+ * PHP 8.1 ReadonlyTokenEmulator.
13
+ */
14
+ class ReadonlyFunctionTokenEmulator extends KeywordEmulator {
15
+ public function getKeywordString(): string {
16
+ return 'readonly';
17
+ }
18
+
19
+ public function getKeywordToken(): int {
20
+ return \T_READONLY;
21
+ }
22
+
23
+ public function getPhpVersion(): PhpVersion {
24
+ return PhpVersion::fromComponents(8, 2);
25
+ }
26
+
27
+ public function reverseEmulate(string $code, array $tokens): array {
28
+ // Don't bother
29
+ return $tokens;
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+
7
+ final class ReadonlyTokenEmulator extends KeywordEmulator {
8
+ public function getPhpVersion(): PhpVersion {
9
+ return PhpVersion::fromComponents(8, 1);
10
+ }
11
+
12
+ public function getKeywordString(): string {
13
+ return 'readonly';
14
+ }
15
+
16
+ public function getKeywordToken(): int {
17
+ return \T_READONLY;
18
+ }
19
+
20
+ protected function isKeywordContext(array $tokens, int $pos): bool {
21
+ if (!parent::isKeywordContext($tokens, $pos)) {
22
+ return false;
23
+ }
24
+ // Support "function readonly("
25
+ return !(isset($tokens[$pos + 1]) &&
26
+ ($tokens[$pos + 1]->text === '(' ||
27
+ ($tokens[$pos + 1]->id === \T_WHITESPACE &&
28
+ isset($tokens[$pos + 2]) &&
29
+ $tokens[$pos + 2]->text === '(')));
30
+ }
31
+ }
@@ -0,0 +1,37 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+
7
+ /**
8
+ * Reverses emulation direction of the inner emulator.
9
+ */
10
+ final class ReverseEmulator extends TokenEmulator {
11
+ /** @var TokenEmulator Inner emulator */
12
+ private TokenEmulator $emulator;
13
+
14
+ public function __construct(TokenEmulator $emulator) {
15
+ $this->emulator = $emulator;
16
+ }
17
+
18
+ public function getPhpVersion(): PhpVersion {
19
+ return $this->emulator->getPhpVersion();
20
+ }
21
+
22
+ public function isEmulationNeeded(string $code): bool {
23
+ return $this->emulator->isEmulationNeeded($code);
24
+ }
25
+
26
+ public function emulate(string $code, array $tokens): array {
27
+ return $this->emulator->reverseEmulate($code, $tokens);
28
+ }
29
+
30
+ public function reverseEmulate(string $code, array $tokens): array {
31
+ return $this->emulator->emulate($code, $tokens);
32
+ }
33
+
34
+ public function preprocessCode(string $code, array &$patches): string {
35
+ return $code;
36
+ }
37
+ }
@@ -0,0 +1,30 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+ use PhpParser\Token;
7
+
8
+ /** @internal */
9
+ abstract class TokenEmulator {
10
+ abstract public function getPhpVersion(): PhpVersion;
11
+
12
+ abstract public function isEmulationNeeded(string $code): bool;
13
+
14
+ /**
15
+ * @param Token[] $tokens Original tokens
16
+ * @return Token[] Modified Tokens
17
+ */
18
+ abstract public function emulate(string $code, array $tokens): array;
19
+
20
+ /**
21
+ * @param Token[] $tokens Original tokens
22
+ * @return Token[] Modified Tokens
23
+ */
24
+ abstract public function reverseEmulate(string $code, array $tokens): array;
25
+
26
+ /** @param array{int, string, string}[] $patches */
27
+ public function preprocessCode(string $code, array &$patches): string {
28
+ return $code;
29
+ }
30
+ }
@@ -0,0 +1,98 @@
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\PhpVersion;
6
+ use PhpParser\Token;
7
+
8
+ class VoidCastEmulator extends TokenEmulator {
9
+ public function getPhpVersion(): PhpVersion {
10
+ return PhpVersion::fromComponents(8, 5);
11
+ }
12
+
13
+ public function isEmulationNeeded(string $code): bool {
14
+ return (bool)\preg_match('/\([ \t]*void[ \t]*\)/i', $code);
15
+ }
16
+
17
+ public function emulate(string $code, array $tokens): array {
18
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
19
+ $token = $tokens[$i];
20
+ if ($token->text !== '(') {
21
+ continue;
22
+ }
23
+
24
+ $numTokens = 1;
25
+ $text = '(';
26
+ $j = $i + 1;
27
+ if ($j < $c && $tokens[$j]->id === \T_WHITESPACE && preg_match('/[ \t]+/', $tokens[$j]->text)) {
28
+ $text .= $tokens[$j]->text;
29
+ $numTokens++;
30
+ $j++;
31
+ }
32
+
33
+ if ($j >= $c || $tokens[$j]->id !== \T_STRING || \strtolower($tokens[$j]->text) !== 'void') {
34
+ continue;
35
+ }
36
+
37
+ $text .= $tokens[$j]->text;
38
+ $numTokens++;
39
+ $k = $j + 1;
40
+ if ($k < $c && $tokens[$k]->id === \T_WHITESPACE && preg_match('/[ \t]+/', $tokens[$k]->text)) {
41
+ $text .= $tokens[$k]->text;
42
+ $numTokens++;
43
+ $k++;
44
+ }
45
+
46
+ if ($k >= $c || $tokens[$k]->text !== ')') {
47
+ continue;
48
+ }
49
+
50
+ $text .= ')';
51
+ $numTokens++;
52
+ array_splice($tokens, $i, $numTokens, [
53
+ new Token(\T_VOID_CAST, $text, $token->line, $token->pos),
54
+ ]);
55
+ $c -= $numTokens - 1;
56
+ }
57
+ return $tokens;
58
+ }
59
+
60
+ public function reverseEmulate(string $code, array $tokens): array {
61
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
62
+ $token = $tokens[$i];
63
+ if ($token->id !== \T_VOID_CAST) {
64
+ continue;
65
+ }
66
+
67
+ if (!preg_match('/^\(([ \t]*)(void)([ \t]*)\)$/i', $token->text, $match)) {
68
+ throw new \LogicException('Unexpected T_VOID_CAST contents');
69
+ }
70
+
71
+ $newTokens = [];
72
+ $pos = $token->pos;
73
+
74
+ $newTokens[] = new Token(\ord('('), '(', $token->line, $pos);
75
+ $pos++;
76
+
77
+ if ($match[1] !== '') {
78
+ $newTokens[] = new Token(\T_WHITESPACE, $match[1], $token->line, $pos);
79
+ $pos += \strlen($match[1]);
80
+ }
81
+
82
+ $newTokens[] = new Token(\T_STRING, $match[2], $token->line, $pos);
83
+ $pos += \strlen($match[2]);
84
+
85
+ if ($match[3] !== '') {
86
+ $newTokens[] = new Token(\T_WHITESPACE, $match[3], $token->line, $pos);
87
+ $pos += \strlen($match[3]);
88
+ }
89
+
90
+ $newTokens[] = new Token(\ord(')'), ')', $token->line, $pos);
91
+
92
+ array_splice($tokens, $i, 1, $newTokens);
93
+ $i += \count($newTokens) - 1;
94
+ $c += \count($newTokens) - 1;
95
+ }
96
+ return $tokens;
97
+ }
98
+ }