[Bug 1792570] [NEW] infinite loop in std::filesystem::remove_all when removing non-empty directory with NUL byte in name

Frank Benkstein 1792570 at bugs.launchpad.net
Fri Sep 14 12:07:32 UTC 2018


Public bug reported:

Please have a look at this test program:

#include <string>
#include <iostream>
#include <fstream>

#if __has_include(<filesystem>)
#include <filesystem>
namespace fs = std::filesystem;
#elif __has_include(<experimental/filesystem>)
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
#endif

int main()
{
    std::string s{'t', 'e', 0, 's', 't'};
    fs::path p(s);
    fs::create_directory(p);
    std::ofstream(p / "foo");
    fs::remove_all(p);
}


You can compile it with the following command:

  g++-8 -std=c++17 -o test test.cc -lstdc++fs

When you run it (without any arguments), it will try to create a
directory "te", create a file "foo" in it and then try to remove said
directory and all files in it.

When I run it on my local machine it crashes with the following error
message:

# ./test
terminate called after throwing an instance of 'std::experimental::filesystem::v1::__cxx11::filesystem_error'
  what():  filesystem error: cannot remove all: Directory not empty [te
[1]    8180 abort      ./test

Through strace (log attached) I can tell that the crash is probably
triggered by running out file descriptors.

This bug also happens when compiling with gcc-7 or clang so I guess it's
really a bug in the std::filesystem library, not gcc itself.

ProblemType: Bug
DistroRelease: Ubuntu 18.04
Package: libstdc++-8-dev 8-20180414-1ubuntu2
ProcVersionSignature: Ubuntu 4.15.0-34.37-generic 4.15.18
Uname: Linux 4.15.0-34-generic x86_64
ApportVersion: 2.20.9-0ubuntu7.3
Architecture: amd64
CurrentDesktop: ubuntu:GNOME
Date: Fri Sep 14 13:56:03 2018
InstallationDate: Installed on 2018-03-05 (192 days ago)
InstallationMedia: Ubuntu 18.04 LTS "Bionic Beaver" - Alpha amd64 (20180305)
SourcePackage: gcc-8
UpgradeStatus: No upgrade log present (probably fresh install)

** Affects: gcc-8 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: amd64 apport-bug bionic wayland-session

** Attachment added: "test.log"
   https://bugs.launchpad.net/bugs/1792570/+attachment/5188765/+files/test.log

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-8 in Ubuntu.
https://bugs.launchpad.net/bugs/1792570

Title:
  infinite loop in std::filesystem::remove_all when removing non-empty
  directory with NUL byte in name

Status in gcc-8 package in Ubuntu:
  New

Bug description:
  Please have a look at this test program:

  #include <string>
  #include <iostream>
  #include <fstream>

  #if __has_include(<filesystem>)
  #include <filesystem>
  namespace fs = std::filesystem;
  #elif __has_include(<experimental/filesystem>)
  #include <experimental/filesystem>
  namespace fs = std::experimental::filesystem;
  #endif

  int main()
  {
      std::string s{'t', 'e', 0, 's', 't'};
      fs::path p(s);
      fs::create_directory(p);
      std::ofstream(p / "foo");
      fs::remove_all(p);
  }

  
  You can compile it with the following command:

    g++-8 -std=c++17 -o test test.cc -lstdc++fs

  When you run it (without any arguments), it will try to create a
  directory "te", create a file "foo" in it and then try to remove said
  directory and all files in it.

  When I run it on my local machine it crashes with the following error
  message:

  # ./test
  terminate called after throwing an instance of 'std::experimental::filesystem::v1::__cxx11::filesystem_error'
    what():  filesystem error: cannot remove all: Directory not empty [te
  [1]    8180 abort      ./test

  Through strace (log attached) I can tell that the crash is probably
  triggered by running out file descriptors.

  This bug also happens when compiling with gcc-7 or clang so I guess
  it's really a bug in the std::filesystem library, not gcc itself.

  ProblemType: Bug
  DistroRelease: Ubuntu 18.04
  Package: libstdc++-8-dev 8-20180414-1ubuntu2
  ProcVersionSignature: Ubuntu 4.15.0-34.37-generic 4.15.18
  Uname: Linux 4.15.0-34-generic x86_64
  ApportVersion: 2.20.9-0ubuntu7.3
  Architecture: amd64
  CurrentDesktop: ubuntu:GNOME
  Date: Fri Sep 14 13:56:03 2018
  InstallationDate: Installed on 2018-03-05 (192 days ago)
  InstallationMedia: Ubuntu 18.04 LTS "Bionic Beaver" - Alpha amd64 (20180305)
  SourcePackage: gcc-8
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-8/+bug/1792570/+subscriptions



More information about the foundations-bugs mailing list