]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[Backport r50679 | neal.norwitz. This is the last Klocwork bug to be
authorAndrew M. Kuchling <amk@amk.ca>
Thu, 5 Oct 2006 19:42:49 +0000 (19:42 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Thu, 5 Oct 2006 19:42:49 +0000 (19:42 +0000)
 backported.]

Use sizeof(buffer) instead of duplicating the constants to ensure they won't
be wrong.

The real change is to pass (bufsz - 1) to PyOS_ascii_formatd and 1
to strncat.  strncat copies n+1 bytes from src (not dest).

Reported by Klocwork #58.

Objects/complexobject.c

index 138ba8042aad3866027ba4f675e841006067fce9..95bbed764f467d6ebdbe17087c99005238bf5e4b 100644 (file)
@@ -274,16 +274,16 @@ complex_to_buf(char *buf, int bufsz, PyComplexObject *v, int precision)
 {
        char format[32];
        if (v->cval.real == 0.) {
-               PyOS_snprintf(format, 32, "%%.%ig", precision);
-               PyOS_ascii_formatd(buf, bufsz, format, v->cval.imag);
-               strncat(buf, "j", bufsz);
+               PyOS_snprintf(format, sizeof(format), "%%.%ig", precision);
+               PyOS_ascii_formatd(buf, bufsz - 1, format, v->cval.imag);
+               strncat(buf, "j", 1);
        } else {
                char re[64], im[64];
                /* Format imaginary part with sign, real part without */
-               PyOS_snprintf(format, 32, "%%.%ig", precision);
-               PyOS_ascii_formatd(re, 64, format, v->cval.real);
-               PyOS_snprintf(format, 32, "%%+.%ig", precision);
-               PyOS_ascii_formatd(im, 64, format, v->cval.imag);
+               PyOS_snprintf(format, sizeof(format), "%%.%ig", precision);
+               PyOS_ascii_formatd(re, sizeof(re), format, v->cval.real);
+               PyOS_snprintf(format, sizeof(format), "%%+.%ig", precision);
+               PyOS_ascii_formatd(im, sizeof(im), format, v->cval.imag);
                PyOS_snprintf(buf, bufsz, "(%s%sj)", re, im);
        }
 }