From e20401ca99c82ac4b0cf39e87b4771388360a211 Mon Sep 17 00:00:00 2001 From: Dan Robertson Date: Sat, 28 Apr 2018 03:18:00 +0000 Subject: [PATCH] rust: Fix null deref when casting (PR 23124) Fix a null dereference when casting a value to a unit type. --- gdb/ChangeLog | 6 ++++++ gdb/rust-exp.y | 7 +++++-- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.rust/expr.exp | 4 +++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cd86be7fb3..102d54b442 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-04-28 Dan Robertson + + PR rust/23124 + * gdb/rust-exp.y (convert_params_to_types): Ensure that the params pointer + is not null before dereferencing it. + 2018-04-26 Andrzej Kaczmarek PR remote/9665 diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y index b661a803e3..865959f7d9 100644 --- a/gdb/rust-exp.y +++ b/gdb/rust-exp.y @@ -2007,8 +2007,11 @@ convert_params_to_types (struct parser_state *state, rust_op_vector *params) { std::vector result; - for (const rust_op *op : *params) - result.push_back (convert_ast_to_type (state, op)); + if (params != nullptr) + { + for (const rust_op *op : *params) + result.push_back (convert_ast_to_type (state, op)); + } return result; } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 34da102c62..c52fa15335 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-04-28 Dan Robertson + + PR rust/23124 + * gdb.rust/expr.exp: Test that the unit type is correctly parsed + when casting. + 2018-04-26 Pedro Alves * gdb.base/gnu-ifunc.exp (set-break): Test that GDB resolves diff --git a/gdb/testsuite/gdb.rust/expr.exp b/gdb/testsuite/gdb.rust/expr.exp index 0bc0630854..22e6b49b54 100644 --- a/gdb/testsuite/gdb.rust/expr.exp +++ b/gdb/testsuite/gdb.rust/expr.exp @@ -133,7 +133,9 @@ gdb_test "print \[23usize; 4\]" " = \\\[23, 23, 23, 23\\\]" gdb_test "ptype \[23usize; 4\]" " = \\\[usize; 4\\\]" gdb_test "print \[mut 23usize; 4\]" " = \\\[23, 23, 23, 23\\\]" -# Test a lexer corner case. +# Test lexer corner cases. +gdb_test "print 0x0 as *const ()" " = \\\(\\\(\\\) \\*\\\) 0x0" +gdb_test "print 0x0 as fn(i64) -> ()" " = \\\(\\\(\\\) \\\(\\*\\\)\\\(i64\\\)\\\) 0x0" gdb_test "print r#" "syntax error in expression, near `#'\\." gdb_test "printf \"%d %d\\n\", 23+1, 23-1" "24 22" -- 2.17.0