Bug #9861 closed
BSD_vfprintf precsion doesn't work at shorter string
Added by nobu (Nobuyoshi Nakada) almost 11 years ago.
Updated almost 11 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
Like 0
Like 0 Like 0 Like 0 Like 0