thread unsafety inventory

php.internals

Ron Korving

19 years ago
Internals, I have gone through the PHP codebase (latest 5.2 CVS), looking for the use of thread unsafe functions, and I found a number. I have virtually no experience in the PHP codebase, so I can't guarantee there are no false alarms in this, but I think the majority is valid. I noticed that main/reentrancy.c provided in thread-safe versions of unsafe functions by means of locking, which can be used when the thread-safe variant is not available. These functions in reentrancy.c are not always used however. Below follows all situations I could find. The only other functions I checked besides those mentioned was asctime(), which showed no problems. If you feel it's better for me to turn this into a bugreport (or many small ones?), let me know and I will. Kind regards, Ron Korving ------------------------------------------------- gmtime: (use gmtime_r) ext/interbase/ibase_query.c on line 679 ext/pdo_sqlite/sqlite/src/date.c on line 948 (external code library) sapi/thttpd_patch on lines 282, 1355, 2298 ctime: (use ctime_r) ext/mime_magic/mime_magic.c on line 1759 localtime: (use localtime_r) ext/com_dotnet/com_variant.c on line 818 ext/pdo_sqlite/sqlite/src/date.c on line 415 (external code library) ext/sqlite/libsqlite/src/date.c on line 419 (external code library) ext/xmlrpc/libxmlrpc/xmlrpc.c on line 234 (external code library) ext/zip/lib/zip_dirent.c on lines 398, 525 (external code library) sapi/thttpd_patch on line 2300 (external code library) crypt: (use crypt_r) ext/standard/crypt.c on line 149 rand: (use rand_r) ext/mcrypt/mcrypt.c on line 1042 ext/soap/php_http.c on line 467 ext/sqlite/libsqlite/src/encode.c on lines 204, 213 (external code library) readdir: (use readdir_r) ext/pcre/pcrelib/pcregrep.c on line 261 main/streams/php_scandir.c on line 74

Ilia A.

19 years ago
On 27-Nov-06, at 3:24 PM, Ron Korving wrote:
> > rand: (use rand_r) > > ext/mcrypt/mcrypt.c on line 1042 > ext/soap/php_http.c on line 467
The first two are now fixed.
> ext/sqlite/libsqlite/src/encode.c on lines 204, 213 (external code > library)
These two uses are a non-issue as they are located inside an ifdefed out test code. Thanks for the letting us know about these issues, I'll look over all the identified problems over the course of the week and apply patches where necessary. Ilia Alshanetsky

Ilia A.

19 years ago
On 27-Nov-06, at 3:24 PM, Ron Korving wrote:
> gmtime: (use gmtime_r) > > ext/interbase/ibase_query.c on line 679
Fixed.
> ext/pdo_sqlite/sqlite/src/date.c on line 948 (external code library)
This code cannot be reached since we compile libsqlite with date functions.
> sapi/thttpd_patch on lines 282, 1355, 2298
External application patch, can't be helped.
> ctime: (use ctime_r) > > ext/mime_magic/mime_magic.c on line 1759
Fixed.
> localtime: (use localtime_r) > > ext/com_dotnet/com_variant.c on line 818
Win32 only code and there localtime is already thread-safe.
> ext/pdo_sqlite/sqlite/src/date.c on line 415 (external code library) > ext/sqlite/libsqlite/src/date.c on line 419 (external code library) > ext/xmlrpc/libxmlrpc/xmlrpc.c on line 234 (external code library) > ext/zip/lib/zip_dirent.c on lines 398, 525 (external code library)
Fixed. You may want to report the sqlite issues to sqlite devs so that they can apply a fix in their code base as well.
> sapi/thttpd_patch on line 2300 (external code library)
External application patch, can't be helped.
> crypt: (use crypt_r) > > ext/standard/crypt.c on line 149
Fixed.
> rand: (use rand_r) > > ext/mcrypt/mcrypt.c on line 1042 > ext/soap/php_http.c on line 467
Fixed.
> ext/sqlite/libsqlite/src/encode.c on lines 204, 213 (external code > library)
This code cannot be reached.
> readdir: (use readdir_r) > > ext/pcre/pcrelib/pcregrep.c on line 261
This code cannot be reached.
> main/streams/php_scandir.c on line 74
Fixed. Ilia Alshanetsky

Ron Korving

19 years ago
Ilia, Great work. I posted a bug report at www.sqlite.org. Regards, Ron Korving "Ilia Alshanetsky" <ilia@prohost.org> wrote in message news:773C5559-F08C-45EF-BCC1-211C26E93534@prohost.org...