Bug #9861
closed
BSD_vfprintf precsion doesn't work at shorter string
Added by nobu (Nobuyoshi Nakada) over 10 years ago.
Updated over 10 years ago.
Description
ruby_snprintf
などで"%s"
に精度を指定してその精度よりも短い文字列を渡すと、本来の長さが無視されて精度まで'\0'
が詰められます。
/* 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以降すべてのバージョンにあるバグだと思います。
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset r46098.
vsnprintf.c: fix string precision
- vsnprintf.c (BSD_vfprintf): fix string width when precision is
given. as the result of memchr
is NULL or its offset from the
start cannot exceed the size, the comparison was always false.
[ruby-core:62737] [Bug #9861]
backported into ruby_2_0_0
at r46582.
- Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: DONE, 2.1: REQUIRED
- Backport changed from 2.0.0: DONE, 2.1: REQUIRED to 2.0.0: DONE, 2.1: DONE
Backported into ruby_2_1
branch at r46611.
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0