Yapeal /
yapeal-ng
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 | declare(strict_types = 1); |
||
| 3 | /** |
||
| 4 | * Contains class EveApiWiring. |
||
| 5 | * |
||
| 6 | * PHP version 7.0 |
||
| 7 | * |
||
| 8 | * LICENSE: |
||
| 9 | * This file is part of Yet Another Php Eve Api Library also know as Yapeal |
||
| 10 | * which can be used to access the Eve Online API data and place it into a |
||
| 11 | * database. |
||
| 12 | * Copyright (C) 2016-2017 Michael Cummings |
||
| 13 | * |
||
| 14 | * This program is free software: you can redistribute it and/or modify it |
||
| 15 | * under the terms of the GNU Lesser General Public License as published by the |
||
| 16 | * Free Software Foundation, either version 3 of the License, or (at your |
||
| 17 | * option) any later version. |
||
| 18 | * |
||
| 19 | * This program is distributed in the hope that it will be useful, but WITHOUT |
||
| 20 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||
| 21 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License |
||
| 22 | * for more details. |
||
| 23 | * |
||
| 24 | * You should have received a copy of the GNU Lesser General Public License |
||
| 25 | * along with this program. If not, see |
||
| 26 | * <http://spdx.org/licenses/LGPL-3.0.html>. |
||
| 27 | * |
||
| 28 | * You should be able to find a copy of this license in the COPYING-LESSER.md |
||
| 29 | * file. A copy of the GNU GPL should also be available in the COPYING.md file. |
||
| 30 | * |
||
| 31 | * @copyright 2016-2017 Michael Cummings |
||
| 32 | * @license LGPL-3.0+ |
||
| 33 | * @author Michael Cummings <[email protected]> |
||
| 34 | */ |
||
| 35 | namespace Yapeal\Configuration; |
||
| 36 | |||
| 37 | use Yapeal\Container\ContainerInterface; |
||
| 38 | use Yapeal\Event\MediatorInterface; |
||
| 39 | |||
| 40 | /** |
||
| 41 | * Class EveApiWiring. |
||
| 42 | */ |
||
| 43 | class EveApiWiring implements WiringInterface |
||
| 44 | { |
||
| 45 | /** |
||
| 46 | * @param ContainerInterface $dic |
||
| 47 | * |
||
| 48 | * @throws \LogicException |
||
| 49 | */ |
||
| 50 | public function wire(ContainerInterface $dic) |
||
| 51 | { |
||
| 52 | /** |
||
| 53 | * @var MediatorInterface $mediator |
||
| 54 | */ |
||
| 55 | $mediator = $dic['Yapeal.Event.Callable.Mediator']; |
||
| 56 | $this->wireListeners($dic, $mediator) |
||
| 57 | ->wireCreator($dic, $mediator); |
||
| 58 | } |
||
| 59 | /** |
||
| 60 | * @param ContainerInterface $dic |
||
| 61 | * |
||
| 62 | * @return array |
||
| 63 | */ |
||
| 64 | private function getFilteredEveApiListenerList(ContainerInterface $dic): array |
||
| 65 | { |
||
| 66 | clearstatcache(true); |
||
| 67 | $globPath = $dic['Yapeal.EveApi.dir'] . '{Account,Api,Char,Corp,Eve,Map,Server}/*.php'; |
||
| 68 | $fileNames = glob($globPath, GLOB_NOESCAPE | GLOB_BRACE); |
||
| 69 | if (false === $fileNames) { |
||
| 70 | $fileNames = []; |
||
| 71 | } |
||
| 72 | return $fileNames; |
||
| 73 | } |
||
| 74 | /** |
||
| 75 | * @param ContainerInterface $dic |
||
| 76 | * @param MediatorInterface $mediator |
||
| 77 | */ |
||
| 78 | private function wireCreator(ContainerInterface $dic, MediatorInterface $mediator) |
||
| 79 | { |
||
| 80 | if (empty($dic['Yapeal.EveApi.Callable.Creator'])) { |
||
| 81 | /** |
||
| 82 | * @param ContainerInterface $dic |
||
| 83 | * |
||
| 84 | * @return \Yapeal\EveApi\Creator |
||
| 85 | * @throws \LogicException |
||
| 86 | */ |
||
| 87 | $dic['Yapeal.EveApi.Callable.Creator'] = function (ContainerInterface $dic) { |
||
| 88 | $loader = new \Twig_Loader_Filesystem($dic['Yapeal.EveApi.dir']); |
||
| 89 | $twig = new \Twig_Environment($loader, |
||
| 90 | ['debug' => true, 'strict_variables' => true, 'autoescape' => false]); |
||
| 91 | $filter = new \Twig_SimpleFilter('ucFirst', function ($value) { |
||
| 92 | return ucfirst($value); |
||
| 93 | }); |
||
| 94 | $twig->addFilter($filter); |
||
| 95 | $filter = new \Twig_SimpleFilter('lcFirst', function ($value) { |
||
| 96 | return lcfirst($value); |
||
| 97 | }); |
||
| 98 | $twig->addFilter($filter); |
||
| 99 | /** |
||
| 100 | * @var \Yapeal\EveApi\Creator $create |
||
| 101 | */ |
||
| 102 | $create = new $dic['Yapeal.EveApi.Classes.create']($twig, $dic['Yapeal.EveApi.dir']); |
||
| 103 | if (!empty($dic['Yapeal.Create.overwrite'])) { |
||
| 104 | $create->setOverwrite($dic['Yapeal.Create.overwrite']); |
||
| 105 | } |
||
| 106 | return $create; |
||
| 107 | }; |
||
| 108 | $mediator->addServiceListener('Yapeal.EveApi.create', |
||
| 109 | ['Yapeal.EveApi.Callable.Creator', 'createEveApi'], |
||
| 110 | 'last'); |
||
| 111 | } |
||
| 112 | } |
||
| 113 | /** |
||
| 114 | * @param ContainerInterface $dic |
||
| 115 | * @param MediatorInterface $mediator |
||
| 116 | * |
||
| 117 | * @return self Fluent interface. |
||
| 118 | */ |
||
| 119 | private function wireListeners(ContainerInterface $dic, MediatorInterface $mediator): self |
||
| 120 | { |
||
| 121 | /** |
||
| 122 | * @var \Yapeal\Sql\CommonSqlQueries $csq |
||
| 123 | * @var \Yapeal\Sql\ConnectionInterface $connection |
||
| 124 | * @var bool $preserve |
||
| 125 | */ |
||
| 126 | $listeners = $this->getFilteredEveApiListenerList($dic); |
||
| 127 | $csq = $dic['Yapeal.Sql.Callable.CommonQueries']; |
||
| 128 | $connection = $dic['Yapeal.Sql.Callable.Connection']; |
||
| 129 | $preserve = $dic['Yapeal.EveApi.Parameters.preserve']; |
||
| 130 | foreach ($listeners as $listener) { |
||
| 131 | $service = sprintf('%1$s.%2$s.%3$s', |
||
| 132 | 'Yapeal.EveApi.Callable', |
||
| 133 | basename(dirname($listener)), |
||
| 134 | basename($listener, '.php')); |
||
| 135 | if (empty($dic[$service])) { |
||
| 136 | /** |
||
| 137 | * @return \Yapeal\CommonToolsInterface|\Yapeal\Event\EveApiPreserverInterface |
||
| 138 | */ |
||
| 139 | $dic[$service] = function () use ($connection, $csq, $preserve, $service) { |
||
| 140 | $class = '\\' . str_replace('.', '\\', $service); |
||
| 141 | /** |
||
| 142 | * @var \Yapeal\CommonToolsInterface|\Yapeal\Event\EveApiPreserverInterface $callable |
||
| 143 | */ |
||
| 144 | $callable = new $class(); |
||
| 145 | $callable->setCsq($csq) |
||
|
0 ignored issues
–
show
|
|||
| 146 | ->setPdo($connection); |
||
| 147 | if (false === strpos($service, 'Section')) { |
||
| 148 | $callable->setPreserve($preserve); |
||
|
0 ignored issues
–
show
The method
setPreserve does only exist in Yapeal\Event\EveApiPreserverInterface, but not in Yapeal\CommonToolsInterface.
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
Loading history...
|
|||
| 149 | } |
||
| 150 | return $callable; |
||
| 151 | }; |
||
| 152 | } |
||
| 153 | $mediator->addServiceListener($service . '.start', [$service, 'startEveApi'], 'last'); |
||
| 154 | if (false === strpos($listener, 'Section')) { |
||
| 155 | $mediator->addServiceListener($service . '.preserve', [$service, 'preserveEveApi'], 'last'); |
||
| 156 | } |
||
| 157 | } |
||
| 158 | return $this; |
||
| 159 | } |
||
| 160 | } |
||
| 161 |
It seems like the method you are trying to call exists only in some of the possible types.
Let’s take a look at an example:
Available Fixes
Add an additional type-check:
Only allow a single type to be passed if the variable comes from a parameter: