[PATCH v1 1/1] readelf: invalid error message triggered when last tag is an empty string

Jan Beulich jbeulich@suse.com
Wed Jun 18 10:42:52 GMT 2025


On 18.06.2025 12:27, Matthieu Longo wrote:
> Disclaimer: this issue cannot occur with Object Attributes v1 (OAv1) because
> a value of '\0' (empty string) for a tag with a string value is considered
> as the default value for the attribute, and consequently is eliminated
> from the output object during the serialization.
> 
> In the context of OAv2 [1], an empty string is a valid value for a string
> attribute tag, and can be saved as a tag might not have a default value.

Is there a word (or more) missing in the latter part of this sentence?

> --- a/binutils/readelf.c
> +++ b/binutils/readelf.c
> @@ -17779,12 +17779,14 @@ display_tag_value (signed int tag,
>    else if (tag & 1)
>      {
>        /* PR 17531 file: 027-19978-0.004.  */
> -      size_t maxlen = (end - p) - 1;
> +      size_t maxlen = end - p;
>  
>        putchar ('"');
>        if (maxlen > 0)
>  	{
> -	  print_symbol_name ((int) maxlen, (const char *) p);
> +	  maxlen -= 1; /* Remove \0 from the character count.  */

How do you know it's \0 that sits there?

> +	  if (maxlen > 0) /* Don't try to print an empty string.  */
> +	    print_symbol_name ((int) maxlen, (const char *) p);

Am I understanding correctly that for OAv2 this will then need further
modifying, as (if I understand the description correctly) an empty
string there is not the same as no tag at all.

Jan


More information about the Binutils mailing list