@@ -1478,7 +1478,23 @@ pack_uu(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, int count)
1478147814791479if (count <= 1) count = 45; /* default line length for UU-encoding */
148014801481-str_len_ensure(mrb, dst, didx + ((slen * 4 + 2) / 3) + (slen / count + 1) * 2);
1481+/* Calculate buffer size by accounting for per-line encoding
1482+ * Each line encodes separately, so padding happens per line, not globally
1483+ */
1484+mrb_int num_lines = (slen + count - 1) / count; /* Number of lines */
1485+mrb_int total_encoded = 0;
1486+mrb_int temp_slen = slen;
1487+1488+/* Calculate actual encoded size line by line */
1489+while (temp_slen > 0) {
1490+mrb_int line_len = (temp_slen > count) ? count : temp_slen;
1491+total_encoded += ((line_len + 2) / 3) * 4; /* Each line's encoded size */
1492+temp_slen -= line_len;
1493+ }
1494+1495+/* Total buffer = encoded data + (length char + newline) per line + terminating line */
1496+mrb_int buffer_size = total_encoded + num_lines * 2 + 2;
1497+str_len_ensure(mrb, dst, didx + buffer_size);
14821498char *dptr = RSTRING_PTR(dst) + didx;
1483149914841500while (slen > 0) {