generate a warning if plugin-generated content of HOOK_ARTICLE_BUTTON or _LEFT_BUTTON can't be parsed as valid XML
This commit is contained in:
parent
97baf3e8b9
commit
c3482fbe6b
|
@ -14,4 +14,27 @@ class Errors {
|
||||||
static function to_json(string $code, array $params = []): string {
|
static function to_json(string $code, array $params = []): string {
|
||||||
return json_encode(["error" => ["code" => $code, "params" => $params]]);
|
return json_encode(["error" => ["code" => $code, "params" => $params]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function libxml_last_error() : string {
|
||||||
|
$error = libxml_get_last_error();
|
||||||
|
$error_formatted = "";
|
||||||
|
|
||||||
|
if ($error) {
|
||||||
|
foreach (libxml_get_errors() as $error) {
|
||||||
|
if ($error->level == LIBXML_ERR_FATAL) {
|
||||||
|
// currently only the first error is reported
|
||||||
|
$error_formatted = self::format_libxml_error($error);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return UConverter::transcode($error_formatted, 'UTF-8', 'UTF-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
static function format_libxml_error(LibXMLError $error) : string {
|
||||||
|
return sprintf("LibXML error %s at line %d (column %d): %s",
|
||||||
|
$error->code, $error->line, $error->column,
|
||||||
|
$error->message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,10 +193,9 @@ class FeedParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated use Errors::format_libxml_error() instead */
|
||||||
function format_error(LibXMLError $error) : string {
|
function format_error(LibXMLError $error) : string {
|
||||||
return sprintf("LibXML error %s at line %d (column %d): %s",
|
return Errors::format_libxml_error($error);
|
||||||
$error->code, $error->line, $error->column,
|
|
||||||
$error->message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// libxml may have invalid unicode data in error messages
|
// libxml may have invalid unicode data in error messages
|
||||||
|
|
|
@ -254,6 +254,10 @@ class Feeds extends Handler_Protected {
|
||||||
|
|
||||||
$line["buttons_left"] .= $button_doc->saveXML($button_doc->firstChild);
|
$line["buttons_left"] .= $button_doc->saveXML($button_doc->firstChild);
|
||||||
}
|
}
|
||||||
|
} else if ($result) {
|
||||||
|
user_error(get_class($plugin) .
|
||||||
|
" plugin: content provided in HOOK_ARTICLE_LEFT_BUTTON is not valid XML: " .
|
||||||
|
Errors::libxml_last_error() . " $result", E_USER_WARNING);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
$line);
|
$line);
|
||||||
|
@ -273,6 +277,10 @@ class Feeds extends Handler_Protected {
|
||||||
|
|
||||||
$line["buttons"] .= $button_doc->saveXML($button_doc->firstChild);
|
$line["buttons"] .= $button_doc->saveXML($button_doc->firstChild);
|
||||||
}
|
}
|
||||||
|
} else if ($result) {
|
||||||
|
user_error(get_class($plugin) .
|
||||||
|
" plugin: content provided in HOOK_ARTICLE_BUTTON is not valid XML: " .
|
||||||
|
Errors::libxml_last_error() . " $result", E_USER_WARNING);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
$line);
|
$line);
|
||||||
|
|
|
@ -98,7 +98,7 @@ abstract class Plugin {
|
||||||
|
|
||||||
/* GLOBAL hooks are invoked in global context, only available to system plugins (loaded via .env for all users) */
|
/* GLOBAL hooks are invoked in global context, only available to system plugins (loaded via .env for all users) */
|
||||||
|
|
||||||
/** Adds buttons for article (on the right) - e.g. mail, share, add note.
|
/** Adds buttons for article (on the right) - e.g. mail, share, add note. Generated markup must be valid XML.
|
||||||
* @param array<string,mixed> $line
|
* @param array<string,mixed> $line
|
||||||
* @return string
|
* @return string
|
||||||
* @see PluginHost::HOOK_ARTICLE_BUTTON
|
* @see PluginHost::HOOK_ARTICLE_BUTTON
|
||||||
|
@ -307,7 +307,7 @@ abstract class Plugin {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds per-article buttons on the left side
|
/** Adds per-article buttons on the left side. Generated markup must be valid XML.
|
||||||
* @param array<string,mixed> $row
|
* @param array<string,mixed> $row
|
||||||
* @return string
|
* @return string
|
||||||
* @see PluginHost::HOOK_ARTICLE_LEFT_BUTTON
|
* @see PluginHost::HOOK_ARTICLE_LEFT_BUTTON
|
||||||
|
|
Loading…
Reference in New Issue