# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: devillers.nicolas@gmail.com-20130723145539-\ # 9l7fkg5gav22p0h8 # target_branch: http://bazaar.launchpad.net/~apport-\ # hackers/apport/trunk/ # testament_sha1: 4f4df60365e3e74484764dfb8b328dea24ba095a # timestamp: 2013-07-23 16:59:24 +0200 # base_revision_id: martin.pitt@canonical.com-20130723045815-\ # s2hb9cbhtui5c7dt # # Begin patch === modified file 'apport/report.py' --- apport/report.py 2013-07-22 13:38:27 +0000 +++ apport/report.py 2013-07-23 14:55:39 +0000 @@ -675,43 +675,43 @@ out = _command_output(gdb_cmd).decode('UTF-8', errors='replace') except OSError: return - - # split the output into the various fields - part_re = re.compile('^\$\d+\s*=\s*-99$', re.MULTILINE) - parts = part_re.split(out) - # drop the gdb startup text prior to first separator - parts.pop(0) - for part in parts: - self[value_keys.pop(0)] = part.replace('\n\n', '\n.\n').strip() - - # glib's assertion has precedence, since it internally uses - # abort(), and then glib's __abort_msg is bogus - if '"ERROR:' in self.get('GLibAssertionMessage', ''): - self['AssertionMessage'] = self['GLibAssertionMessage'] - del self['GLibAssertionMessage'] - - # same reason for libnih's assertion messages - if self.get('NihAssertionMessage', '').startswith('$'): - self['AssertionMessage'] = self['NihAssertionMessage'] - del self['NihAssertionMessage'] - - # clean up AssertionMessage - if 'AssertionMessage' in self: - # chop off "$n = 0x...." prefix, drop empty ones - m = re.match('^\$\d+\s+=\s+0x[0-9a-fA-F]+\s+"(.*)"\s*$', - self['AssertionMessage']) - if m: - self['AssertionMessage'] = m.group(1) - if self['AssertionMessage'].endswith('\\n'): - self['AssertionMessage'] = self['AssertionMessage'][0:-2] - else: - del self['AssertionMessage'] - - if 'Stacktrace' in self: - self._gen_stacktrace_top() - addr_signature = self.crash_signature_addresses() - if addr_signature: - self['StacktraceAddressSignature'] = addr_signature + if not 'No symbol table info available' in out: + # split the output into the various fields + part_re = re.compile('^\$\d+\s*=\s*-99$', re.MULTILINE) + parts = part_re.split(out) + # drop the gdb startup text prior to first separator + parts.pop(0) + for part in parts: + self[value_keys.pop(0)] = part.replace('\n\n', '\n.\n').strip() + + # glib's assertion has precedence, since it internally uses + # abort(), and then glib's __abort_msg is bogus + if '"ERROR:' in self.get('GLibAssertionMessage', ''): + self['AssertionMessage'] = self['GLibAssertionMessage'] + del self['GLibAssertionMessage'] + + # same reason for libnih's assertion messages + if self.get('NihAssertionMessage', '').startswith('$'): + self['AssertionMessage'] = self['NihAssertionMessage'] + del self['NihAssertionMessage'] + + # clean up AssertionMessage + if 'AssertionMessage' in self: + # chop off "$n = 0x...." prefix, drop empty ones + m = re.match('^\$\d+\s+=\s+0x[0-9a-fA-F]+\s+"(.*)"\s*$', + self['AssertionMessage']) + if m: + self['AssertionMessage'] = m.group(1) + if self['AssertionMessage'].endswith('\\n'): + self['AssertionMessage'] = self['AssertionMessage'][0:-2] + else: + del self['AssertionMessage'] + + if 'Stacktrace' in self: + self._gen_stacktrace_top() + addr_signature = self.crash_signature_addresses() + if addr_signature: + self['StacktraceAddressSignature'] = addr_signature def _gen_stacktrace_top(self): '''Build field StacktraceTop as the top five functions of Stacktrace. # Begin bundle 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