aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Peraza <jperaza@chromium.org>2020-04-27 14:58:17 -0700
committerJoshua Peraza <jperaza@chromium.org>2020-04-27 23:33:35 +0000
commita7b621f8107a94d8cdcd49d49bca645aa3bae098 (patch)
tree3bf2f9606db55f36cd8eae68e2f7d9885942c83f
parentUse stdint.h numeric types in tests (diff)
downloadbreakpad-a7b621f8107a94d8cdcd49d49bca645aa3bae098.tar.xz
processor: Bound number of exception parameters read
Bug: 1074532 Change-Id: I769074d7cbe0a47c8c8b716275d815e4b7f6dd63 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2168816 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
-rw-r--r--src/google_breakpad/common/minidump_format.h2
-rw-r--r--src/processor/minidump_processor.cc7
-rw-r--r--src/processor/synth_minidump.cc2
3 files changed, 7 insertions, 4 deletions
diff --git a/src/google_breakpad/common/minidump_format.h b/src/google_breakpad/common/minidump_format.h
index 6eceddbb..7b36d112 100644
--- a/src/google_breakpad/common/minidump_format.h
+++ b/src/google_breakpad/common/minidump_format.h
@@ -529,7 +529,7 @@ static const size_t MDRawMemoryList_minsize = offsetof(MDRawMemoryList,
memory_ranges[0]);
-#define MD_EXCEPTION_MAXIMUM_PARAMETERS 15
+#define MD_EXCEPTION_MAXIMUM_PARAMETERS 15u
typedef struct {
uint32_t exception_code; /* Windows: MDExceptionCodeWin,
diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
index 4ea4cb70..a90e6188 100644
--- a/src/processor/minidump_processor.cc
+++ b/src/processor/minidump_processor.cc
@@ -31,6 +31,7 @@
#include <assert.h>
+#include <algorithm>
#include <string>
#include "common/scoped_ptr.h"
@@ -128,8 +129,10 @@ ProcessResult MinidumpProcessor::Process(
process_state->exception_record_.set_nested_exception_record_address(
exception->exception()->exception_record.exception_record);
process_state->exception_record_.set_address(process_state->crash_address_);
- for (uint32_t i = 0;
- i < exception->exception()->exception_record.number_parameters; i++) {
+ const uint32_t num_parameters =
+ std::min(exception->exception()->exception_record.number_parameters,
+ MD_EXCEPTION_MAXIMUM_PARAMETERS);
+ for (uint32_t i = 0; i < num_parameters; ++i) {
process_state->exception_record_.add_parameter(
exception->exception()->exception_record.exception_information[i],
// TODO(ivanpe): Populate description.
diff --git a/src/processor/synth_minidump.cc b/src/processor/synth_minidump.cc
index aa86d248..5e72c161 100644
--- a/src/processor/synth_minidump.cc
+++ b/src/processor/synth_minidump.cc
@@ -332,7 +332,7 @@ Exception::Exception(const Dump &dump,
D64(exception_address);
D32(0); // number_parameters
D32(0); // __align
- for (int i = 0; i < MD_EXCEPTION_MAXIMUM_PARAMETERS; ++i)
+ for (size_t i = 0; i < MD_EXCEPTION_MAXIMUM_PARAMETERS; ++i)
D64(0); // exception_information
context.CiteLocationIn(this);
assert(Size() == sizeof(MDRawExceptionStream));