--- JSON-XS/XS.xs 2007/06/06 17:27:33 1.36 +++ JSON-XS/XS.xs 2007/06/06 17:49:01 1.37 @@ -508,11 +508,11 @@ // we assume we can always read an IV as a UV if (SvUV (sv) & ~(UV)0x7fff) { - need (enc, 64); + need (enc, sizeof (UV) * 3); enc->cur += SvIsUV(sv) - ? snprintf (enc->cur, 64, "%"UVuf, (UV)SvUVX (sv)) - : snprintf (enc->cur, 64, "%"IVdf, (IV)SvIVX (sv)); + ? snprintf (enc->cur, sizeof (UV) * 3, "%"UVuf, (UV)SvUVX (sv)) + : snprintf (enc->cur, sizeof (UV) * 3, "%"IVdf, (IV)SvIVX (sv)); } else { @@ -531,11 +531,11 @@ char digit, nz = 0; - digit = u >> 28; *enc->cur = digit + '0'; nz |= digit; enc->cur += nz ? 1 : 0; u = (u & 0xfffffff) * 5; - digit = u >> 27; *enc->cur = digit + '0'; nz |= digit; enc->cur += nz ? 1 : 0; u = (u & 0x7ffffff) * 5; - digit = u >> 26; *enc->cur = digit + '0'; nz |= digit; enc->cur += nz ? 1 : 0; u = (u & 0x3ffffff) * 5; - digit = u >> 25; *enc->cur = digit + '0'; nz |= digit; enc->cur += nz ? 1 : 0; u = (u & 0x1ffffff) * 5; - digit = u >> 24; *enc->cur = digit + '0'; nz |= digit; enc->cur += 1; + digit = u >> 28; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0xfffffff) * 5; + digit = u >> 27; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x7ffffff) * 5; + digit = u >> 26; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x3ffffff) * 5; + digit = u >> 25; *enc->cur = digit + '0'; enc->cur += (nz = nz || digit); u = (u & 0x1ffffff) * 5; + digit = u >> 24; *enc->cur = digit + '0'; enc->cur += 1; } } else if (SvROK (sv))