[PATCH] Change some arguments to gdb::string_view instead of name+len

Pedro Alves palves@redhat.com
Tue Oct 1 18:23:00 GMT 2019


On 10/1/19 6:33 PM, Christian Biesinger via gdb-patches wrote:
> -  if (linkage_name[len] != '\0')
> +  /* Don't use string_view::operator[] because we are accessing beyond
> +     the size of the string_view, which is technically unsupported.  */
> +  if (linkage_name.data ()[linkage_name.length ()] != '\0')
>      {
>        char *alloc_name;

It's more than just unsupported, it's undefined behavior.  If we're promising
the string_view interface, then it's supposedly valid to pass in a string_view
that happens to point just at the end of a page, with the one-past-the-end
byte living in an unmapped page.  Dereferencing the one-past-end byte in
that case SIGSEGVs.

> -  if (ms_type == mst_file_text && startswith (name, "__gnu_compiled"))
> +  if (ms_type == mst_file_text && startswith (name.data (), "__gnu_compiled"))
>      return (NULL);
>  

This, via startswith also assumes that name.data() is a null-terminated
string.

I wonder whether we should have a zstring_view type.  like string_view, but
assumes/requires null-terminated.

Thanks,
Pedro Alves



More information about the Gdb-patches mailing list