Issue #9861 has been updated by Usaku NAKAMURA. Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: DONE, 2.1: REQUIRED ---------------------------------------- Bug #9861: BSD_vfprintf precsion doesn't work at shorter string https://bugs.ruby-lang.org/issues/9861#change-47415 * Author: Nobuyoshi Nakada * Status: Closed * Priority: Normal * Assignee: Nobuyoshi Nakada * Category: core * Target version: current: 2.2.0 * ruby -v: 1.4.0 or later * Backport: 2.0.0: DONE, 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/