Issue #9861 has been reported by Nobuyoshi Nakada.

----------------------------------------
Bug #9861: BSD_vfprintf precsion doesn't work at shorter string
https://bugs.ruby-lang.org/issues/9861

* Author: Nobuyoshi Nakada
* Status: Assigned
* Priority: Normal
* Assignee: Nobuyoshi Nakada
* Category: core
* Target version: current: 2.2.0
* ruby -v: 1.4.0 or later
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
`ruby_snprintf`などで`"%s"`に精度を指定してその精度よりも短い文字列を渡すと、本来の長さが無視されて精度まで`'\0'`が詰められます。

~~~C
/* t.c */
#include <ruby/ruby.h>

int main(void)
{
    char buf[26];
    ruby_snprintf(buf, sizeof(buf), "%.2s", "s");
    printf("[%.2x][%.2x][%.2x]\n", buf[0], buf[1], buf[2]);
    return 0;
}
~~~

~~~
$ make t LDLIBS='$(LIBRUBYARG_STATIC) $(LIBS)'
$ ./t
[73][00][00]
~~~

最初の`missing/vsnprintf.c`からあるようなので、1.4.0以降すべてのバージョンにあるバグだと思います。



-- 
https://bugs.ruby-lang.org/