diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-03-08 16:03:27 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-03-08 16:03:27 +0000 |
commit | 2fd2d585a530d0564a5ef4b1184e0767c84c93b0 (patch) | |
tree | 9febb5519f28c462818cdeedd9bec4cce0620b0b | |
parent | 98340815904801a83a55601728e300dc2b4e49ad (diff) |
DARWF: silence some warnings about conversions
Add a check for an overflow and explicitly cast the value. We would
have silently overflowed previously.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@297291 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | src/DwarfInstructions.hpp | 2 | ||||
-rw-r--r-- | src/DwarfParser.hpp | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/DwarfInstructions.hpp b/src/DwarfInstructions.hpp index 9494bb8..f3a4d2c 100644 --- a/src/DwarfInstructions.hpp +++ b/src/DwarfInstructions.hpp @@ -480,7 +480,7 @@ DwarfInstructions<A, R>::evaluateExpression(pint_t expression, A &addressSpace, case DW_OP_plus_uconst: // pop stack, add uelb128 constant, push result - *sp += addressSpace.getULEB128(p, expressionEnd); + *sp += static_cast<pint_t>(addressSpace.getULEB128(p, expressionEnd)); if (log) fprintf(stderr, "add constant\n"); break; diff --git a/src/DwarfParser.hpp b/src/DwarfParser.hpp index 7200c65..586653b 100644 --- a/src/DwarfParser.hpp +++ b/src/DwarfParser.hpp @@ -542,7 +542,8 @@ bool CFI_Parser<A>::parseInstructions(A &addressSpace, pint_t instructions, results->cfaRegister = 0; results->cfaExpression = (int64_t)p; length = addressSpace.getULEB128(p, instructionsEnd); - p += length; + assert(length < std::numeric_limits<pint_t>::max() && "pointer overflow"); + p += static_cast<pint_t>(length); _LIBUNWIND_TRACE_DWARF("DW_CFA_def_cfa_expression(expression=0x%" PRIx64 ", length=%" PRIu64 ")\n", results->cfaExpression, length); @@ -557,7 +558,8 @@ bool CFI_Parser<A>::parseInstructions(A &addressSpace, pint_t instructions, results->savedRegisters[reg].location = kRegisterAtExpression; results->savedRegisters[reg].value = (int64_t)p; length = addressSpace.getULEB128(p, instructionsEnd); - p += length; + assert(length < std::numeric_limits<pint_t>::max() && "pointer overflow"); + p += static_cast<pint_t>(length); _LIBUNWIND_TRACE_DWARF("DW_CFA_expression(reg=%" PRIu64 ", " "expression=0x%" PRIx64 ", " "length=%" PRIu64 ")\n", @@ -636,7 +638,8 @@ bool CFI_Parser<A>::parseInstructions(A &addressSpace, pint_t instructions, results->savedRegisters[reg].location = kRegisterIsExpression; results->savedRegisters[reg].value = (int64_t)p; length = addressSpace.getULEB128(p, instructionsEnd); - p += length; + assert(length < std::numeric_limits<pint_t>::max() && "pointer overflow"); + p += static_cast<pint_t>(length); _LIBUNWIND_TRACE_DWARF("DW_CFA_val_expression(reg=%" PRIu64 ", " "expression=0x%" PRIx64 ", length=%" PRIu64 ")\n", reg, results->savedRegisters[reg].value, length); |