> 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
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