Syslog crashes when the special %m tag (of syslog(3)) is present in the message
The %m special escape sequence supported by the syslog(3) system call is claimed by the Ruby doc to be supported by the ::Syslog Ruby class. However the implementation of ::Syslog in ext/syslog/syslog.c:49 (https://github.com/ruby/ruby/blob/trunk/ext/syslog/syslog.c#L49) calls rb_f_sprintf() which does not tolerate the presence of %m in the format string.
A quick dump of a pry session demonstrating the crash:
 pry(main)> require 'syslog'
 pry(main)> Syslog.open
=> <#Syslog: opened=true, ident="pry", options=3, facility=8, mask=255>
 pry(main)> ::Syslog.info "Hi !%m"
ArgumentError: malformed format string - %m
from (pry):3:in `info
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
I think the following document introduced at #4149 is wrong, since ((|errno|)) is C-level interface and not available in Ruby-level, and may not be preserved across method calls.
%m is replaced with the error message string that would be returned by strerror(errno).
So possible fixes would be:
(1) fix document, by removing above sentence.
(2) replace %m with other thing, $! for example.
The latter sounds useful, but will be larger change.