← Back to team overview

desktop-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

 

** Also affects: apport (Ubuntu)
   Importance: Undecided
       Status: New

** Changed in: apport (Ubuntu)
     Assignee: (unassigned) => Martin Pitt (pitti)

-- 
You received this bug notification because you are a member of Desktop
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:
  New
Status in apport package in Ubuntu:
  New

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