In message <[EMAIL PROTECTED]> on Thu, 11 Dec 2003 18:21:22 +0100 (CET), Richard Levitte - VMS Whacker <[EMAIL PROTECTED]> said:
levitte> I'll produce patches shortly, but first I've got to figure out some levitte> funnies with the fractional part. The following source: levitte> levitte> BIO_printf(myBio, "float: %.5f\n", (float) 21000.123456); levitte> levitte> produces this: levitte> levitte> 000.12305 levitte> levitte> (well actually, after I've corrected the integer part bug, it actually levitte> outputs 21000.12305 :-)). A few tests show that this has nothing to do with fmtfp. If I print 0.123456, I get more sensible results. However, exactly the same kind of problem as for the integer part exists in the encoding of the fractional part: /* convert fractional part */ do { fconvert[fplace++] = (caps ? "0123456789ABCDEF" : "0123456789abcdef")[fracpart % 10]; fracpart = (fracpart / 10); } while (fplace < max); if (fplace == sizeof fplace) fplace--; fconvert[fplace] = 0; However, because of the way this is written, the bug only shows itself if the requested size of the fractional part is the size of an int, like this: BIO_printf(myBio, "float: %.4f\n", (float) 0.123456); That gave this result: float: 0.2350 Anyway, the patch to fix this is attached. I'll commit it promptly. ----- Please consider sponsoring my work on free software. See http://www.free.lp.se/sponsoring.html for details. You don't have to be rich, a $10 donation is appreciated! -- Richard Levitte \ Tunnlandsvägen 3 \ [EMAIL PROTECTED] [EMAIL PROTECTED] \ S-168 36 BROMMA \ T: +46-8-26 52 47 \ SWEDEN \ or +46-708-26 53 44 Procurator Odiosus Ex Infernis -- [EMAIL PROTECTED] Member of the OpenSSL development team: http://www.openssl.org/ Unsolicited commercial email is subject to an archival fee of $400. See <http://www.stacken.kth.se/~levitte/mail/> for more info.
Index: crypto/bio/b_print.c =================================================================== RCS file: /e/openssl/cvs/openssl/crypto/bio/b_print.c,v retrieving revision 1.34 diff -u -r1.34 b_print.c --- crypto/bio/b_print.c 4 Nov 2003 00:51:31 -0000 1.34 +++ crypto/bio/b_print.c 11 Dec 2003 17:47:58 -0000 @@ -652,8 +652,8 @@ (caps ? "0123456789ABCDEF" : "0123456789abcdef")[intpart % 10]; intpart = (intpart / 10); - } while (intpart && (iplace < (int)sizeof(iplace))); - if (iplace == sizeof iplace) + } while (intpart && (iplace < (int)sizeof(iconvert))); + if (iplace == sizeof iconvert) iplace--; iconvert[iplace] = 0; @@ -664,7 +664,7 @@ : "0123456789abcdef")[fracpart % 10]; fracpart = (fracpart / 10); } while (fplace < max); - if (fplace == sizeof fplace) + if (fplace == sizeof fconvert) fplace--; fconvert[fplace] = 0;