33
2
mirror of https://github.com/joomla-extensions/jedchecker.git synced 2024-11-27 23:36:38 +00:00

Add a description for each check in the code

This commit is contained in:
Denis Ryabov 2021-03-11 01:35:15 +03:00
parent 1432595581
commit c81699b61c

View File

@ -77,61 +77,84 @@ class JedcheckerRulesLanguage extends JEDcheckerRule
foreach ($lines as $lineno => $line) foreach ($lines as $lineno => $line)
{ {
$line = trim($line); $line = trim($line);
// Check for BOM sequence
if ($lineno === 0 && strncmp($line, "\xEF\xBB\xBF", 3) === 0) if ($lineno === 0 && strncmp($line, "\xEF\xBB\xBF", 3) === 0)
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_BOM_FOUND'), 1); $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_BOM_FOUND'), 1);
// Romeve BOM for further checks
$line = substr($line, 3); $line = substr($line, 3);
} }
// Skip empty lines, comments, and section names
if ($line === '' || $line[0] === ';' || $line[0] === '[') if ($line === '' || $line[0] === ';' || $line[0] === '[')
{ {
continue; continue;
} }
// Report incorrect comment character
if ($line[0] === '#') if ($line[0] === '#')
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_INCORRECT_COMMENT') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_INCORRECT_COMMENT') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
// Check for "=" character in the line
if (strpos($line, '=') === false) if (strpos($line, '=') === false)
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_WRONG_LINE') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_WRONG_LINE') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
// Extract key and value
list ($key, $value) = explode('=', $line, 2); list ($key, $value) = explode('=', $line, 2);
$key = rtrim($key); $key = rtrim($key);
// Check for empty key
if ($key === '') if ($key === '')
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_EMPTY') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_EMPTY') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
// Check for spaces in the key name
if (strpos($key, ' ') !== false) if (strpos($key, ' ') !== false)
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_WHITESPACE') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_WHITESPACE') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
// Check for invalid characters (see https://www.php.net/manual/en/function.parse-ini-file.php)
if (strpbrk($key, '{}|&~![()^"') !== false) if (strpbrk($key, '{}|&~![()^"') !== false)
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_INVALID_CHARACTER') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_INVALID_CHARACTER') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
// Check for invalid key names (see https://www.php.net/manual/en/function.parse-ini-file.php)
if (in_array($key, array('null', 'yes', 'no', 'true', 'false', 'on', 'off', 'none'), true)) if (in_array($key, array('null', 'yes', 'no', 'true', 'false', 'on', 'off', 'none'), true))
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_RESERVED') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_KEY_RESERVED') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
$value = ltrim($value); $value = ltrim($value);
if (strlen($value) <2 || $value[0] !== '"' || substr($value, -1) !== '"') if (strlen($value) <2 || $value[0] !== '"' || substr($value, -1) !== '"')
{ {
$this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_TRANSLATION_QUOTES') . $this->report->addError($file, JText::_('COM_JEDCHECKER_LANG_TRANSLATION_QUOTES') .
'<br>' . htmlspecialchars($line), $lineno); '<br>' . htmlspecialchars($line), $lineno);
continue; continue;
} }
// Check for empty value
if ($value === '""') if ($value === '""')
{ {
$this->report->addWarning($file, JText::_('COM_JEDCHECKER_LANG_TRANSLATION_EMPTY') . $this->report->addWarning($file, JText::_('COM_JEDCHECKER_LANG_TRANSLATION_EMPTY') .
@ -139,7 +162,10 @@ class JedcheckerRulesLanguage extends JEDcheckerRule
continue; continue;
} }
// Remove quotes around
$value = substr($value, 1, -1); $value = substr($value, 1, -1);
// Check for legacy "_QQ_" code (deprecated since Joomla! 3.9 if favor of escaped double quote \"; removed in Joomla! 4)
if (strpos($value, '"_QQ_"') !== false) if (strpos($value, '"_QQ_"') !== false)
{ {
$this->report->addInfo($file, JText::_('COM_JEDCHECKER_LANG_QQ_DEPRECATED') . $this->report->addInfo($file, JText::_('COM_JEDCHECKER_LANG_QQ_DEPRECATED') .