Issues (13)

Security Analysis    not enabled

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

src/Mailxpert/Model/ArrayCollection.php (2 issues)

Upgrade to new PHP Analysis Engine

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 Mailxpert\Model;
4
5
use ArrayIterator;
6
use Closure;
7
8
/**
9
 * Date: 19/08/15
10
 * Inspired from Doctrine ArrayCollection
11
 */
12
class ArrayCollection implements Collection
13
{
14
15
    /**
16
     * An array containing the entries of this collection.
17
     *
18
     * @var array
19
     */
20
    private $elements;
21
22
    /**
23
     * Initializes a new ArrayCollection.
24
     *
25
     * @param array $elements
26
     */
27
    public function __construct(array $elements = array())
28
    {
29
        $this->elements = $elements;
30
    }
31
32
    /**
33
     * {@inheritDoc}
34
     */
35
    public function toArray()
36
    {
37
        return $this->elements;
38
    }
39
40
    /**
41
     * {@inheritDoc}
42
     */
43
    public function first()
44
    {
45
        return reset($this->elements);
46
    }
47
48
    /**
49
     * {@inheritDoc}
50
     */
51
    public function last()
52
    {
53
        return end($this->elements);
54
    }
55
56
    /**
57
     * {@inheritDoc}
58
     */
59
    public function key()
60
    {
61
        return key($this->elements);
62
    }
63
64
    /**
65
     * {@inheritDoc}
66
     */
67
    public function next()
68
    {
69
        return next($this->elements);
70
    }
71
72
    /**
73
     * {@inheritDoc}
74
     */
75
    public function current()
76
    {
77
        return current($this->elements);
78
    }
79
80
    /**
81
     * {@inheritDoc}
82
     */
83
    public function remove($key)
84
    {
85
        if (!isset($this->elements[$key]) && !array_key_exists($key, $this->elements)) {
86
            return null;
87
        }
88
89
        $removed = $this->elements[$key];
90
        unset($this->elements[$key]);
91
92
        return $removed;
93
    }
94
95
    /**
96
     * {@inheritDoc}
97
     */
98
    public function removeElement($element)
99
    {
100
        $key = array_search($element, $this->elements, true);
101
102
        if ($key === false) {
103
            return false;
104
        }
105
106
        unset($this->elements[$key]);
107
108
        return true;
109
    }
110
111
    /**
112
     * Required by interface ArrayAccess.
113
     *
114
     * {@inheritDoc}
115
     */
116
    public function offsetExists($offset)
117
    {
118
        return $this->containsKey($offset);
119
    }
120
121
    /**
122
     * Required by interface ArrayAccess.
123
     *
124
     * {@inheritDoc}
125
     */
126
    public function offsetGet($offset)
127
    {
128
        return $this->get($offset);
129
    }
130
131
    /**
132
     * Required by interface ArrayAccess.
133
     *
134
     * {@inheritDoc}
135
     */
136
    public function offsetSet($offset, $value)
137
    {
138
        if (!isset($offset)) {
139
            return $this->add($value);
140
        }
141
142
        $this->set($offset, $value);
143
144
        return true;
145
    }
146
147
    /**
148
     * Required by interface ArrayAccess.
149
     *
150
     * {@inheritDoc}
151
     */
152
    public function offsetUnset($offset)
153
    {
154
        return $this->remove($offset);
155
    }
156
157
    /**
158
     * {@inheritDoc}
159
     */
160
    public function containsKey($key)
161
    {
162
        return isset($this->elements[$key]) || array_key_exists($key, $this->elements);
163
    }
164
165
    /**
166
     * {@inheritDoc}
167
     */
168
    public function contains($element)
169
    {
170
        return in_array($element, $this->elements, true);
171
    }
172
173
    /**
174
     * {@inheritDoc}
175
     */
176 View Code Duplication
    public function exists(Closure $p)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
177
    {
178
        foreach ($this->elements as $key => $element) {
179
            if ($p($key, $element)) {
180
                return true;
181
            }
182
        }
183
184
        return false;
185
    }
186
187
    /**
188
     * {@inheritDoc}
189
     */
190
    public function indexOf($element)
191
    {
192
        return array_search($element, $this->elements, true);
193
    }
194
195
    /**
196
     * {@inheritDoc}
197
     */
198
    public function get($key)
199
    {
200
        return isset($this->elements[$key]) ? $this->elements[$key] : null;
201
    }
202
203
    /**
204
     * {@inheritDoc}
205
     */
206
    public function getKeys()
207
    {
208
        return array_keys($this->elements);
209
    }
210
211
    /**
212
     * {@inheritDoc}
213
     */
214
    public function getValues()
215
    {
216
        return array_values($this->elements);
217
    }
218
219
    /**
220
     * {@inheritDoc}
221
     */
222
    public function count()
223
    {
224
        return count($this->elements);
225
    }
226
227
    /**
228
     * {@inheritDoc}
229
     */
230
    public function set($key, $value)
231
    {
232
        $this->elements[$key] = $value;
233
    }
234
235
    /**
236
     * {@inheritDoc}
237
     */
238
    public function add($value)
239
    {
240
        $this->elements[] = $value;
241
242
        return true;
243
    }
244
245
    /**
246
     * {@inheritDoc}
247
     */
248
    public function isEmpty()
249
    {
250
        return empty($this->elements);
251
    }
252
253
    /**
254
     * Required by interface IteratorAggregate.
255
     *
256
     * {@inheritDoc}
257
     */
258
    public function getIterator()
259
    {
260
        return new ArrayIterator($this->elements);
261
    }
262
263
    /**
264
     * {@inheritDoc}
265
     */
266
    public function map(Closure $func)
267
    {
268
        return new static(array_map($func, $this->elements));
269
    }
270
271
    /**
272
     * {@inheritDoc}
273
     */
274
    public function filter(Closure $p)
275
    {
276
        return new static(array_filter($this->elements, $p));
277
    }
278
279
    /**
280
     * {@inheritDoc}
281
     */
282 View Code Duplication
    public function forAll(Closure $p)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
283
    {
284
        foreach ($this->elements as $key => $element) {
285
            if (!$p($key, $element)) {
286
                return false;
287
            }
288
        }
289
290
        return true;
291
    }
292
293
    /**
294
     * {@inheritDoc}
295
     */
296
    public function partition(Closure $p)
297
    {
298
        $matches = $noMatches = array();
299
300
        foreach ($this->elements as $key => $element) {
301
            if ($p($key, $element)) {
302
                $matches[$key] = $element;
303
            } else {
304
                $noMatches[$key] = $element;
305
            }
306
        }
307
308
        return [
309
            new static($matches),
310
            new static($noMatches),
311
        ];
312
    }
313
314
    /**
315
     * Returns a string representation of this object.
316
     *
317
     * @return string
318
     */
319
    public function __toString()
320
    {
321
        return __CLASS__.'@'.spl_object_hash($this);
322
    }
323
324
    /**
325
     * {@inheritDoc}
326
     */
327
    public function clear()
328
    {
329
        $this->elements = array();
330
    }
331
332
    /**
333
     * {@inheritDoc}
334
     */
335
    public function slice($offset, $length = null)
336
    {
337
        return array_slice($this->elements, $offset, $length, true);
338
    }
339
}
340