Skip to content

Infinte recursion on Windows+IPython if caller path on drive different than working path #172

@jdranczewski

Description

@jdranczewski

When the imported file calling config is for example on the D: drive, the recurrent function that searches its parent folders will eventually reach D:/. Unfortunately, the check that's meant to stop the recursion considers the drive of the working directory (say, C:/) to be the top folder in some circumstances. The offending lines are these:

python-decouple/decouple.py

Lines 220 to 223 in 0573e6f

# search the parent
parent = os.path.dirname(path)
if parent and os.path.normcase(parent) != os.path.normcase(os.path.abspath(os.sep)):
return self._find_file(parent)

This results in a silent crash of whatever code is running, but only when the working directory is on a drive different than the drive where the file using config is, I think? It also only happens in IPython, which may be handling working directories differently. This made it quite amusing to diagnose (I was using a different library that imports decouple), and I presume it may make it difficult to reproduce easily.

I suggest replacing the check with:

os.path.normcase(parent) != os.path.normcase(path)

which will catch if the parent is the same as the current path more explicitly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions