Completed
Push — master ( ae9c65...55772a )
by Asmir
07:43 queued 05:39
created

EventDispatcher::addSubscriber()   B

Complexity

Conditions 6
Paths 10

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 6.0359

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 9
cts 10
cp 0.9
rs 8.8571
c 0
b 0
f 0
cc 6
eloc 9
nc 10
nop 1
crap 6.0359
1
<?php
2
3
/*
4
 * Copyright 2016 Johannes M. Schmitt <[email protected]>
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
namespace JMS\Serializer\EventDispatcher;
20
21
use JMS\Serializer\Exception\InvalidArgumentException;
22
23
/**
24
 * Light-weight event dispatcher.
25
 *
26
 * This implementation focuses primarily on performance, and dispatching
27
 * events for certain classes. It is not a general purpose event dispatcher.
28
 *
29
 * @author Johannes M. Schmitt <[email protected]>
30
 */
31
class EventDispatcher implements EventDispatcherInterface
32
{
33
    private $listeners = array();
34
    private $classListeners = array();
35
36 3
    public static function getDefaultMethodName($eventName)
37
    {
38 3
        return 'on' . str_replace(array('_', '.'), '', $eventName);
39
    }
40
41
    /**
42
     * Sets the listeners.
43
     *
44
     * @param array $listeners
45
     */
46
    public function setListeners(array $listeners)
47
    {
48
        $this->listeners = $listeners;
49
        $this->classListeners = array();
50
    }
51
52 20
    public function addListener($eventName, $callable, $class = null, $format = null)
53
    {
54 20
        $this->listeners[$eventName][] = array($callable, null === $class ? null : strtolower($class), $format);
55 20
        unset($this->classListeners[$eventName]);
56 20
    }
57
58 399
    public function addSubscriber(EventSubscriberInterface $subscriber)
59
    {
60 399
        foreach ($subscriber->getSubscribedEvents() as $eventData) {
61 399
            if (!isset($eventData['event'])) {
62
                throw new InvalidArgumentException(sprintf('Each event must have a "event" key.'));
63
            }
64
65 399
            $method = isset($eventData['method']) ? $eventData['method'] : self::getDefaultMethodName($eventData['event']);
66 399
            $class = isset($eventData['class']) ? strtolower($eventData['class']) : null;
67 399
            $format = isset($eventData['format']) ? $eventData['format'] : null;
68 399
            $this->listeners[$eventData['event']][] = array(array($subscriber, $method), $class, $format);
69 399
            unset($this->classListeners[$eventData['event']]);
70
        }
71 399
    }
72
73 259
    public function hasListeners($eventName, $class, $format)
74
    {
75 259
        if (!isset($this->listeners[$eventName])) {
76 227
            return false;
77
        }
78
79 241
        $loweredClass = strtolower($class);
80 241
        if (!isset($this->classListeners[$eventName][$loweredClass][$format])) {
81 241
            $this->classListeners[$eventName][$loweredClass][$format] = $this->initializeListeners($eventName, $loweredClass, $format);
82
        }
83
84 241
        return !!$this->classListeners[$eventName][$loweredClass][$format];
85
    }
86
87 250
    public function dispatch($eventName, $class, $format, Event $event)
88
    {
89 250
        if (!isset($this->listeners[$eventName])) {
90 5
            return;
91
        }
92
93 250
        $loweredClass = strtolower($class);
94 250
        if (!isset($this->classListeners[$eventName][$loweredClass][$format])) {
95 21
            $this->classListeners[$eventName][$loweredClass][$format] = $this->initializeListeners($eventName, $loweredClass, $format);
96
        }
97
98 250
        foreach ($this->classListeners[$eventName][$loweredClass][$format] as $listener) {
99
100 250
            if ($event->isPropagationStopped()) {
101 12
                break;
102
            }
103
104 250
            call_user_func($listener, $event, $eventName, $loweredClass, $format, $this);
0 ignored issues
show
Security Code Execution introduced by
$listener can contain request data and is used in code execution context(s) leading to a potential security vulnerability.

5 paths for user data to reach this point

  1. Path: Read from $_GET, and $data is assigned in NativeRequestHandler.php on line 62
  1. Read from $_GET, and $data is assigned
    in vendor/NativeRequestHandler.php on line 62
  2. $data is passed to Form::submit()
    in vendor/NativeRequestHandler.php on line 118
  3. $submittedData is passed to FormEvent::__construct()
    in vendor/Form.php on line 550
  4. FormEvent::$data is assigned
    in vendor/FormEvent.php on line 27
  5. Tainted property FormEvent::$data is read
    in vendor/FormEvent.php on line 47
  6. FormEvent::getData() returns tainted data, and $data is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 63
  7. $name is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 79
  8. $name is passed to Form::add()
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 80
  9. $child is passed to FormFactory::createNamed()
    in vendor/Form.php on line 863
  10. $name is passed to FormFactory::createNamedBuilder()
    in vendor/FormFactory.php on line 38
  11. $name is passed to ResolvedFormType::createBuilder()
    in vendor/FormFactory.php on line 76
  12. $name is passed to ResolvedFormType::newBuilder()
    in vendor/ResolvedFormType.php on line 100
  13. $name is passed to ButtonBuilder::__construct()
    in vendor/ResolvedFormType.php on line 217
  14. $name is assigned
    in vendor/ButtonBuilder.php on line 65
  15. ButtonBuilder::$name is assigned
    in vendor/ButtonBuilder.php on line 70
  16. Tainted property ButtonBuilder::$name is read
    in vendor/ButtonBuilder.php on line 534
  17. ButtonBuilder::getName() returns tainted data
    in vendor/Form.php on line 207
  18. Form::getName() returns tainted data, and $children is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 153
  19. $form is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 158
  20. $form is passed to GenericSerializationVisitor::setRoot()
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 162
  21. GenericSerializationVisitor::$root is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 220
  22. Tainted property GenericSerializationVisitor::$root is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 103
  23. GenericSerializationVisitor::visitArray() returns tainted data
    in src/JMS/Serializer/GraphNavigator.php on line 153
  24. GraphNavigator::accept() returns tainted data, and $v is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 155
  25. $v is passed through array_merge(), and GenericSerializationVisitor::$data is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 164
  26. Tainted property GenericSerializationVisitor::$data is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 141
  27. GenericSerializationVisitor::endVisitingObject() returns tainted data, and $rs is assigned
    in src/JMS/Serializer/GraphNavigator.php on line 277
  28. $rs is passed to GraphNavigator::afterVisitingObject()
    in src/JMS/Serializer/GraphNavigator.php on line 278
  29. $object is passed to ObjectEvent::__construct()
    in src/JMS/Serializer/GraphNavigator.php on line 346
  30. ObjectEvent::$object is assigned
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 31
  31. Tainted property ObjectEvent::$object is read
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 36
  32. ObjectEvent::getObject() returns tainted data, and $object is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 99
  33. $object is passed through get_parent_class(), and $parentClassName is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 101
  34. $parentClassName is passed to EventDispatcher::dispatch()
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 107
  35. $class is passed through strtolower(), and $loweredClass is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 93
  36. EventDispatcher::$classListeners is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 95
  37. Tainted property EventDispatcher::$classListeners is read, and $listener is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 98
  2. Path: Read from $_GET, and $data is assigned in NativeRequestHandler.php on line 70
  1. Read from $_GET, and $data is assigned
    in vendor/NativeRequestHandler.php on line 70
  2. $data is passed to Form::submit()
    in vendor/NativeRequestHandler.php on line 118
  3. $submittedData is passed to FormEvent::__construct()
    in vendor/Form.php on line 550
  4. FormEvent::$data is assigned
    in vendor/FormEvent.php on line 27
  5. Tainted property FormEvent::$data is read
    in vendor/FormEvent.php on line 47
  6. FormEvent::getData() returns tainted data, and $data is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 63
  7. $name is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 79
  8. $name is passed to Form::add()
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 80
  9. $child is passed to FormFactory::createNamed()
    in vendor/Form.php on line 863
  10. $name is passed to FormFactory::createNamedBuilder()
    in vendor/FormFactory.php on line 38
  11. $name is passed to ResolvedFormType::createBuilder()
    in vendor/FormFactory.php on line 76
  12. $name is passed to ResolvedFormType::newBuilder()
    in vendor/ResolvedFormType.php on line 100
  13. $name is passed to ButtonBuilder::__construct()
    in vendor/ResolvedFormType.php on line 217
  14. $name is assigned
    in vendor/ButtonBuilder.php on line 65
  15. ButtonBuilder::$name is assigned
    in vendor/ButtonBuilder.php on line 70
  16. Tainted property ButtonBuilder::$name is read
    in vendor/ButtonBuilder.php on line 534
  17. ButtonBuilder::getName() returns tainted data
    in vendor/Form.php on line 207
  18. Form::getName() returns tainted data, and $children is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 153
  19. $form is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 158
  20. $form is passed to GenericSerializationVisitor::setRoot()
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 162
  21. GenericSerializationVisitor::$root is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 220
  22. Tainted property GenericSerializationVisitor::$root is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 103
  23. GenericSerializationVisitor::visitArray() returns tainted data
    in src/JMS/Serializer/GraphNavigator.php on line 153
  24. GraphNavigator::accept() returns tainted data, and $v is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 155
  25. $v is passed through array_merge(), and GenericSerializationVisitor::$data is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 164
  26. Tainted property GenericSerializationVisitor::$data is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 141
  27. GenericSerializationVisitor::endVisitingObject() returns tainted data, and $rs is assigned
    in src/JMS/Serializer/GraphNavigator.php on line 277
  28. $rs is passed to GraphNavigator::afterVisitingObject()
    in src/JMS/Serializer/GraphNavigator.php on line 278
  29. $object is passed to ObjectEvent::__construct()
    in src/JMS/Serializer/GraphNavigator.php on line 346
  30. ObjectEvent::$object is assigned
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 31
  31. Tainted property ObjectEvent::$object is read
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 36
  32. ObjectEvent::getObject() returns tainted data, and $object is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 99
  33. $object is passed through get_parent_class(), and $parentClassName is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 101
  34. $parentClassName is passed to EventDispatcher::dispatch()
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 107
  35. $class is passed through strtolower(), and $loweredClass is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 93
  36. EventDispatcher::$classListeners is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 95
  37. Tainted property EventDispatcher::$classListeners is read, and $listener is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 98
  3. Path: Read from $_POST, and $params is assigned in NativeRequestHandler.php on line 95
  1. Read from $_POST, and $params is assigned
    in vendor/NativeRequestHandler.php on line 95
  2. $data is assigned
    in vendor/NativeRequestHandler.php on line 109
  3. $data is passed to Form::submit()
    in vendor/NativeRequestHandler.php on line 118
  4. $submittedData is passed to FormEvent::__construct()
    in vendor/Form.php on line 550
  5. FormEvent::$data is assigned
    in vendor/FormEvent.php on line 27
  6. Tainted property FormEvent::$data is read
    in vendor/FormEvent.php on line 47
  7. FormEvent::getData() returns tainted data, and $data is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 63
  8. $name is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 79
  9. $name is passed to Form::add()
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 80
  10. $child is passed to FormFactory::createNamed()
    in vendor/Form.php on line 863
  11. $name is passed to FormFactory::createNamedBuilder()
    in vendor/FormFactory.php on line 38
  12. $name is passed to ResolvedFormType::createBuilder()
    in vendor/FormFactory.php on line 76
  13. $name is passed to ResolvedFormType::newBuilder()
    in vendor/ResolvedFormType.php on line 100
  14. $name is passed to ButtonBuilder::__construct()
    in vendor/ResolvedFormType.php on line 217
  15. $name is assigned
    in vendor/ButtonBuilder.php on line 65
  16. ButtonBuilder::$name is assigned
    in vendor/ButtonBuilder.php on line 70
  17. Tainted property ButtonBuilder::$name is read
    in vendor/ButtonBuilder.php on line 534
  18. ButtonBuilder::getName() returns tainted data
    in vendor/Form.php on line 207
  19. Form::getName() returns tainted data, and $children is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 153
  20. $form is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 158
  21. $form is passed to GenericSerializationVisitor::setRoot()
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 162
  22. GenericSerializationVisitor::$root is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 220
  23. Tainted property GenericSerializationVisitor::$root is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 103
  24. GenericSerializationVisitor::visitArray() returns tainted data
    in src/JMS/Serializer/GraphNavigator.php on line 153
  25. GraphNavigator::accept() returns tainted data, and $v is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 155
  26. $v is passed through array_merge(), and GenericSerializationVisitor::$data is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 164
  27. Tainted property GenericSerializationVisitor::$data is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 141
  28. GenericSerializationVisitor::endVisitingObject() returns tainted data, and $rs is assigned
    in src/JMS/Serializer/GraphNavigator.php on line 277
  29. $rs is passed to GraphNavigator::afterVisitingObject()
    in src/JMS/Serializer/GraphNavigator.php on line 278
  30. $object is passed to ObjectEvent::__construct()
    in src/JMS/Serializer/GraphNavigator.php on line 346
  31. ObjectEvent::$object is assigned
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 31
  32. Tainted property ObjectEvent::$object is read
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 36
  33. ObjectEvent::getObject() returns tainted data, and $object is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 99
  34. $object is passed through get_parent_class(), and $parentClassName is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 101
  35. $parentClassName is passed to EventDispatcher::dispatch()
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 107
  36. $class is passed through strtolower(), and $loweredClass is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 93
  37. EventDispatcher::$classListeners is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 95
  38. Tainted property EventDispatcher::$classListeners is read, and $listener is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 98
  4. Path: Read from $_POST, and $params is assigned in NativeRequestHandler.php on line 99
  1. Read from $_POST, and $params is assigned
    in vendor/NativeRequestHandler.php on line 99
  2. $data is assigned
    in vendor/NativeRequestHandler.php on line 109
  3. $data is passed to Form::submit()
    in vendor/NativeRequestHandler.php on line 118
  4. $submittedData is passed to FormEvent::__construct()
    in vendor/Form.php on line 550
  5. FormEvent::$data is assigned
    in vendor/FormEvent.php on line 27
  6. Tainted property FormEvent::$data is read
    in vendor/FormEvent.php on line 47
  7. FormEvent::getData() returns tainted data, and $data is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 63
  8. $name is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 79
  9. $name is passed to Form::add()
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 80
  10. $child is passed to FormFactory::createNamed()
    in vendor/Form.php on line 863
  11. $name is passed to FormFactory::createNamedBuilder()
    in vendor/FormFactory.php on line 38
  12. $name is passed to ResolvedFormType::createBuilder()
    in vendor/FormFactory.php on line 76
  13. $name is passed to ResolvedFormType::newBuilder()
    in vendor/ResolvedFormType.php on line 100
  14. $name is passed to ButtonBuilder::__construct()
    in vendor/ResolvedFormType.php on line 217
  15. $name is assigned
    in vendor/ButtonBuilder.php on line 65
  16. ButtonBuilder::$name is assigned
    in vendor/ButtonBuilder.php on line 70
  17. Tainted property ButtonBuilder::$name is read
    in vendor/ButtonBuilder.php on line 534
  18. ButtonBuilder::getName() returns tainted data
    in vendor/Form.php on line 207
  19. Form::getName() returns tainted data, and $children is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 153
  20. $form is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 158
  21. $form is passed to GenericSerializationVisitor::setRoot()
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 162
  22. GenericSerializationVisitor::$root is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 220
  23. Tainted property GenericSerializationVisitor::$root is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 103
  24. GenericSerializationVisitor::visitArray() returns tainted data
    in src/JMS/Serializer/GraphNavigator.php on line 153
  25. GraphNavigator::accept() returns tainted data, and $v is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 155
  26. $v is passed through array_merge(), and GenericSerializationVisitor::$data is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 164
  27. Tainted property GenericSerializationVisitor::$data is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 141
  28. GenericSerializationVisitor::endVisitingObject() returns tainted data, and $rs is assigned
    in src/JMS/Serializer/GraphNavigator.php on line 277
  29. $rs is passed to GraphNavigator::afterVisitingObject()
    in src/JMS/Serializer/GraphNavigator.php on line 278
  30. $object is passed to ObjectEvent::__construct()
    in src/JMS/Serializer/GraphNavigator.php on line 346
  31. ObjectEvent::$object is assigned
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 31
  32. Tainted property ObjectEvent::$object is read
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 36
  33. ObjectEvent::getObject() returns tainted data, and $object is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 99
  34. $object is passed through get_parent_class(), and $parentClassName is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 101
  35. $parentClassName is passed to EventDispatcher::dispatch()
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 107
  36. $class is passed through strtolower(), and $loweredClass is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 93
  37. EventDispatcher::$classListeners is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 95
  38. Tainted property EventDispatcher::$classListeners is read, and $listener is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 98
  5. Path: Read from $_FILES, and $fileKey is assigned in NativeRequestHandler.php on line 90
  1. Read from $_FILES, and $fileKey is assigned
    in vendor/NativeRequestHandler.php on line 90
  2. $fixedFiles is assigned
    in vendor/NativeRequestHandler.php on line 91
  3. $files is assigned
    in vendor/NativeRequestHandler.php on line 96
  4. $data is assigned
    in vendor/NativeRequestHandler.php on line 109
  5. $data is passed to Form::submit()
    in vendor/NativeRequestHandler.php on line 118
  6. $submittedData is passed to FormEvent::__construct()
    in vendor/Form.php on line 550
  7. FormEvent::$data is assigned
    in vendor/FormEvent.php on line 27
  8. Tainted property FormEvent::$data is read
    in vendor/FormEvent.php on line 47
  9. FormEvent::getData() returns tainted data, and $data is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 63
  10. $name is assigned
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 79
  11. $name is passed to Form::add()
    in vendor/Extension/Core/EventListener/ResizeFormListener.php on line 80
  12. $child is passed to FormFactory::createNamed()
    in vendor/Form.php on line 863
  13. $name is passed to FormFactory::createNamedBuilder()
    in vendor/FormFactory.php on line 38
  14. $name is passed to ResolvedFormType::createBuilder()
    in vendor/FormFactory.php on line 76
  15. $name is passed to ResolvedFormType::newBuilder()
    in vendor/ResolvedFormType.php on line 100
  16. $name is passed to ButtonBuilder::__construct()
    in vendor/ResolvedFormType.php on line 217
  17. $name is assigned
    in vendor/ButtonBuilder.php on line 65
  18. ButtonBuilder::$name is assigned
    in vendor/ButtonBuilder.php on line 70
  19. Tainted property ButtonBuilder::$name is read
    in vendor/ButtonBuilder.php on line 534
  20. ButtonBuilder::getName() returns tainted data
    in vendor/Form.php on line 207
  21. Form::getName() returns tainted data, and $children is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 153
  22. $form is assigned
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 158
  23. $form is passed to GenericSerializationVisitor::setRoot()
    in src/JMS/Serializer/Handler/FormErrorHandler.php on line 162
  24. GenericSerializationVisitor::$root is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 220
  25. Tainted property GenericSerializationVisitor::$root is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 103
  26. GenericSerializationVisitor::visitArray() returns tainted data
    in src/JMS/Serializer/GraphNavigator.php on line 153
  27. GraphNavigator::accept() returns tainted data, and $v is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 155
  28. $v is passed through array_merge(), and GenericSerializationVisitor::$data is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 164
  29. Tainted property GenericSerializationVisitor::$data is read, and $rs is assigned
    in src/JMS/Serializer/GenericSerializationVisitor.php on line 141
  30. GenericSerializationVisitor::endVisitingObject() returns tainted data, and $rs is assigned
    in src/JMS/Serializer/GraphNavigator.php on line 277
  31. $rs is passed to GraphNavigator::afterVisitingObject()
    in src/JMS/Serializer/GraphNavigator.php on line 278
  32. $object is passed to ObjectEvent::__construct()
    in src/JMS/Serializer/GraphNavigator.php on line 346
  33. ObjectEvent::$object is assigned
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 31
  34. Tainted property ObjectEvent::$object is read
    in src/JMS/Serializer/EventDispatcher/ObjectEvent.php on line 36
  35. ObjectEvent::getObject() returns tainted data, and $object is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 99
  36. $object is passed through get_parent_class(), and $parentClassName is assigned
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 101
  37. $parentClassName is passed to EventDispatcher::dispatch()
    in src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php on line 107
  38. $class is passed through strtolower(), and $loweredClass is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 93
  39. EventDispatcher::$classListeners is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 95
  40. Tainted property EventDispatcher::$classListeners is read, and $listener is assigned
    in src/JMS/Serializer/EventDispatcher/EventDispatcher.php on line 98

General Strategies to prevent injection

In general, it is advisable to prevent any user-data to reach this point. This can be done by white-listing certain values:

if ( ! in_array($value, array('this-is-allowed', 'and-this-too'), true)) {
    throw new \InvalidArgumentException('This input is not allowed.');
}

For numeric data, we recommend to explicitly cast the data:

$sanitized = (integer) $tainted;
Loading history...
105
        }
106 250
    }
107
108
    /**
109
     * @param string $eventName
110
     * @param string $loweredClass
111
     * @param string $format
112
     *
113
     * @return array An array of listeners
114
     */
115 255
    protected function initializeListeners($eventName, $loweredClass, $format)
116
    {
117 255
        $listeners = array();
118 255
        foreach ($this->listeners[$eventName] as $listener) {
119 255
            if (null !== $listener[1] && $loweredClass !== $listener[1]) {
120 10
                continue;
121
            }
122 255
            if (null !== $listener[2] && $format !== $listener[2]) {
123 3
                continue;
124
            }
125
126 255
            $listeners[] = $listener[0];
127
        }
128
129 255
        return $listeners;
130
    }
131
}
132