git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] xgethostname: handle long hostnames

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Apr 13, 2017, 22:05 UTC
Message-ID
<20170413220524.GE10084@aiede.mtv.corp.google.com>
In-Reply-To
<20170413192335.20679-1-dturner@twosigma.com>
Hi,
David Turner wrote:
> If the full hostname doesn't fit in the buffer supplied to
> gethostname, POSIX does not specify whether the buffer will be
> null-terminated, so to be safe, we should do it ourselves.
[...]
Show 17 quoted lines
> +++ b/wrapper.c
> @@ -655,3 +655,16 @@ void sleep_millisec(int millisec)
>  {
>  	poll(NULL, 0, millisec);
>  }
> +
> +int xgethostname(char *buf, size_t len)
> +{
> +	/*
> +	 * If the full hostname doesn't fit in buf, POSIX does not
> +	 * specify whether the buffer will be null-terminated, so to
> +	 * be safe, do it ourselves.
> +	 */
> +	int ret = gethostname(buf, len);
> +	if (!ret)
> +		buf[len - 1] = 0;
> +	return ret;

I wonder if after null-terminating we would want to report this as an error, instead of silently using a truncated result. I.e. something like

Show 6 quoted lines
> +	if (!ret)
> +		buf[len - 1] = 0;
> +	if (strlen(buf) >= len - 1) {
> +		errno = ENAMETOOLONG;
> +		return -1;
> +	}
(or EINVAL --- either is equally descriptive).

Also POSIX requires that hostnames are <= 255 bytes. Maybe we can force the buffer to be large enough.

Thoughts? Jonathan

Previous: Jeff KingNext: David Turner
Message 3 of 5 in “xgethostname: handle long hostnames”
  1. xgethostname: handle long hostnamesDavid Turner, Apr 13, 2017
  2. Jeff KingApr 13, 2017
  3. Jonathan NiederApr 13, 2017
  4. David TurnerApr 13, 2017
  5. René ScharfeApr 13, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.