code: def parse(self, data, extent):
          '''
          Parse the passed in data into a UDF Descriptor tag.
          Parameters:
           data - The data to parse.
           extent - The extent to compare against for the tag location.
          Returns:
           Nothing.
          '''
          if self._initialized:
              raise pycdlibexception.PyCdlibInternalError('UDF Tag already initialized')
          (self.tag_ident, self.desc_version, tag_checksum, reserved,
           self.tag_serial_number, desc_crc, self.desc_crc_length,
           self.tag_location) = struct.unpack_from(self.FMT, data, 0)
          if reserved != 0:
              raise pycdlibexception.PyCdlibInvalidISO('Reserved data not 0!')
          if _compute_csum(data[:16]) != tag_checksum:
              raise pycdlibexception.PyCdlibInvalidISO('Tag checksum does not match!')
          if self.tag_location != extent:
              self.tag_location = extent
          if self.desc_version not in (2, 3):
              raise pycdlibexception.PyCdlibInvalidISO('Tag version not 2 or 3')
          if (len(data) - 16) < self.desc_crc_length:
              raise pycdlibexception.PyCdlibInternalError('Not enough CRC bytes to compute (expected at least %d, got %d)' % (self.desc_crc_length, len(data) - 16))
          if desc_crc != crc_ccitt(data[16:16 + self.desc_crc_length]):
              raise pycdlibexception.PyCdlibInvalidISO('Tag CRC does not match!')
          self._initialized = True