    def test_underscore_traversal(self):
        # Prevent traversal to names starting with an underscore (_)
        ec = self._makeContext()

        with self.assertRaises(NotFound):
            ec.evaluate("context/__class__")

        with self.assertRaises((NotFound, LocationError)):
            ec.evaluate("nocall: random/_itertools/repeat")

        with self.assertRaises((NotFound, LocationError)):
            ec.evaluate("random/_itertools/repeat/foobar")
The software uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.