mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-21 03:13:05 +08:00
Fix small overestimation of base64 encoding output length.
pg_base64_enc_len() and its clones overestimated the output
length by up to 2 bytes, as a result of sloppy thinking about
where to divide. No callers require a precise estimate, so
this has no consequences worse than palloc'ing a byte or two
more than necessary. We might as well get it right though.
This bug is very ancient, dating to commit 79d78bb26
which
added encode.c. (The other instances were presumably copied
from there.) Still, it doesn't quite seem worth back-patching.
Oleg Tselebrovskiy
Discussion: https://postgr.es/m/f94da55286a63022150bc266afdab754@postgrespro.ru
This commit is contained in:
parent
378d73ef20
commit
d98ed080bb
@ -165,7 +165,7 @@ pg_base64_enc_len(unsigned srclen)
|
||||
/*
|
||||
* 3 bytes will be converted to 4, linefeed after 76 chars
|
||||
*/
|
||||
return (srclen + 2) * 4 / 3 + srclen / (76 * 3 / 4);
|
||||
return (srclen + 2) / 3 * 4 + srclen / (76 * 3 / 4);
|
||||
}
|
||||
|
||||
static unsigned
|
||||
|
@ -385,7 +385,7 @@ static uint64
|
||||
pg_base64_enc_len(const char *src, size_t srclen)
|
||||
{
|
||||
/* 3 bytes will be converted to 4, linefeed after 76 chars */
|
||||
return ((uint64) srclen + 2) * 4 / 3 + (uint64) srclen / (76 * 3 / 4);
|
||||
return ((uint64) srclen + 2) / 3 * 4 + (uint64) srclen / (76 * 3 / 4);
|
||||
}
|
||||
|
||||
static uint64
|
||||
|
@ -224,7 +224,7 @@ int
|
||||
pg_b64_enc_len(int srclen)
|
||||
{
|
||||
/* 3 bytes will be converted to 4 */
|
||||
return (srclen + 2) * 4 / 3;
|
||||
return (srclen + 2) / 3 * 4;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user