Skip to content

ctypes.util.find_library() doesn't filter non-elf files #793

@nehaljwani

Description

@nehaljwani

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

In this example below, conda forge's python is returning a location which is a linker script.

# ./dev/bin/python -c "import ctypes.util; print(ctypes.util.find_library('ncursesw'))"
/root/dev/lib/libncursesw.so

# file /root/dev/lib/libncursesw.so
/root/dev/lib/libncursesw.so: ASCII text

# cat /root/dev/lib/libncursesw.so
INPUT(libncursesw.so.6 -ltinfow)

How did I land here?

# ./dev/bin/python -c 'import pyrepl.curses'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import pyrepl.curses
  File "/root/dev/lib/python3.13/site-packages/pyrepl/curses.py", line 22, in <module>
    from ._minimal_curses import error, setupterm, tigetstr, tparm
  File "/root/dev/lib/python3.13/site-packages/pyrepl/_minimal_curses.py", line 30, in <module>
    clib = ctypes.cdll.LoadLibrary(_clibpath)
  File "/root/dev/lib/python3.13/ctypes/__init__.py", line 471, in LoadLibrary
    return self._dlltype(name)
           ~~~~~~~~~~~~~^^^^^^
  File "/root/dev/lib/python3.13/ctypes/__init__.py", line 390, in __init__
    self._handle = _dlopen(self._name, mode)
                   ~~~~~~~^^^^^^^^^^^^^^^^^^
OSError: /root/dev/lib/libncursesw.so: file too short

I think we likely need to update Ray's patch to filter ELF files using this function, similar to how it was done in python/cpython#86142

Installed packages

# micromamba list -p ./dev/
List of packages in environment: "/root/dev"

  Name              Version       Build               Channel
───────────────────────────────────────────────────────────────────
  _libgcc_mutex     0.1           conda_forge         conda-forge
  _openmp_mutex     4.5           2_gnu               conda-forge
  bzip2             1.0.8         h4bc722e_7          conda-forge
  ca-certificates   2025.1.31     hbd8a1cb_1          conda-forge
  ld_impl_linux-64  2.43          h712a8e2_4          conda-forge
  libexpat          2.7.0         h5888daf_0          conda-forge
  libffi            3.4.6         h2dba641_1          conda-forge
  libgcc            14.2.0        h767d61c_2          conda-forge
  libgcc-ng         14.2.0        h69a702a_2          conda-forge
  libgomp           14.2.0        h767d61c_2          conda-forge
  liblzma           5.8.1         hb9d3cd8_0          conda-forge
  libmpdec          4.0.0         h4bc722e_0          conda-forge
  libsqlite         3.49.1        hee588c1_2          conda-forge
  libuuid           2.38.1        h0b41bf4_0          conda-forge
  libzlib           1.3.1         hb9d3cd8_2          conda-forge
  ncurses           6.5           h2d0b736_3          conda-forge
  openssl           3.5.0         h7b32b05_0          conda-forge
  pip               25.0.1        pyh145f28c_0        conda-forge
  pyrepl            0.11.3.post1  pyhd8ed1ab_1        conda-forge
  python            3.13.3        hf636f53_101_cp313  conda-forge
  python_abi        3.13          7_cp313             conda-forge
  readline          8.2           h8c095d6_2          conda-forge
  tk                8.6.13        noxft_h4845f30_101  conda-forge
  tzdata            2025b         h78e105d_0          conda-forge

Environment info

# micromamba info

       libmamba version : 2.1.0
     micromamba version : 2.1.0
           curl version : libcurl/8.13.0 OpenSSL/3.5.0 zlib/1.3.1 zstd/1.5.7 libssh2/1.11.1 nghttp2/1.64.0
     libarchive version : libarchive 3.7.7 zlib/1.3.1 bz2lib/1.0.8 libzstd/1.5.6
       envs directories : /root/micromamba/envs
          package cache : /root/micromamba/pkgs
                          /root/.mamba/pkgs
            environment : base
           env location : /root/micromamba
      user config files : /root/.mambarc
 populated config files : /root/.condarc
       virtual packages : __unix=0=0
                          __linux=6.10.14=0
                          __glibc=2.41=0
                          __archspec=1=x86_64_v2
               channels : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://conda.anaconda.org/nodefaults/linux-64
                          https://conda.anaconda.org/nodefaults/noarch
       base environment : /root/micromamba
               platform : linux-64

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions