sprintf.c: fix one-off bug
* sprintf.c (rb_str_format): `CHECK` just before `FILL_`, but after another `PUSH`. fix one-off bug. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
74a5dc5825
commit
be2e146a55
10
sprintf.c
10
sprintf.c
@ -791,7 +791,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||||||
{
|
{
|
||||||
volatile VALUE val = GETARG();
|
volatile VALUE val = GETARG();
|
||||||
int valsign;
|
int valsign;
|
||||||
char nbuf[64], *s;
|
char nbuf[BIT_DIGITS(SIZEOF_LONG*CHAR_BIT)+2], *s;
|
||||||
const char *prefix = 0;
|
const char *prefix = 0;
|
||||||
int sign = 0, dots = 0;
|
int sign = 0, dots = 0;
|
||||||
char sc = 0;
|
char sc = 0;
|
||||||
@ -1014,9 +1014,9 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||||||
int plen = (int)strlen(prefix);
|
int plen = (int)strlen(prefix);
|
||||||
PUSH(prefix, plen);
|
PUSH(prefix, plen);
|
||||||
}
|
}
|
||||||
CHECK(prec - len);
|
|
||||||
if (dots) PUSH("..", 2);
|
if (dots) PUSH("..", 2);
|
||||||
if (prec > len) {
|
if (prec > len) {
|
||||||
|
CHECK(prec - len);
|
||||||
if (!sign && valsign < 0) {
|
if (!sign && valsign < 0) {
|
||||||
char c = sign_bits(base, p);
|
char c = sign_bits(base, p);
|
||||||
FILL_(c, prec - len);
|
FILL_(c, prec - len);
|
||||||
@ -1073,15 +1073,15 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||||||
if (prec >= len) len = prec + 1; /* integer part 0 */
|
if (prec >= len) len = prec + 1; /* integer part 0 */
|
||||||
if (sign || (flags&FSPACE)) ++len;
|
if (sign || (flags&FSPACE)) ++len;
|
||||||
if (prec > 0) ++len; /* period */
|
if (prec > 0) ++len; /* period */
|
||||||
CHECK(len > width ? len : width);
|
|
||||||
fill = width > len ? width - len : 0;
|
fill = width > len ? width - len : 0;
|
||||||
if (fill && !(flags&FMINUS) && !(flags&FZERO)) {
|
CHECK(fill + len);
|
||||||
|
if (fill && !(flags&(FMINUS|FZERO))) {
|
||||||
FILL_(' ', fill);
|
FILL_(' ', fill);
|
||||||
}
|
}
|
||||||
if (sign || (flags&FSPACE)) {
|
if (sign || (flags&FSPACE)) {
|
||||||
buf[blen++] = sign > 0 ? '+' : sign < 0 ? '-' : ' ';
|
buf[blen++] = sign > 0 ? '+' : sign < 0 ? '-' : ' ';
|
||||||
}
|
}
|
||||||
if (fill && !(flags&FMINUS) && (flags&FZERO)) {
|
if (fill && (flags&(FMINUS|FZERO)) == FZERO) {
|
||||||
FILL_('0', fill);
|
FILL_('0', fill);
|
||||||
}
|
}
|
||||||
len = RSTRING_LEN(val) + zero;
|
len = RSTRING_LEN(val) + zero;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user