}
static int pakfire_jwt_decode_payload(char** payload, size_t* length, const char* token) {
+ char* normalized = NULL;
const char* p = NULL;
size_t l = 0;
int r;
// Find the payload
r = pakfire_jwt_find_payload(token, &p, &l);
if (r < 0)
- return r;
+ goto ERROR;
+
+ // Normalize to standard base64
+ r = pakfire_b64normalize(&normalized, p, l);
+ if (r < 0)
+ goto ERROR;
// Decode the payload
- return pakfire_b64decode((unsigned char**)payload, length, p, l);
+ r = pakfire_b64decode((unsigned char**)payload, length, normalized, -1);
+
+ERROR:
+ if (normalized)
+ free(normalized);
+
+ return r;
}
int pakfire_jwt_payload(struct pakfire_ctx* ctx, const char* token, struct json_object** payload) {