]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/python: cast to ui_file_style::intensity after validating value
authorSimon Marchi <simon.marchi@polymtl.ca>
Wed, 8 Oct 2025 15:53:10 +0000 (11:53 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Wed, 8 Oct 2025 18:57:57 +0000 (14:57 -0400)
When GDB is built with undefined behavior sanitizer,
gdb.python/py-style.exp fails because of this:

    $ ./gdb -q -nx --data-directory=data-directory -ex "python filename_style = gdb.Style('filename')" -ex "python filename_style.intensity = -3"
    /home/simark/src/binutils-gdb/gdb/python/py-style.c:239:11: runtime error: load of value 4294967293, which is not a valid value for type 'intensity'

Fix it by casting the value to ui_file_style::intensity only after
validating the raw value.

Change-Id: I38eb471a9cb3bfc3bb8b2c88afa76b8025e4e893
Approved-By: Tom Tromey <tom@tromey.com>
gdb/python/py-style.c

index cf65e3115b20db701f1b2f6c1407588c8f86ee09..b10a45fced9a3432eb9f3691eb470cff11a39bd0 100644 (file)
@@ -234,14 +234,12 @@ stylepy_init_from_style_name (PyObject *self, const char *style_name)
 static std::optional<ui_file_style::intensity>
 stylepy_long_to_intensity (long intensity_value)
 {
-  ui_file_style::intensity intensity
-    = static_cast<ui_file_style::intensity> (intensity_value);
-  switch (intensity)
+  switch (intensity_value)
     {
     case ui_file_style::NORMAL:
     case ui_file_style::DIM:
     case ui_file_style::BOLD:
-      break;
+      return static_cast<ui_file_style::intensity> (intensity_value);
 
     default:
       PyErr_Format
@@ -249,8 +247,6 @@ stylepy_long_to_intensity (long intensity_value)
         intensity_value);
       return {};
     }
-
-  return intensity;
 }
 
 /* Initialise a gdb.Style object from a foreground and background