From 4bba0571c6092ea9de8fc365ee70fb2d3d16416a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 1 Dec 2018 16:24:37 +0100 Subject: [PATCH] demangler/gcc3+: when the parameter isn't found, return a useful error. after the last argument, get_next_argument() would call get_next_argument_gcc3(), see a failure, then call get_next_argument_gcc2(). Ideally we could make different cookies for gcc2 and gcc3+ demanglers, thus avoiding this issue. Change-Id: I3904e008a0b6ba627940fb9bca1d44ddbafbcbd0 Reviewed-on: https://review.haiku-os.org/742 Reviewed-by: waddlesplash --- src/add-ons/kernel/debugger/demangle/demangle.cpp | 4 ++-- src/add-ons/kernel/debugger/demangle/gcc3+.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/debugger/demangle/demangle.cpp b/src/add-ons/kernel/debugger/demangle/demangle.cpp index 60c3626176..f6e0584bb4 100644 --- a/src/add-ons/kernel/debugger/demangle/demangle.cpp +++ b/src/add-ons/kernel/debugger/demangle/demangle.cpp @@ -46,8 +46,8 @@ get_next_argument(uint32* _cookie, const char* mangledName, char* name, if (looks_like_gcc3_symbol(mangledName)) { status_t error = get_next_argument_gcc3(_cookie, mangledName, name, nameSize, _type, _argumentLength); - if (error == B_OK) - return B_OK; + if (error == B_OK || error == B_BAD_INDEX) + return error; } // fallback is gcc2 diff --git a/src/add-ons/kernel/debugger/demangle/gcc3+.cpp b/src/add-ons/kernel/debugger/demangle/gcc3+.cpp index 46419a7714..bfa3a2edf2 100644 --- a/src/add-ons/kernel/debugger/demangle/gcc3+.cpp +++ b/src/add-ons/kernel/debugger/demangle/gcc3+.cpp @@ -3726,6 +3726,8 @@ get_next_argument_gcc3(uint32* _cookie, const char* mangledName, char* name, return B_BUFFER_OVERFLOW; case ERROR_NO_MEMORY: return B_NO_MEMORY; + case ERROR_INVALID_PARAMETER_INDEX: + return B_BAD_INDEX; case ERROR_INTERNAL: default: return B_ERROR;