diff options
author | Tom Tromey <tromey@adacore.com> | 2024-11-18 13:47:22 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-12-09 14:17:21 -0700 |
commit | 2134b0b4a5ff493878386183dfd8a735b5334ad7 (patch) | |
tree | e9b318cc897c5b3fdffbe6f37f97c8d8b29504e6 /gdb | |
parent | 523a46ee9795bbec2d1d5cf7e434adc2a3044f94 (diff) | |
download | binutils-2134b0b4a5ff493878386183dfd8a735b5334ad7.zip binutils-2134b0b4a5ff493878386183dfd8a735b5334ad7.tar.gz binutils-2134b0b4a5ff493878386183dfd8a735b5334ad7.tar.bz2 |
Reject non-string types in gdb.Value.lazy_string
Currently, gdb.Value.lazy_string will allow the conversion of any
object to a "lazy string". However, this was never the intent and is
weird besides. This patch changes this code to correctly throw an
exception in the non-matching cases.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20769
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/python/py-lazy-string.c | 4 | ||||
-rw-r--r-- | gdb/python/py-value.c | 13 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-lazy-string.c | 1 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-lazy-string.exp | 5 |
4 files changed, 9 insertions, 14 deletions
diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c index e61b80a..30a171d 100644 --- a/gdb/python/py-lazy-string.c +++ b/gdb/python/py-lazy-string.c @@ -264,9 +264,7 @@ stpy_lazy_string_elt_type (lazy_string_object *lazy) case TYPE_CODE_ARRAY: return check_typedef (realtype->target_type ()); default: - /* This is done to preserve existing behavior. PR 20769. - E.g., gdb.parse_and_eval("my_int_variable").lazy_string().type. */ - return realtype; + gdb_assert_not_reached ("invalid lazy string"); } } diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index 1e8e58a..02c50b4 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -521,14 +521,7 @@ valpy_get_dynamic_type (PyObject *self, void *closure) If LENGTH is provided then the length parameter is set to LENGTH. Otherwise if the value is an array of known length then the array's length is used. Otherwise the length will be set to -1 (meaning first null of - appropriate with). - - Note: In order to not break any existing uses this allows creating - lazy strings from anything. PR 20769. E.g., - gdb.parse_and_eval("my_int_variable").lazy_string(). - "It's easier to relax restrictions than it is to impose them after the - fact." So we should be flagging any unintended uses as errors, but it's - perhaps too late for that. */ + appropriate with). */ static PyObject * valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw) @@ -596,9 +589,7 @@ valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw) addr = value_as_address (value); break; default: - /* Should flag an error here. PR 20769. */ - addr = value->address (); - break; + error (_("Cannot make lazy string from this object")); } str_obj = gdbpy_create_lazy_string_object (addr, length, user_encoding, diff --git a/gdb/testsuite/gdb.python/py-lazy-string.c b/gdb/testsuite/gdb.python/py-lazy-string.c index 326523d..805ba92 100644 --- a/gdb/testsuite/gdb.python/py-lazy-string.c +++ b/gdb/testsuite/gdb.python/py-lazy-string.c @@ -24,6 +24,7 @@ main () const char array[] = "array"; pointer typedef_ptr = "typedef pointer"; const char *null = 0; + int not_a_string = 23; return 0; /* break here */ } diff --git a/gdb/testsuite/gdb.python/py-lazy-string.exp b/gdb/testsuite/gdb.python/py-lazy-string.exp index a00f47b..0650c67 100644 --- a/gdb/testsuite/gdb.python/py-lazy-string.exp +++ b/gdb/testsuite/gdb.python/py-lazy-string.exp @@ -73,3 +73,8 @@ foreach var_spec { { "ptr" "pointer" "const char \\*" -1 } \ #gdb_test "python print ($var.lazy_string(length=0).value())" "\"\"" "empty lazy string value" } } + +gdb_py_test_silent_cmd "python nas = gdb.parse_and_eval('not_a_string')" \ + "get not_a_string" 1 +gdb_test "python print(nas.lazy_string())" \ + "Cannot make lazy string from this object" |