It is actually legal for a Report value to be a tuple -- the intention
is that this is a "file reference", and we make use of that in several
places to avoid needless copies in RAM. For example in data/apport:

        info['CoreDump'] = (sys.stdin, True, core_size_limit, True)

or in data/kernel_crashdump:

   pr['VmCoreLog'] = (os.fdopen(log_fd, 'rb'),)

So the problem is that __setitem__() also (erroneously) accepts lists,
it does not verify that it is actually a tuple:

        if not (isinstance(v, CompressedValue) or hasattr(v, 'isalnum') or
                (hasattr(v, '__getitem__') and (
                    len(v) == 1 or (len(v) >= 2 and v[1] in (True, False))) and
                    (hasattr(v[0], 'isalnum') or hasattr(v[0], 'read')))):
            raise TypeError("value for key %s must be a string, 
CompressedValue, or a file reference" % k)

It already does check the length and types of the arguments, though.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to apport in Ubuntu.
https://bugs.launchpad.net/bugs/1596713

Title:
  apport-cli crashes if a hook provides a python list which is a
  directory w/o files

Status in apport package in Ubuntu:
  New

Bug description:
  I was reviewing an apport hook for somebody and noticed that apport-
  cli would crash when you try to save a report (option K) if the apport
  hook does something odd.  As an example:

  1) mkdir -p /tmp/directory1/directory2
  2) modify an apport package hook to contain the following:
     contents = os.listdir('/tmp/directory1')
     report['DirContents'] = contents
  3) run apport-cli ubuntu-release-upgrader (package hook I modified)
  4) observe the following crash

  Traceback (most recent call last):
    File "/usr/bin/apport-cli", line 370, in <module>
      if not app.run_argv():
    File "/usr/lib/python3/dist-packages/apport/ui.py", line 645, in run_argv
      self.run_symptom()
    File "/usr/lib/python3/dist-packages/apport/ui.py", line 636, in run_symptom
      self.run_report_bug(script)
    File "/usr/lib/python3/dist-packages/apport/ui.py", line 489, in 
run_report_bug
      response = self.ui_present_report_details(allowed_to_report)
    File "/usr/bin/apport-cli", line 220, in ui_present_report_details
      self.report.write(f)
    File "/usr/lib/python3/dist-packages/problem_report.py", line 448, in write
      f = open(v[0], 'rb')  # file name
  FileNotFoundError: [Errno 2] No such file or directory: 'directory2'

  If DirContents is a folder that contains at least one file we see the
  following error raised instead.

  TypeError: value for key DirContents must be a string,
  CompressedValue, or a file reference

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apport/+bug/1596713/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to