This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace SmsaSDK\Concerns; |
||
4 | |||
5 | use ReflectionClass; |
||
6 | use SmsaSDK\Config; |
||
7 | use SmsaSDK\Exceptions\InvalidArgumentException; |
||
8 | use SmsaSDK\Exceptions\UndefinedMethodException; |
||
9 | |||
10 | trait ValidateData |
||
11 | { |
||
12 | /** |
||
13 | * validate |
||
14 | * Insert description here. |
||
15 | * |
||
16 | * @param $arguments |
||
17 | * @param $class |
||
18 | * |
||
19 | * @return |
||
20 | */ |
||
21 | 6 | private function validate($arguments, $class) |
|
0 ignored issues
–
show
Unused Code
introduced
by
![]() |
|||
22 | { |
||
23 | 6 | $this->validateMethodExistance($class); |
|
24 | |||
25 | 5 | $this->validateArgumentsType($arguments, $class); |
|
26 | |||
27 | 5 | $this->reflection = new ReflectionClass($class); |
|
0 ignored issues
–
show
The property
reflection does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() |
|||
28 | |||
29 | 5 | $this->validateMethodHasDefinedArguments($arguments, $class); |
|
30 | |||
31 | 4 | if ($this->nullValues === null) { |
|
0 ignored issues
–
show
The property
nullValues does not exist. Did you maybe forget to declare it?
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code: class MyClass { }
$x = new MyClass();
$x->foo = true;
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: class MyClass {
public $foo;
}
$x = new MyClass();
$x->foo = true;
![]() |
|||
32 | 4 | $this->validateMissingArguments($arguments, $class); |
|
33 | 2 | } |
|
34 | 3 | } |
|
35 | |||
36 | /** |
||
37 | * validateMissingArguments |
||
38 | * Insert description here. |
||
39 | * |
||
40 | * @param $arguments |
||
41 | * @param $class |
||
42 | * |
||
43 | * @return |
||
44 | */ |
||
45 | 4 | private function validateMissingArguments($arguments, $class) |
|
46 | { |
||
47 | 4 | $missingArguments = []; |
|
48 | 4 | $keys = array_keys($arguments); |
|
49 | 4 | $commonKeys = array_keys(Config::getCommonData()); |
|
50 | 4 | $properties = $this->getReflectionProperties($this->reflection); |
|
0 ignored issues
–
show
It seems like
getReflectionProperties() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the ![]() |
|||
51 | |||
52 | 4 | foreach ($properties as $key) { |
|
53 | 4 | if (!in_array($key, $keys) && !in_array($key, $commonKeys)) { |
|
54 | 2 | $missingArguments[] = $key; |
|
55 | 2 | } |
|
56 | 4 | } |
|
57 | |||
58 | 4 | if (count($missingArguments) > 0) { |
|
59 | 2 | $classBaseName = $this->getBaseName($class); |
|
60 | |||
61 | 2 | throw new InvalidArgumentException("calling the method [$classBaseName] some arguments are missing: [".implode(', ', $missingArguments).']. required arguments: ['.implode(', ', $properties).'].'); |
|
62 | } |
||
63 | 2 | } |
|
64 | |||
65 | /** |
||
66 | * validateMethodHasDefinedArguments |
||
67 | * Insert description here. |
||
68 | * |
||
69 | * @param $arguments |
||
70 | * @param $class |
||
71 | * |
||
72 | * @return |
||
73 | */ |
||
74 | 5 | private function validateMethodHasDefinedArguments($arguments, $class) |
|
75 | { |
||
76 | 5 | $unknownArguments = []; |
|
77 | |||
78 | 5 | foreach ($arguments as $key => $value) { |
|
79 | 4 | $setterMethod = $this->getSetterMethodFromKey($key); |
|
0 ignored issues
–
show
It seems like
getSetterMethodFromKey() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the ![]() |
|||
80 | 4 | if (!$this->reflection->hasMethod($setterMethod)) { |
|
81 | 1 | $unknownArguments[] = $key; |
|
82 | 1 | } |
|
83 | 5 | } |
|
84 | |||
85 | 5 | if (count($unknownArguments) > 0) { |
|
86 | 1 | $properties = $this->getReflectionProperties($this->reflection); |
|
0 ignored issues
–
show
It seems like
getReflectionProperties() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the ![]() |
|||
87 | 1 | $classBaseName = $this->getBaseName($class); |
|
88 | |||
89 | 1 | throw new InvalidArgumentException("Argument passed to the method [$classBaseName] is not expected to this method. unknown arguments: [".implode(', ', $unknownArguments).']. required arguments: ['.implode(', ', $properties).'].'); |
|
90 | } |
||
91 | 4 | } |
|
92 | |||
93 | /** |
||
94 | * validateArgumentsType |
||
95 | * Insert description here. |
||
96 | * |
||
97 | * @param $arguments |
||
98 | * @param $class |
||
99 | * |
||
100 | * @return |
||
101 | */ |
||
102 | 5 | private function validateArgumentsType($arguments, $class) |
|
103 | { |
||
104 | 5 | $classBaseName = $this->getBaseName($class); |
|
105 | |||
106 | 5 | if (!is_array($arguments)) { |
|
107 | throw new InvalidArgumentException("Arguments passed to the method [$classBaseName] should be an array, ".gettype($arguments).' given'); |
||
108 | } |
||
109 | 5 | } |
|
110 | |||
111 | /** |
||
112 | * validateMethodExistance |
||
113 | * Insert description here. |
||
114 | * |
||
115 | * @param $class |
||
116 | * |
||
117 | * @return |
||
118 | */ |
||
119 | 6 | private function validateMethodExistance($class) |
|
120 | { |
||
121 | 6 | if (!class_exists($class)) { |
|
122 | 1 | $classBaseName = $this->getBaseName($class); |
|
123 | |||
124 | 1 | throw new UndefinedMethodException("the method [$classBaseName] is not defined, there is no matching class handler at: $class"); |
|
125 | } |
||
126 | 5 | } |
|
127 | |||
128 | /** |
||
129 | * getBaseName |
||
130 | * Insert description here. |
||
131 | * |
||
132 | * @param $class |
||
133 | * |
||
134 | * @return |
||
135 | */ |
||
136 | 6 | private function getBaseName($class) |
|
137 | { |
||
138 | 6 | return preg_replace('/.*\\\\/', '', $class); |
|
139 | } |
||
140 | } |
||
141 |