public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
* [Bug python/31805] New: Division by zero in target_read_string()
@ 2024-05-27 11:47 kkilger at gmail dot com
  2024-05-27 16:08 ` [Bug python/31805] " kkilger at gmail dot com
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: kkilger at gmail dot com @ 2024-05-27 11:47 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=31805

            Bug ID: 31805
           Summary: Division by zero in target_read_string()
           Product: gdb
           Version: HEAD
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: python
          Assignee: unassigned at sourceware dot org
          Reporter: kkilger at gmail dot com
  Target Milestone: ---

Created attachment 15538
  --> https://sourceware.org/bugzilla/attachment.cgi?id=15538&action=edit
Patch which solves the problem

I encountered a division by zero in target_read_string() when using the
python pretty printer on a custom C++ string of type:

using MY_CHAR = wchar_t;
std::string<MY_CHAR, std::char_traits<MY_CHAR>, custom_allocator_type<MY_CHAR>>

I have a fix which solves this problem for me. I mailed the fix also to the
mailing list. 

When omitting the custom allocator, the error did not occur for whatever
reason. I was not able to reproduce the error with a stripped down ".cpp" file.
The error only occurs in my large codebase. 

I hope that someone immediately can construct a failing testcase when looking
at my patch.

After debugging, it seems that in stpy_lazy_string_elt_type() a call to
check_typedef has been omitted. The floating point exception disappears after
my fix.

The callstack (synced to 13.2 tag) was:

#0  0x000055e16ad47225 in target_read_string (addr=<error reading variable:
Division by zero>, addr@entry=140614409577184, len=len@entry=5,
width=width@entry=0, fetchlimit=<optimized out>,
buffer=buffer@entry=0x7ffcbb7b9698, bytes_read=bytes_read@entry=0x7ffcbb7b9694)
at ../../gdb/target/target.c:90
#1  0x000055e16adadf4e in val_print_string (elttype=0x55e17793a040,
encoding=0x0, addr=140614409577184, len=5, stream=stream@entry=0x55e16c409b60,
options=options@entry=0x7ffcbb7b9820) at ../../gdb/valprint.c:2624
#2  0x000055e16ac0f513 in print_string_repr (gdbarch=0x55e16c610a20,
language=0x55e16b44aaf0 <cplus_language_defn>, options=0x7ffcbb7b9970,
recurse=0, stream=0x55e16c409b60, hint=0x55e16c61e6b0 "string",
printer=<optimized out>) at ../../gdb/python/py-prettyprint.c:307
#3  gdbpy_apply_val_pretty_printer (extlang=<optimized out>, value=<optimized
out>, stream=0x55e16c409b60, recurse=0, options=0x7ffcbb7b9970,
language=0x55e16b44aaf0 <cplus_language_defn>) at
../../gdb/python/py-prettyprint.c:618
#4  0x000055e16aa4de1d in apply_ext_lang_val_pretty_printer
(val=val@entry=0x55e17851c8c0, stream=stream@entry=0x55e16c409b60,
recurse=recurse@entry=0, options=options@entry=0x7ffcbb7b9970,
language=0x55e16b44aaf0 <cplus_language_defn>) at ../../gdb/extension.c:489
#5  0x000055e16adab33b in value_print (val=val@entry=0x55e17851c8c0,
stream=0x55e16c409b60, options=options@entry=0x7ffcbb7b9970) at
../../gdb/valprint.c:1184
#6  0x000055e16abc740f in print_formatted (val=val@entry=0x55e17851c8c0,
size=size@entry=0, options=options@entry=0x7ffcbb7b9970, stream=<optimized
out>) at ../../gdb/printcmd.c:337
#7  0x000055e16abca7cd in print_value (val=val@entry=0x55e17851c8c0, opts=...)
at ../../gdb/printcmd.c:1252

Please find my patch in the attachment.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug python/31805] Division by zero in target_read_string()
  2024-05-27 11:47 [Bug python/31805] New: Division by zero in target_read_string() kkilger at gmail dot com
@ 2024-05-27 16:08 ` kkilger at gmail dot com
  2024-05-29 22:02 ` ssbssa at sourceware dot org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: kkilger at gmail dot com @ 2024-05-27 16:08 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=31805

Kilian Kilger <kkilger at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kkilger at gmail dot com

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug python/31805] Division by zero in target_read_string()
  2024-05-27 11:47 [Bug python/31805] New: Division by zero in target_read_string() kkilger at gmail dot com
  2024-05-27 16:08 ` [Bug python/31805] " kkilger at gmail dot com
