There are several issues with corner cases in syslog.openlog().
syslog_get_argv() swallows exceptions, but not in all cases.
- if
ident is non UTF-8 encodable, syslog.openlog() fails after setting the global reference to ident. Now the C string saved internally in the previous call to openlog() points to the freed memory.
PySys_Audit() can crash if ident is NULL.
- There may be a race condition with
syslog.syslog(), because the global reference to ident is decrefed before setting the new value.
And, since syslog.syslog() releases the GIL, there may be a race condition syslog.syslog() with syslog.openlog() and syslog.closelog() which can decref the global reference to ident.
P.S. @noamcohen97 noticed yet one issue in syslog.syslog() (potential returning a value from a function while an exception is set #95012 (comment)) and fixed it.
There are several issues with corner cases in
syslog.openlog().syslog_get_argv()swallows exceptions, but not in all cases.identis non UTF-8 encodable,syslog.openlog()fails after setting the global reference toident. Now the C string saved internally in the previous call toopenlog()points to the freed memory.PySys_Audit()can crash ifidentis NULL.syslog.syslog(), because the global reference toidentis decrefed before setting the new value.And, since
syslog.syslog()releases the GIL, there may be a race conditionsyslog.syslog()withsyslog.openlog()andsyslog.closelog()which can decref the global reference toident.P.S. @noamcohen97 noticed yet one issue in
syslog.syslog()(potential returning a value from a function while an exception is set #95012 (comment)) and fixed it.