Thread

  1. Re: encode/decode support for base64url

    Florents Tselai <florents.tselai@gmail.com> — 2025-07-11T08:26:50Z

    On Thu, Jul 10, 2025 at 11:55 PM David E. Wheeler <david@justatheory.com>
    wrote:
    
    > On Jul 10, 2025, at 16:38, Florents Tselai <florents.tselai@gmail.com>
    > wrote:
    >
    > > Why isn’t this sufficient?
    > >
    > > static uint64
    > > pg_base64_encode_internal(const char *src, size_t len, char *dst, bool
    > url)
    > > {
    > > const char *alphabet = url ? _base64url : _base64;
    >
    > Ah, it is. I hadn’t got that far. I was tripped up to see this in your
    > patch:
    >
    > ```patch
    > +static uint64
    > +pg_base64url_encode(const char *src, size_t len, char *dst)
    > +{
    > +       uint64 encoded_len;
    > +       if (len == 0)
    > +               return 0;
    > +
    > +       encoded_len = pg_base64_encode(src, len, dst);
    > +
    > +       /* Convert Base64 to Base64URL */
    > +       for (uint64 i = 0; i < encoded_len; i++) {
    > +               if (dst[i] == '+')
    > +                       dst[i] = '-';
    > +               else if (dst[i] == '/')
    > +                       dst[i] = '_';
    > +       }
    > +
    > +       /* Trim '=' padding */
    > +       while (encoded_len > 0 && dst[encoded_len - 1] == '=')
    > +               encoded_len--;
    > +
    > +       return encoded_len;
    > +}
    > ```
    >
    > I didn’t realize it was a set of patches for stuff you did and then later
    > undid. Could you flatten the patch into just what’s changed at the end?
    >
    
     Attached