@ 2024-05-29 22:02 ` ssbssa at sourceware dot org
  2024-05-30 10:32 ` ssbssa at sourceware dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: ssbssa at sourceware dot org @ 2024-05-29 22:02 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=31805

Hannes Domani <ssbssa at sourceware dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ssbssa at sourceware dot org
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2024-05-29

--- Comment #1 from Hannes Domani <ssbssa at sourceware dot org> ---
I can reproduce with this lazy-typedef.c:
```
typedef char MY_CHAR;
const MY_CHAR *str = "something";

int main ()
{
  return str[0];
}
```

And with it just try to print 'str' as a lazy string immediately:
```
$ gcc -g -o lazy-typedef lazy-typedef.c
$ gdb -q lazy-typedef
Reading symbols from lazy-typedef...
(gdb) py print(gdb.parse_and_eval("str").lazy_string())

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
```

I can confirm that your patch fixes the problem for me as well:
```
$ gdb -q lazy-typedef
Reading symbols from lazy-typedef...
(gdb) py print(gdb.parse_and_eval("str").lazy_string())
"something"
(gdb)
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug python/31805] Division by zero in target_read_string()
  2024-05-27 11:47 [Bug python/31805] New: Division by zero in target_read_string() kkilger at gmail dot com
  2024-05-27 16:08 ` [Bug python/31805] " kkilger at gmail dot com
  2024-05-29 22:02 ` ssbssa at sourceware dot org
@ 2024-05-30 10:32 ` ssbssa at sourceware dot org
  2024-06-11 16:08 ` tromey at sourceware dot org
  2024-06-12 14:07 ` tromey at sourceware dot org
  4 siblings, 0 replies; 6+ messages in thread
From: ssbssa at sourceware dot org @ 2024-05-30 10:32 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=31805

--- Comment #2 from Hannes Domani <ssbssa at sourceware dot org> ---
You get basically the same crash with this example:
```
struct incomplete *inco = (struct incomplete*)0x1;
```

It doesn't make any sense, but you can try to convert it to a lazy string as
well:
```
$ gcc -g -c lazy-incomplete.c
$ gdb -q lazy-incomplete.o
Reading symbols from lazy-incomplete.o...
(gdb) py print(gdb.parse_and_eval("inco").lazy_string())

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
```

And the patch does not fix this one.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug python/31805] Division by zero in target_read_string()
  2024-05-27 11:47 [Bug python/31805] New: Division by zero in target_read_string() kkilger at gmail dot com
                   ` (2 preceding siblings ...)
  2024-05-30 10:32 ` ssbssa at sourceware dot org
@ 2024-06-11 16:08 ` tromey at sourceware dot org
  2024-06-12 14:07 ` tromey at sourceware dot org
  4 siblings, 0 replies; 6+ messages in thread
From: tromey at sourceware dot org @ 2024-06-11 16:08 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=31805

Tom Tromey <tromey at sourceware dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
   Target Milestone|---                         |16.1
                 CC|                            |tromey at sourceware dot org
             Status|NEW                         |RESOLVED

--- Comment #3 from Tom Tromey <tromey at sourceware dot org> ---
I pushed the fix for this but forgot to add a Bug: trailer.
https://sourceware.org/pipermail/gdb-patches/2024-May/209399.html

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug python/31805] Division by zero in target_read_string()
  2024-05-27 11:47 [Bug python/31805] New: Division by zero in target_read_string() kkilger at gmail dot com
                   ` (3 preceding siblings ...)
  2024-06-11 16:08 ` tromey at sourceware dot org
@ 2024-06-12 14:07 ` tromey at sourceware dot org
  4 siblings, 0 replies; 6+ messages in thread
From: tromey at sourceware dot org @ 2024-06-12 14:07 UTC (permalink / raw)
  To: gdb-prs

https://sourceware.org/bugzilla/show_bug.cgi?id=31805

Tom Tromey <tromey at sourceware dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|16.1                        |15.1

--- Comment #4 from Tom Tromey <tromey at sourceware dot org> ---
I'm checking this in on the gdb-15 branch as well now.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-06-12 14:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-27 11:47 [Bug python/31805] New: Division by zero in target_read_string() kkilger at gmail dot com
2024-05-27 16:08 ` [Bug python/31805] " kkilger at gmail dot com
2024-05-29 22:02 ` ssbssa at sourceware dot org
2024-05-30 10:32 ` ssbssa at sourceware dot org
2024-06-11 16:08 ` tromey at sourceware dot org
2024-06-12 14:07 ` tromey at sourceware dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).