On Thu, 25 Jul 2019 at 13:50, vignesh C <vignes...@gmail.com> wrote: > > On Thu, Jul 25, 2019 at 4:52 PM Rafia Sabih <rafia.pghack...@gmail.com> wrote: > > > > On Thu, 25 Jul 2019 at 07:39, vignesh C <vignes...@gmail.com> wrote: > > > > > > Hi, > > > > > > Initdb fails when following path is provided as input: > > > datasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafdds/datasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafdds/datasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafdds/datasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafdds/datasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafdds/datasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafddsdatasadfasfdsafdds/ > > > > > > Also the cleanup also tends to fail in the cleanup path. > > > > > > Could be something to do with path handling. > > This is because the value of MAXPGPATH is 1024 and the path you are > > providing is more than that. Hence, when it is trying to read > > PG_VERSION in ValidatePgVersion it is going to a wrong path with just > > 1024 characters. > > > > The error occurs at a very later point after performing the initial > work like creating directory. I'm thinking we should check this in > the beginning and throw the error message at the beginning and exit > cleanly. > Now that you say this, it does make sense to atleast inform about the correct error and that too earlier. Something like the attached patch would make sense.
-- Regards, Rafia Sabih
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 04d77ad700..3af11b365b 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -2726,6 +2726,12 @@ create_data_directory(void) { int ret; + if (strlen(pg_data) > MAXPGPATH) + { + pg_log_error("too long directory name\"%s\": %m", pg_data); + exit(1); + } + switch ((ret = pg_check_dir(pg_data))) { case 0: