This file is indexed.

/usr/lib/python2.7/dist-packages/jpylyzer/etpatch.py is in python-jpylyzer 1.17.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

import xml.etree.ElementTree as ET
from byteconv import bytesToText
from byteconv import removeControlCharacters
import config

# TODO:
# 1) Find out whether these patches are necessary
# 2) learn how to write and test patches properly


# I don't want to mess with ANYthing :)
def tostring(elem, enc, meth):
    return ET.tostring(elem, enc, meth)


def fromstring(text):
    return ET.fromstring(text)


def SubElement(parent, tag):
    return ET.SubElement(parent, tag)


class Element(ET.Element):

    # Replacement for ET's 'findtext' function, which has a bug
    # that will return empty string if text field contains integer with
    # value of zero (0); If there is no match, return None
    def findElementText(self, match):
        elt = self.find(match)
        if elt is not None:
            return(elt.text)
        else:
            return(None)

    def findAllText(self, match):
        # Searches element and returns list that contains 'Text' attribute
        # of all matching sub-elements. Returns empty list if element
        # does not exist

        try:
            return [result.text for result in self.findall(match)]
        except:
            return []

    def appendChildTagWithText(self, tag, text):
        # Append childnode with text

        el = ET.SubElement(self, tag)
        el.text = text

    def appendIfNotEmpty(self, subelement):
        # Append sub-element, but only if subelement is not empty

        if len(subelement) != 0:
            self.append(subelement)

    def makeHumanReadable(self, remapTable={}):
        # Takes element object, and returns a modified version in which all
        # non-printable 'text' fields (which may contain numeric data or binary strings)
        # are replaced by printable strings
        #
        # Property values in original tree may be mapped to alternative (more user-friendly)
        # reportable values using a remapTable, which is a nested dictionary.

        for elt in self.iter():
            # Text field of this element
            textIn = elt.text

            # Tag name
            tag = elt.tag

            # Step 1: replace property values by values defined in enumerationsMap,
            # if applicable
            try:
                # If tag is in enumerationsMap, replace property values
                parameterMap = remapTable[tag]
                try:
                    # Map original property values to values in dictionary
                    remappedValue = parameterMap[textIn]
                except KeyError:
                    # If value doesn't match any key: use original value
                    # instead
                    remappedValue = textIn
            except KeyError:
                # If tag doesn't match any key in enumerationsMap, use original
                # value
                remappedValue = textIn

            # Step 2: convert all values to text strings.

            # First set up list of all numeric data types,
            # which is dependent on the Python version used

            if config.PYTHON_VERSION.startswith(config.PYTHON_2):
                # Python 2.x
                numericTypes = [int, long, float, bool]
                # Long type is deprecated in Python 3.x!
            else:
                numericTypes = [int, float, bool]

            # Convert

            if remappedValue != None:
                # Data type
                textType = type(remappedValue)

                # Convert text field, depending on type
                if textType == bytes:
                    textOut = bytesToText(remappedValue)
                elif textType in numericTypes:
                    textOut = str(remappedValue)
                else:
                    textOut = removeControlCharacters(remappedValue)

                # Update output tree
                elt.text = textOut

    def toxml(self, indent="  "):
        return(ET.tostring(self, 'UTF-8', 'xml'))

        # Disabled pretty-printing for now as minidom appears to choke on
        # entity references, i.e. code below will go wrong:
        #
        # return minidom.parseString(selfAsString).toprettyxml(indent)