Subject: Re: bug#76691: `display-monitor-attributes-list` not working properly on macOS

From: Robert Pluim <[email-masked]>
Date: Thu, 06 Mar 2025 11:08:43 +0100

>>>>> On Wed, 5 Mar 2025 06:38:05 -0500, Ship Mints <[email-masked]> said:
 
    Ship>  #ifdef NS_IMPL_COCOA
    Ship> -      m->name = ns_screen_name (did);
    Ship> +      m->name = NULL;
    Ship> +      if ([s respondsToSelector:@selector(localizedName)])
    Ship> +        {
    Ship> +	  NSString *name = [s valueForKey:@"localizedName"];
    Ship> +	  if (name != NULL)
    Ship> +	    {
    Ship> +	      m->name = xmalloc ([name lengthOfBytesUsingEncoding: NSUTF8StringEncoding]);
    Ship> +	      strcpy(m->name, [name UTF8String]);
    Ship> +	    }

The reason it was crashing for me is that the xmalloc doesnʼt account
for the terminating '\0', ie we need

    m->name = xmalloc ([name lengthOfBytesUsingEncoding: NSUTF8StringEncoding] + 1);

or just

    m->name = xstrdup ([name UTF8String]);

    Ship> +        }
    Ship> +      /* If necessary, synthesize a name of the following form:
    Ship> +	  %dx%d@%d,%d width height x y. */
    Ship> +      if (m->name == NULL)
    Ship> +	{
    Ship> +	  char buf[25]; /* sufficient for 12345x78901@34567,90123 */
    Ship> +	  snprintf (buf, sizeof(buf), "%ux%u@%d,%d",
    Ship> +		    m->work.width, m->work.height, m->work.x, m->work.y);
    Ship> +	  m->name = xstrdup (buf);
    Ship> +	}

Robert
--