Add taint annotation and warnings to Language::convert() et al
authorBrian Wolff <bawolff+wn@gmail.com>
Sat, 1 Sep 2018 08:25:37 +0000 (08:25 +0000)
committerLegoktm <legoktm@member.fsf.org>
Sat, 1 Sep 2018 18:10:55 +0000 (18:10 +0000)
If you feed this method unescaped data, it can cause later calls
to be an XSS, which is something I think deserves a warning.

Bug: T202571
Change-Id: I34cb3da9232a22defffb80466263c2f2233822ef

languages/Language.php
languages/LanguageConverter.php

index cbdd59d..85daa14 100644 (file)
@@ -4194,6 +4194,11 @@ class Language {
        /**
         * convert text to different variants of a language.
         *
+        * @warning Glossary state is maintained between calls. This means
+        *  if you pass unescaped text to this method it can cause an XSS
+        *  in later calls to this method, even if the later calls have properly
+        *  escaped the input. Never feed this method user controlled text that
+        *  is not properly escaped!
         * @param string $text Content that has been already escaped for use in HTML
         * @return string HTML
         */
index cb0f66f..e51dca9 100644 (file)
@@ -642,8 +642,12 @@ class LanguageConverter {
         * -{flags|code1:text1;code2:text2;...}-  or
         * -{text}- in which case no conversion should take place for text
         *
-        * @param string $text Text to be converted
-        * @return string Converted text
+        * @warning Glossary state is maintained between calls. Never feed this
+        *   method input that hasn't properly been escaped as it may result in
+        *   an XSS in subsequent calls, even if those subsequent calls properly
+        *   escape things.
+        * @param string $text Text to be converted, already html escaped.
+        * @return string Converted text (html)
         */
        public function convert( $text ) {
                $variant = $this->getPreferredVariant();
@@ -653,9 +657,11 @@ class LanguageConverter {
        /**
         * Same as convert() except a extra parameter to custom variant.
         *
-        * @param string $text Text to be converted
+        * @param string $text Text to be converted, already html escaped
+        * @param-taint $text exec_html
         * @param string $variant The target variant code
         * @return string Converted text
+        * @return-taint escaped
         */
        public function convertTo( $text, $variant ) {
                global $wgDisableLangConversion;