Actions
Bug #9861
closedBSD_vfprintf precsion doesn't work at shorter string
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以降すべてのバージョンにあるバグだと思います。
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- 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 ofmemchr
is NULL or its offset from the
start cannot exceed the size, the comparison was always false.
[ruby-core:62737] [Bug #9861]
Updated by usa (Usaku NAKAMURA) over 10 years ago
backported into ruby_2_0_0
at r46582.
Updated by usa (Usaku NAKAMURA) over 10 years ago
- Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: DONE, 2.1: REQUIRED
Updated by nagachika (Tomoyuki Chikanaga) over 10 years ago
- 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.
Actions
Like0
Like0Like0Like0Like0