summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dist/Data-Dumper/Dumper.xs12
1 files changed, 5 insertions, 7 deletions
diff --git a/dist/Data-Dumper/Dumper.xs b/dist/Data-Dumper/Dumper.xs
index 7c49c9e9cb..b5d7e39fc6 100644
--- a/dist/Data-Dumper/Dumper.xs
+++ b/dist/Data-Dumper/Dumper.xs
@@ -272,13 +272,11 @@ esc_q_utf8(pTHX_ SV* sv, const char *src, STRLEN slen, I32 do_utf8, I32 useqq)
* first byte */
increment = (k == 0 && *s != '\0') ? 1 : UTF8SKIP(s);
- grow += 4 + (k <= 0xFF ? 2 : k <= 0xFFF ? 3 : k <= 0xFFFF ? 4 :
-#if UVSIZE == 4
- 8 /* We may allocate a bit more than the minimum here. */
-#else
- k <= 0xFFFFFFFF ? 8 : UVSIZE * 4
-#endif
- );
+ grow += 6; /* Smallest we do is "\x{FF}" */
+ k >>= 4;
+ while ((k >>= 4) != 0) { /* Add space for each nibble */
+ grow++;
+ }
}
else if (useqq) { /* Not utf8, must be <= 0xFF, hence 2 hex
* digits. */