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

Re: [PATCH v6 1/8] pkt-line: add packet_read_line_gently()

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 25, 2017, 02:19 UTC
Message-ID
<xmqqbmrlxm8m.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<d6e8a63b-e95d-4194-5ad0-d68f557be083@gmail.com>
Ben Peart <peartben@gmail.com> writes:
Show 37 quoted lines
> On 4/24/2017 12:21 AM, Junio C Hamano wrote:
>> Ben Peart <peartben@gmail.com> writes:
>>
>>> Add packet_read_line_gently() to enable reading a line without dying on
>>> EOF.
>>>
>>> Signed-off-by: Ben Peart <benpeart@microsoft.com>
>>> ---
>>>   pkt-line.c | 14 +++++++++++++-
>>>   pkt-line.h | 10 ++++++++++
>>>   2 files changed, 23 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/pkt-line.c b/pkt-line.c
>>> index d4b6bfe076..bfdb177b34 100644
>>> --- a/pkt-line.c
>>> +++ b/pkt-line.c
>>> @@ -315,7 +315,7 @@ static char *packet_read_line_generic(int fd,
>>>   			      PACKET_READ_CHOMP_NEWLINE);
>>>   	if (dst_len)
>>>   		*dst_len = len;
>>> -	return len ? packet_buffer : NULL;
>>> +	return (len > 0) ? packet_buffer : NULL;
>>>   }
>> The log does not seem to explain what this change is about.
>
> This change was made as the result of a request in feedback from the
> previous version of the patch series which pointed out that the call
> to packet_read can return -1 in some error cases and to keep the code
> more consistent with packet_read_line_gently below.
>
> If len < 0 then the old code would have incorrectly returned a pointer
> to a buffer with garbage while the new code correctly returns NULL
> (fixes potential bug)
> if len == 0 then the code will return NULL before and after this
> change (no change in behavior)
> if len > 0 then the code will return packet_buffer before and after
> this change (no change in behavior)

TL;DR "Yes this is a preliminary fix and I'll split out into a separate patch early in the series in the next reroll"? Thanks.

Show 22 quoted lines
>> Is this supposed to be a preliminary bugfix where this helper used
>> to return a non-NULL buffer when underlying packet_read() signaled
>> an error by returning a negative len?  If so, this should probably
>> be a separate patch early in the series.
>>
>> Should len==0 be considered an error?  Especially given that
>> PACKET_READ_CHOMP_NEWLINE is in use, I would expect that len==0
>> should be treated similarly to positive length, i.e. the otherside
>> gave us an empty line.
>>
>>> +{
>>> +	int len = packet_read(fd, NULL, NULL,
>>> +			      packet_buffer, sizeof(packet_buffer),
>>> +			      PACKET_READ_CHOMP_NEWLINE|PACKET_READ_GENTLE_ON_EOF);
>>> +	if (dst_len)
>>> +		*dst_len = len;
>>> +	if (dst_line)
>>> +		*dst_line = (len > 0) ? packet_buffer : NULL;
>> I have the same doubt as above for len == 0 case.
>
> packet_read() returns -1 when PACKET_READ_GENTLE_ON_EOF is passed and
> it hits truncated output from the remote process. 

I know, but that is irrelevant to my question, which is about CHOMP_NEWLINE. I didn't even ask "why a negative len treated specially?" My question is about the case where len == 0. Your patch treats len==0 just like len==-1, i.e. an error, but I do not know if that is correct, hence my question. We both know len < 0 is an error and you do not need to waste time elaborating on it.

Previous: Ben PeartNext: Ben Peart
Message 8 of 15 in “refactor the filter process code into a reusable module”
  1. 0/8 refactor the filter process code into a reusable moduleBen Peart, Apr 21, 2017
  2. 3/8 convert: Split start_multi_file_filter into two separate functionsBen Peart, Apr 21, 2017
  3. Junio C HamanoApr 24, 2017
  4. Ben PeartApr 24, 2017
  5. 1/8 pkt-line: add packet_read_line_gently()Ben Peart, Apr 21, 2017
  6. Junio C HamanoApr 24, 2017
  7. Ben PeartApr 24, 2017
  8. Junio C HamanoApr 25, 2017
  9. Ben PeartApr 25, 2017
  10. 4/8 convert: Separate generic structures and variables from the filter specific onesBen Peart, Apr 21, 2017
  11. 7/8 sub-process: move sub-process functions into separate filesBen Peart, Apr 21, 2017
  12. 6/8 convert: rename reusable sub-process functionsBen Peart, Apr 21, 2017
  13. 5/8 convert: Update generic functions to only use generic data structuresBen Peart, Apr 21, 2017
  14. 8/8 convert: Update subprocess_read_status to not die on EOFBen Peart, Apr 21, 2017
  15. 2/8 convert: move packet_write_list() into pkt-line as packet_writel()Ben Peart, Apr 21, 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.