[all-commits] [llvm/llvm-project] 9a7672: [lldb] Fix crash in "help memory read"
David Spickett via All-commits
all-commits at lists.llvm.org
Tue Jan 19 01:54:40 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 9a7672ac4980bca8829814e1e49e1c201a5bf9b6
https://github.com/llvm/llvm-project/commit/9a7672ac4980bca8829814e1e49e1c201a5bf9b6
Author: David Spickett <david.spickett at linaro.org>
Date: 2021-01-19 (Tue, 19 Jan 2021)
Changed paths:
M lldb/include/lldb/Utility/OptionDefinition.h
M lldb/test/API/commands/help/TestHelp.py
Log Message:
-----------
[lldb] Fix crash in "help memory read"
When a command option does not have a short version
(e.g. -f for --file), we use an arbitrary value in the
short_option field to mark it as invalid.
(though this value is unqiue to be used later for other
things)
We check that this short option is valid to print using
llvm::isPrint. This implicitly casts our int to char,
meaning we check the last char of any short_option value.
Since the arbitrary value we chose for these options is
some shortened hex version of the name, this returned true
even for invalid values.
Since llvm::isPrint returns true we later call std::islower
and/or std::isupper on the short_option value. (the int)
Calling these functions with something that cannot be validly
converted to unsigned char is undefined. Somehow we got/get
away with this but for me compiling with g++-9 I got a crash
for "help memory read".
The other command that uses this is "target variable" but that
didn't crash for unknown reasons.
Checking that short_option can fit into an unsigned char before
we call llvm::isPrint means we will not attempt to call islower/upper
on these options since we have no reason to print them.
This also fixes bogus short options being shown for "memory read"
and target variable.
For "target variable", before:
-e <filename> ( --file <filename> )
-b <filename> ( --shlib <filename> )
After:
--file <filename>
--shlib <filename>
(note that the bogus short options are just the bottom byte of our
arbitrary short_option value)
Reviewed By: labath
Differential Revision: https://reviews.llvm.org/D94917
More information about the All-commits
mailing list