Thread
-
Re: encode/decode support for base64url
Florents Tselai <florents.tselai@gmail.com> — 2025-09-19T06:45:21Z
> On 19 Sep 2025, at 6:50 AM, Chao Li <li.evan.chao@gmail.com> wrote: Great to see you around Evan! > > I reviewed and tested this patch. Overall looks good to me. Actually, I think this patched fixed a bug of current implementation of base64 encoding by moving the logic of handling newline into “if (pos<0)”. IIUC what you mean, I can’t confirm that. Both existing and new implementation handle new lines the same SELECT decode(E'QUFB\nQUFB', 'base64url'); decode ---------------- \x414141414141 (1 row) > > Just a few small comments: > >> On Sep 19, 2025, at 03:19, Daniel Gustafsson <daniel@yesql.se> wrote: >> >> <v9-0001-Add-support-for-base64url-encoding-and-decoding.patch> > > > 1. > ``` > + * Helper for decoding base64 or base64url. When url is passed as true the > + * input will be encoded using base64url. len bytes in src is encoded into > + * dst. > + */ > ``` > > It’s not common to use two white-spaces after “.”, usually we need only one. I agree with this > > 2. > ``` > + /* handle remainder */ > if (pos != 2) > ``` > > The comment is understandable, but slightly vague: remainder of what? > > Maybe rephrase to “handle remaining bytes in buf”. Agree too. > > 3. > ``` > ereport(ERROR, > (errcode(ERRCODE_INVALID_PARAMETER_VALUE), > - errmsg("unexpected \"=\" while decoding base64 sequence"))); > + errmsg("unexpected \"=\" while decoding %s sequence", url ? "base64url" : "base64"))); > ``` > > This is a normal usage that injects sub-strings based on condition. However, PG doesn’t like that, see here: https://www.postgresql.org/docs/devel/nls-programmer.html#NLS-GUIDELINES Well, that’s a very interesting catch. I’ll let a comitter confirm & advise.