[Bug 1596713] Re: apport-cli crashes if a hook provides a python list which is a directory w/o files
Martin Pitt
martin.pitt at ubuntu.com
Wed Jul 6 15:07:24 UTC 2016
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
Foundations Bugs, 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
More information about the foundations-bugs
mailing list