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 | * Info Plugin: Displays information about various DokuWiki internals |
||
4 | * |
||
5 | * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) |
||
6 | * @author Andreas Gohr <[email protected]> |
||
7 | * @author Esther Brunner <[email protected]> |
||
8 | */ |
||
9 | class syntax_plugin_info extends DokuWiki_Syntax_Plugin |
||
10 | { |
||
11 | |||
12 | /** |
||
13 | * What kind of syntax are we? |
||
14 | */ |
||
15 | public function getType() |
||
16 | { |
||
17 | return 'substition'; |
||
18 | } |
||
19 | |||
20 | /** |
||
21 | * What about paragraphs? |
||
22 | */ |
||
23 | public function getPType() |
||
24 | { |
||
25 | return 'block'; |
||
26 | } |
||
27 | |||
28 | /** |
||
29 | * Where to sort in? |
||
30 | */ |
||
31 | public function getSort() |
||
32 | { |
||
33 | return 155; |
||
34 | } |
||
35 | |||
36 | |||
37 | /** |
||
38 | * Connect pattern to lexer |
||
39 | */ |
||
40 | public function connectTo($mode) |
||
41 | { |
||
42 | $this->Lexer->addSpecialPattern('~~INFO:\w+~~', $mode, 'plugin_info'); |
||
43 | } |
||
44 | |||
45 | /** |
||
46 | * Handle the match |
||
47 | * |
||
48 | * @param string $match The text matched by the patterns |
||
49 | * @param int $state The lexer state for the match |
||
50 | * @param int $pos The character position of the matched text |
||
51 | * @param Doku_Handler $handler The Doku_Handler object |
||
52 | * @return array Return an array with all data you want to use in render |
||
53 | */ |
||
54 | public function handle($match, $state, $pos, Doku_Handler $handler) |
||
55 | { |
||
56 | $match = substr($match, 7, -2); //strip ~~INFO: from start and ~~ from end |
||
57 | return array(strtolower($match)); |
||
58 | } |
||
59 | |||
60 | /** |
||
61 | * Create output |
||
62 | * |
||
63 | * @param string $format string output format being rendered |
||
64 | * @param Doku_Renderer $renderer the current renderer object |
||
65 | * @param array $data data created by handler() |
||
66 | * @return boolean rendered correctly? |
||
67 | */ |
||
68 | public function render($format, Doku_Renderer $renderer, $data) |
||
69 | { |
||
70 | if ($format == 'xhtml') { |
||
71 | /** @var Doku_Renderer_xhtml $renderer */ |
||
72 | //handle various info stuff |
||
73 | switch ($data[0]) { |
||
74 | case 'syntaxmodes': |
||
75 | $renderer->doc .= $this->renderSyntaxModes(); |
||
76 | break; |
||
77 | case 'syntaxtypes': |
||
78 | $renderer->doc .= $this->renderSyntaxTypes(); |
||
79 | break; |
||
80 | case 'syntaxplugins': |
||
81 | $this->renderPlugins('syntax', $renderer); |
||
82 | break; |
||
83 | case 'adminplugins': |
||
84 | $this->renderPlugins('admin', $renderer); |
||
85 | break; |
||
86 | case 'actionplugins': |
||
87 | $this->renderPlugins('action', $renderer); |
||
88 | break; |
||
89 | case 'rendererplugins': |
||
90 | $this->renderPlugins('renderer', $renderer); |
||
91 | break; |
||
92 | case 'helperplugins': |
||
93 | $this->renderPlugins('helper', $renderer); |
||
94 | break; |
||
95 | case 'authplugins': |
||
96 | $this->renderPlugins('auth', $renderer); |
||
97 | break; |
||
98 | case 'remoteplugins': |
||
99 | $this->renderPlugins('remote', $renderer); |
||
100 | break; |
||
101 | case 'helpermethods': |
||
102 | $this->renderHelperMethods($renderer); |
||
103 | break; |
||
104 | case 'datetime': |
||
105 | $renderer->doc .= date('r'); |
||
106 | break; |
||
107 | default: |
||
108 | $renderer->doc .= "no info about ".htmlspecialchars($data[0]); |
||
109 | } |
||
110 | return true; |
||
111 | } |
||
112 | return false; |
||
113 | } |
||
114 | |||
115 | /** |
||
116 | * list all installed plugins |
||
117 | * |
||
118 | * uses some of the original renderer methods |
||
119 | * |
||
120 | * @param string $type |
||
121 | * @param Doku_Renderer_xhtml $renderer |
||
122 | */ |
||
123 | protected function renderPlugins($type, Doku_Renderer_xhtml $renderer) |
||
124 | { |
||
125 | global $lang; |
||
126 | $renderer->doc .= '<ul>'; |
||
127 | |||
128 | $plugins = plugin_list($type); |
||
129 | $plginfo = array(); |
||
130 | |||
131 | // remove subparts |
||
132 | foreach ($plugins as $p) { |
||
133 | if (!$po = plugin_load($type, $p)) continue; |
||
134 | list($name,/* $part */) = explode('_', $p, 2); |
||
135 | $plginfo[$name] = $po->getInfo(); |
||
136 | } |
||
137 | |||
138 | // list them |
||
139 | foreach ($plginfo as $info) { |
||
140 | $renderer->doc .= '<li><div class="li">'; |
||
141 | $renderer->externallink($info['url'], $info['name']); |
||
142 | $renderer->doc .= ' '; |
||
143 | $renderer->doc .= '<em>'.$info['date'].'</em>'; |
||
144 | $renderer->doc .= ' '; |
||
145 | $renderer->doc .= $lang['by']; |
||
146 | $renderer->doc .= ' '; |
||
147 | $renderer->emaillink($info['email'], $info['author']); |
||
148 | $renderer->doc .= '<br />'; |
||
149 | $renderer->doc .= strtr(hsc($info['desc']), array("\n"=>"<br />")); |
||
150 | $renderer->doc .= '</div></li>'; |
||
151 | unset($po); |
||
152 | } |
||
153 | |||
154 | $renderer->doc .= '</ul>'; |
||
155 | } |
||
156 | |||
157 | /** |
||
158 | * list all installed plugins |
||
159 | * |
||
160 | * uses some of the original renderer methods |
||
161 | * |
||
162 | * @param Doku_Renderer_xhtml $renderer |
||
163 | */ |
||
164 | protected function renderHelperMethods(Doku_Renderer_xhtml $renderer) |
||
165 | { |
||
166 | $plugins = plugin_list('helper'); |
||
167 | foreach ($plugins as $p) { |
||
168 | if (!$po = plugin_load('helper', $p)) continue; |
||
169 | |||
170 | if (!method_exists($po, 'getMethods')) continue; |
||
171 | $methods = $po->getMethods(); |
||
0 ignored issues
–
show
|
|||
172 | $info = $po->getInfo(); |
||
173 | |||
174 | $hid = $this->addToToc($info['name'], 2, $renderer); |
||
175 | $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>'; |
||
176 | $doc .= '<div class="level2">'; |
||
177 | $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>'; |
||
178 | $doc .= '<pre class="code">$'.$p." = plugin_load('helper', '".$p."');</pre>"; |
||
179 | $doc .= '</div>'; |
||
180 | foreach ($methods as $method) { |
||
181 | $title = '$'.$p.'->'.$method['name'].'()'; |
||
182 | $hid = $this->addToToc($title, 3, $renderer); |
||
183 | $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>'; |
||
184 | $doc .= '<div class="level3">'; |
||
185 | $doc .= '<div class="table"><table class="inline"><tbody>'; |
||
186 | $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc']. |
||
187 | '</td></tr>'; |
||
188 | if ($method['params']) { |
||
189 | $c = count($method['params']); |
||
190 | $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>'; |
||
191 | $params = array(); |
||
192 | foreach ($method['params'] as $desc => $type) { |
||
193 | $params[] = hsc($desc).'</td><td>'.hsc($type); |
||
194 | } |
||
195 | $doc .= join('</td></tr><tr><td>', $params).'</td></tr>'; |
||
196 | } |
||
197 | if ($method['return']) { |
||
198 | $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])). |
||
199 | '</td><td>'.hsc(current($method['return'])).'</td></tr>'; |
||
200 | } |
||
201 | $doc .= '</tbody></table></div>'; |
||
202 | $doc .= '</div>'; |
||
203 | } |
||
204 | unset($po); |
||
205 | |||
206 | $renderer->doc .= $doc; |
||
207 | } |
||
208 | } |
||
209 | |||
210 | /** |
||
211 | * lists all known syntax types and their registered modes |
||
212 | * |
||
213 | * @return string |
||
214 | */ |
||
215 | protected function renderSyntaxTypes() |
||
216 | { |
||
217 | global $PARSER_MODES; |
||
218 | $doc = ''; |
||
219 | |||
220 | $doc .= '<div class="table"><table class="inline"><tbody>'; |
||
221 | foreach ($PARSER_MODES as $mode => $modes) { |
||
222 | $doc .= '<tr>'; |
||
223 | $doc .= '<td class="leftalign">'; |
||
224 | $doc .= $mode; |
||
225 | $doc .= '</td>'; |
||
226 | $doc .= '<td class="leftalign">'; |
||
227 | $doc .= join(', ', $modes); |
||
228 | $doc .= '</td>'; |
||
229 | $doc .= '</tr>'; |
||
230 | } |
||
231 | $doc .= '</tbody></table></div>'; |
||
232 | return $doc; |
||
233 | } |
||
234 | |||
235 | /** |
||
236 | * lists all known syntax modes and their sorting value |
||
237 | * |
||
238 | * @return string |
||
239 | */ |
||
240 | protected function renderSyntaxModes() |
||
241 | { |
||
242 | $modes = p_get_parsermodes(); |
||
243 | |||
244 | $compactmodes = array(); |
||
245 | foreach ($modes as $mode) { |
||
0 ignored issues
–
show
The expression
$modes of type null|array is not guaranteed to be traversable. How about adding an additional type check?
There are different options of fixing this problem.
![]() |
|||
246 | $compactmodes[$mode['sort']][] = $mode['mode']; |
||
247 | } |
||
248 | $doc = ''; |
||
249 | $doc .= '<div class="table"><table class="inline"><tbody>'; |
||
250 | |||
251 | foreach ($compactmodes as $sort => $modes) { |
||
252 | $rowspan = ''; |
||
253 | if (count($modes) > 1) { |
||
254 | $rowspan = ' rowspan="'.count($modes).'"'; |
||
255 | } |
||
256 | |||
257 | foreach ($modes as $index => $mode) { |
||
258 | $doc .= '<tr>'; |
||
259 | $doc .= '<td class="leftalign">'; |
||
260 | $doc .= $mode; |
||
261 | $doc .= '</td>'; |
||
262 | |||
263 | if ($index === 0) { |
||
264 | $doc .= '<td class="rightalign" '.$rowspan.'>'; |
||
265 | $doc .= $sort; |
||
266 | $doc .= '</td>'; |
||
267 | } |
||
268 | $doc .= '</tr>'; |
||
269 | } |
||
270 | } |
||
271 | |||
272 | $doc .= '</tbody></table></div>'; |
||
273 | return $doc; |
||
274 | } |
||
275 | |||
276 | /** |
||
277 | * Adds a TOC item |
||
278 | * |
||
279 | * @param string $text |
||
280 | * @param int $level |
||
281 | * @param Doku_Renderer_xhtml $renderer |
||
282 | * @return string |
||
283 | */ |
||
284 | protected function addToToc($text, $level, Doku_Renderer_xhtml $renderer) |
||
285 | { |
||
286 | global $conf; |
||
287 | |||
288 | $hid = ''; |
||
289 | if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])) { |
||
290 | $hid = $renderer->_headerToLink($text, true); |
||
291 | $renderer->toc[] = array( |
||
292 | 'hid' => $hid, |
||
293 | 'title' => $text, |
||
294 | 'type' => 'ul', |
||
295 | 'level' => $level - $conf['toptoclevel'] + 1 |
||
296 | ); |
||
297 | } |
||
298 | return $hid; |
||
299 | } |
||
300 | } |
||
301 | |||
302 | //Setup VIM: ex: et ts=4 : |
||
303 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.