#3524 encode invalid XML characters
Closed 2 years ago by tkopecek. Opened 2 years ago by tkopecek.
tkopecek/koji issue3523  into  master

file modified
+6 -1
@@ -2806,7 +2806,12 @@ 

          return ret

  

      def _read_xmlrpc_response(self, response):

-         p, u = getparser()

+         try:

+             # to convert encoded bytes

+             p, u = getparser(use_builtin_types=True)

+         except TypeError:

+             # fallback python < 3.4

+             p, u = getparser()

          for chunk in response.iter_content(8192):

              if self.opts.get('debug_xmlrpc', False):

                  self.logger.debug("body: %r" % chunk)

file modified
+10
@@ -20,6 +20,8 @@ 

  class ExtendedMarshaller(xmlrpc_client.Marshaller):

  

      dispatch = xmlrpc_client.Marshaller.dispatch.copy()

+     # https://www.w3.org/TR/xml/#Unicode

+     xml_forbidden_chars = re.compile('[\x00-\x08\x0b-\x0c\x0e-\x1f]', re.UNICODE)

  

      def _dump(self, value, write):

          # Parent class is unfriendly to subclasses :-/
@@ -59,6 +61,14 @@ 

      except AttributeError:

          dispatch[re._pattern_type] = dump_re

  

+     def dump_unicode_bytes(self, value, write):

+         # find illegal chars and encode them as a base64

+         if self.xml_forbidden_chars.search(value):

+             return self.dump_bytes(value.encode(), write)

+         else:

+             return self.dump_unicode(value, write)

+     dispatch[str] = dump_unicode_bytes

+ 

  

  if six.PY2:

      ExtendedMarshaller.dispatch[long] = ExtendedMarshaller.dump_int  # noqa: F821

1 new commit added

  • client-side parsing
2 years ago

Pull-Request has been closed by tkopecek

2 years ago
Metadata