From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 8A8B8385B836; Tue, 20 Jul 2021 16:20:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8A8B8385B836 From: "enometh at meer dot net" To: gcc-bugs@gcc.gnu.org Subject: [Bug libstdc++/101510] std::filesystem::create_directory on an existing symlink to a directory Date: Tue, 20 Jul 2021 16:20:29 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libstdc++ X-Bugzilla-Version: 11.1.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: enometh at meer dot net X-Bugzilla-Status: RESOLVED X-Bugzilla-Resolution: INVALID X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: redi at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jul 2021 16:20:29 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D101510 --- Comment #7 from Madhu --- * "redi at gcc dot gnu.org" Wrote on Tue, 20 Jul 2021 16:00:55 +0000 >> I was going by the usage from databasePath() in >> https://github.com/WebKit/WebKit/blob/main/Source/WebKit/NetworkProcess/ >> WebStorage/LocalStorageDatabaseTracker.cpp#L142 >> which calls ensureDatabaseDirectoryExists() in >> https://github.com/WebKit/WebKit/blob/main/Source/WebCore/platform/sql/ >> SQLiteFileSystem.cpp#L59 >> which calls makeAllDirectories() >> https://github.com/WebKit/WebKit/blob/main/Source/WTF/wtf/FileSystem.cpp= #L733 >> >> The check is for only on the boolean value of ec, which is wrong >> according to the spec, Thanks! > > That looks correct to me. It's the same as the example as I showed above. > > If ec does not have a value, it means no error occurred. That means eithe= r the > directory was created, or already exists. > >> Instead of precipitately filing the bug here I should have filed it >> with WebKit. > > Are you *actually* seeing incorrect behaviour, or just concluding > there is a bug by reading the code? [There is a problem and I misread the code at first.] The databasePath() function in the first reference consumes a boolean value which is false and incorrectly assumes there is an error. (it correctly reports that the directory could not be created, but then it assumes that the directory does not exist.) This is incorrect behaviour when the name does resolve to a directory The semantics really mean that the boolean value of ec should be ignored for this usage pattern where you want to ensure a directory exists.=