diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-12-15 07:45:45 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-12-15 07:45:45 +0000 |
commit | 3b45fa5f7a1d47b485a09003509f3b500eaa0b0c (patch) | |
tree | 86f1551f5ed794b20429fe9a79dff59544036ab8 | |
parent | 6873e9a660f52c49fbbec0738be54b98f8cdec20 (diff) | |
download | mpfr-3b45fa5f7a1d47b485a09003509f3b500eaa0b0c.tar.gz |
[src/vasprintf.c] Fixed a bug: spec.prec can be a negative number other
than -1 (when such a value is given as an argument with ".*").
[tests/tsprintf.c] Added non-regression test.
(merged changesets r11037-11038 from the trunk)
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/3.1@11043 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r-- | src/vasprintf.c | 2 | ||||
-rw-r--r-- | tests/tsprintf.c | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/vasprintf.c b/src/vasprintf.c index 7db85a962..c517b6116 100644 --- a/src/vasprintf.c +++ b/src/vasprintf.c @@ -1593,7 +1593,7 @@ partition_number (struct number_parts *np, mpfr_srcptr p, } else if (spec.spec == 'f' || spec.spec == 'F') { - if (spec.prec == -1) + if (spec.prec < 0) spec.prec = 6; if (regular_fg (np, p, spec, NULL) == -1) goto error; diff --git a/tests/tsprintf.c b/tests/tsprintf.c index 42778b8fe..7d6f3182f 100644 --- a/tests/tsprintf.c +++ b/tests/tsprintf.c @@ -1251,6 +1251,25 @@ check_emin (void) check_emin_aux (MPFR_EMIN_MIN); } +static void +test20161214 (void) +{ + mpfr_t x; + char buf[32]; + const char s[] = "0x0.fffffffffffff8p+1024"; + int r; + + mpfr_init2 (x, 64); + mpfr_set_str (x, s, 16, MPFR_RNDN); + r = mpfr_snprintf (buf, 32, "%.*RDf", -2, x); + MPFR_ASSERTN(r == 316); + r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN + 1, x); + MPFR_ASSERTN(r == 316); + r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN, x); + MPFR_ASSERTN(r == 316); + mpfr_clear (x); +} + int main (int argc, char **argv) { @@ -1271,6 +1290,7 @@ main (int argc, char **argv) mixed (); check_emax (); check_emin (); + test20161214 (); #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE) #if MPFR_LCONV_DPTS |