Skip to content

Conversation

@duaneg
Copy link
Contributor

@duaneg duaneg commented Apr 16, 2025

Add configure tests and defines for getservbyname_r, getservbyport_r, and getprotobyname_r. Use these if available, otherwise fallback to the thread-unsafe variants.

Add a unit test to exercise getprotobyname, which is currently untested.

TODO:

  • Are there any platforms which define the unsafe variants but not the re-entrant ones? If not we can simplify the #ifdef hell somewhat.
  • Do the re-entrant functions have the same signature on all platforms?
  • These changes follow the existing code's practice: allocate a fixed-size (and overly large) buffer, and don't properly handle the error case if it is too small. Should this be fixed? If so should existing code also be fixed?

Add configure tests and defines for getservbyname_r, getservbyport_r, and
getprotobyname_r. Use these if available, otherwise fallback to the
thread-unsafe variants.

Add a unit test to exercise getprotobyname, which is currently untested.

TODO:
 - Are there any platforms which define the unsafe variants but not the
   re-entrant ones? If not we can simplify the #ifdef hell somewhat.
 - Do the re-entrant functions have the same signature on all platforms?
 - These changes follow the existing code's practice: allocate a fixed-size
   (and overly large) buffer, and don't properly handle the error case if it is
   too small. Should this be fixed? If so should existing code also be fixed?
duaneg added 3 commits April 17, 2025 10:00
The libc setpwent, getpwent, and endpwent functions are not thread-safe.
Protect them with mutexs in free-threading builds.
The dbm_* functions are not thread-safe, naturally. Add critical sections to
protect their use.
The getlogin function is not thread-safe: replace with getlogin_r where
available.

Note that this function is untested (unit test is skipped with a note it caused
CI failures as behaviour differs between NIX environments).
@duaneg duaneg changed the title gh-127081: use re-entrant variants of get{proto,serv}by{name,port} gh-127081: fix some un-thread-safe use of libc functions Apr 17, 2025
@picnixz
Copy link
Member

picnixz commented Apr 20, 2025

Can you split the PR into multiple ones where each PR is dedicated to a single module please (dbm and gdbm can be put together)? it's easier to revert commits if needs arise and we can also merge them separately.

@duaneg
Copy link
Contributor Author

duaneg commented Apr 20, 2025

Can you split the PR into multiple ones where each PR is dedicated to a single module please (dbm and gdbm can be put together)? it's easier to revert commits if needs arise and we can also merge them separately.

Definitely! Good suggestion, thanks.

@duaneg duaneg closed this Apr 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants