> On 03-Aug-2020, at 8:36 PM, Alvaro Herrera <alvhe...@2ndquadrant.com> wrote:
> 
> On 2020-Aug-03, Asim Praveen wrote:
> 
>> Thank you Alvaro for reviewing the patch!
>> 
>>> On 01-Aug-2020, at 7:22 AM, Alvaro Herrera <alvhe...@2ndquadrant.com> wrote:
>>> 
>>> What happens if a replacement string happens to be split in the middle
>>> by the fgets buffering?  I think it'll fail to be replaced.  This
>>> applies to both versions.
>> 
>> Can a string to be replaced be split across multiple lines in the source 
>> file?  If I understand correctly, fgets reads one line from input file at a 
>> time.  If I do not, in the worst case, we will get an un-replaced string in 
>> the output, such as “@abs_dir@“ and it should be easily detected by a 
>> failing diff.
> 
> I meant what if the line is longer than 1023 chars and the replace
> marker starts at byte 1021, for example.  Then the first fgets would get
> "@ab" and the second fgets would get "s_dir@" and none would see it as
> replaceable.
> 


Please find attached a StringInfo based solution to this problem.  It uses 
fgetln instead of fgets such that a line is read in full, without ever 
splitting it.

Asim

Attachment: 0001-Use-a-stringInfo-instead-of-a-char-for-replace_strin.patch
Description: 0001-Use-a-stringInfo-instead-of-a-char-for-replace_strin.patch

Reply via email to