Thread

  1. add some more error checks into _fileExistsInDirectory function to report "too long name" error

    Mahendra Singh Thalor <mahi6run@gmail.com> — 2025-04-11T12:26:40Z

    Hi,
    In another thread[1], Álvaro gave some feedback for _fileExistsInDirectory
    function for "too long name" error.
    Basically, in _fileExistsInDirectory function, we pass dirname and filename
    but we were checking only the combined length of these two names.
    
    Here, I am attaching a patch which will check lengths of dirname and
    filename separately and will report errors if the name is too long.
    
    I added a check in some other parts also to report an error for "too long
    name".
    
    Please review the attached patch and let me know feedback.
    
    [1]:
    https://www.postgresql.org/message-id/202504110938.4kx73ylnv6p4%40alvherre.pgsql
    
    -- 
    Thanks and Regards
    Mahendra Singh Thalor
    EnterpriseDB: http://www.enterprisedb.com
    
  2. Re: add some more error checks into _fileExistsInDirectory function to report "too long name" error

    Daniel Gustafsson <daniel@yesql.se> — 2025-04-11T13:08:30Z

    > On 11 Apr 2025, at 14:26, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
    > 
    > Hi,
    > In another thread[1], Álvaro gave some feedback for _fileExistsInDirectory function for "too long name" error.
    > Basically, in _fileExistsInDirectory function, we pass dirname and filename but we were checking only the combined length of these two names.
    
    My interpretation of the original problem in the other thread is that the
    errormessage isn't applicable for a generic function as it only mention
    directory, not that checking the combination is inherently wrong.
    
    > Here, I am attaching a patch which will check lengths of dirname and filename separately and will report errors if the name is too long.
    
    Since we only care about the combination of directory and filename, do we
    really gain much by using separate checks?  A proposed filename exceeding
    MAXPGPATH should be pretty rare in production I'd hope.
    
    +   if (snprintf(buf, MAXPGPATH, "%s/%s", dir, filename) >= MAXPGPATH)
    +       pg_fatal("combined name of directory:\"%s\" and file:\"%s\" is too long", filename, dir);
    
    snprintf() will return a negative value in case of an error so if we really
    want to clamp down on path generation we should probably check that as well.
    
    --
    Daniel Gustafsson