base: HEIM_JSON_F_TRY_DECODE_DATA cannot work
The idea with HEIM_JSON_F_TRY_DECODE_DATA is that on parsing of JSON texts, if we find a base64-encoded string, decode it. But a lot of strings that aren't base64-encoded can be decoded anyways, leaving a mess. Insted we should -in a future commit- implement this only for the string values of "heimdal-type-data-76d7fca2-d0da-4b20-a126-1a10f8a0eae6" names in singleton objects.
This commit is contained in:
@@ -43,8 +43,6 @@
|
||||
|
||||
static heim_base_once_t heim_json_once = HEIM_BASE_ONCE_INIT;
|
||||
static heim_string_t heim_tid_data_uuid_key = NULL;
|
||||
static const char base64_chars[] =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
|
||||
static void
|
||||
json_init_once(void *arg)
|
||||
@@ -983,33 +981,6 @@ parse_string(struct parse_ctx *ctx)
|
||||
return o;
|
||||
}
|
||||
|
||||
/* If we can decode as base64, then let's */
|
||||
if (ctx->flags & HEIM_JSON_F_TRY_DECODE_DATA) {
|
||||
void *buf;
|
||||
size_t len = p - p0;
|
||||
|
||||
if (len > 0)
|
||||
len--;
|
||||
|
||||
if (len >= 4 && strspn(p0, base64_chars) >= len - 2) {
|
||||
buf = malloc(len);
|
||||
if (buf == NULL) {
|
||||
ctx->error = heim_error_create_enomem();
|
||||
free(p0);
|
||||
return NULL;
|
||||
}
|
||||
len = rk_base64_decode(p0, buf);
|
||||
if (len > -1) {
|
||||
/* Yes base64, return the decoded data */
|
||||
o = heim_data_ref_create(buf, len, free);
|
||||
free(p0);
|
||||
return o;
|
||||
}
|
||||
/* Not base64, so return what we had */
|
||||
free(buf);
|
||||
}
|
||||
}
|
||||
|
||||
/* Sadly this will copy `p0' */
|
||||
o = heim_string_create_with_bytes(p0, p - p0);
|
||||
free(p0);
|
||||
|
@@ -525,13 +525,6 @@ test_json(void)
|
||||
"wrong data NUL");
|
||||
o2 = heim_json_copy_serialize(o, 0, NULL);
|
||||
heim_assert(o2 != NULL, "data not serialized");
|
||||
o3 = heim_json_create(heim_string_get_utf8(o2), 10,
|
||||
HEIM_JSON_F_TRY_DECODE_DATA, NULL);
|
||||
heim_assert(o3 != NULL, "data not accepted");
|
||||
heim_assert(heim_data_get_length(o3) == 1, "wrong data length");
|
||||
heim_assert(((const char *)heim_data_get_ptr(o3))[0] == '\0',
|
||||
"wrong data NUL");
|
||||
heim_release(o3);
|
||||
heim_release(o2);
|
||||
heim_release(o);
|
||||
|
||||
|
Reference in New Issue
Block a user