Thread

  1. Re: encode/decode support for base64url

    David E. Wheeler <david@justatheory.com> — 2025-07-10T20:55:15Z

    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?
    
    Best,
    
    David