Project

General

Profile

Actions

Bug #9861

closed

BSD_vfprintf precsion doesn't work at shorter string

Added by nobu (Nobuyoshi Nakada) almost 10 years ago. Updated over 9 years ago.

Status:
Closed
Target version:
ruby -v:
1.4.0 or later
[ruby-core:62737]

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) almost 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 of memchr 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) almost 10 years ago

backported into ruby_2_0_0 at r46582.

Updated by usa (Usaku NAKAMURA) almost 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 9 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

Also available in: Atom PDF

Like0
Like0Like0Like0Like0