← Back to team overview

touch-packages team mailing list archive

[Bug 1487174] Re: apport-retrace's build sandbox routine carries on if it can't find the package for an ExecutablePath

 

Somehow the error tracker is receiving plenty of crash reports from
applications that aren't part of Ubuntu, so we do end up in a situation
where an unknown ExecutablePath is some what common.

While the first install_packages() call doesn't do much because pkgs is
empty, it stills creates a sandbox and updates the packages in it, and
that seems unnecessary if pkgs is empty.

-- 
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/1487174

Title:
  apport-retrace's build sandbox routine carries on if it can't find the
  package for an ExecutablePath

Status in Apport:
  Fix Released
Status in apport package in Ubuntu:
  Fix Committed

Bug description:
  In the event that a package which provides an ExecutablePath or
  InterpreterPath can not be found apport will carry on building the
  sandbox but then exits a short while later (the last line in the
  pasted code). I think it'd be better if apport just quit earlier.

  Here's the code in question from sandboxutils.py:

      # package hooks might reassign Package:, check that we have the originally
      # crashing binary
      for path in ('InterpreterPath', 'ExecutablePath'):
          if path in report:
              pkg = apport.packaging.get_file_package(report[path], True, pkgmap_cache_dir,
                                                      release=report['DistroRelease'],
                                                      arch=report.get('Architecture'))
              if pkg:
                  apport.log('Installing extra package %s to get %s' % (pkg, path), log_timestamps)
                  pkgs.append((pkg, pkg_versions.get(pkg)))
              else:   
                  apport.warning('Cannot find package which ships %s', path)

      # unpack packages for executable using cache and sandbox
      if pkgs:
          try:
              outdated_msg += apport.packaging.install_packages(
                  sandbox_dir, config_dir, report['DistroRelease'], pkgs,
                  verbose, cache_dir, permanent_rootdir,
                  architecture=report.get('Architecture'), origins=origins)
          except SystemError as e:
              apport.fatal(str(e))

      # sanity check: for a packaged binary we require having the executable in
      # the sandbox; TODO: for an unpackage binary we don't currently copy its
      # potential local library dependencies (like those in build trees) into the
      # sandbox, and we call gdb/valgrind on the binary outside the sandbox.
      if 'Package' in report:
          for path in ('InterpreterPath', 'ExecutablePath'):
              if path in report and not os.path.exists(sandbox_dir + report[path]):
                  apport.fatal('%s %s does not exist (report specified package %s)',
                               path, sandbox_dir + report[path], report['Package'])

  Instead of warning with ('Cannot find package which ships %s', path) I
  think that should be a fatal error. It'd probably be optimal to even
  move the check for the crashing binary to the earliest place possible
  in make_sandbox.

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