diff --git a/common/flatpak-context.c b/common/flatpak-context.c index 2afc4598..2d98d5c9 100644 --- a/common/flatpak-context.c +++ b/common/flatpak-context.c @@ -1243,37 +1243,22 @@ flatpak_context_parse_env_block (FlatpakContext *context, gsize length, GError **error) { - const char *p = data; - gsize remaining = length; + g_auto(GStrv) env_vars = NULL; + int i; - /* env_block might not be \0-terminated */ - while (remaining > 0) + env_vars = flatpak_parse_env_block (data, length, error); + if (env_vars == NULL) + return FALSE; + + for (i = 0; env_vars[i] != NULL; i++) { - size_t len = strnlen (p, remaining); - const char *equals; - g_autofree char *env_var = NULL; - g_autofree char *env_value = NULL; + g_auto(GStrv) split = g_strsplit (env_vars[i], "=", 2); - g_assert (len <= remaining); + g_assert (g_strv_length (split) == 2); + g_assert (split[0][0] != '\0'); - equals = memchr (p, '=', len); - - if (equals == NULL || equals == p) - return glnx_throw (error, - "Environment variable must be given in the form VARIABLE=VALUE, not %.*s", (int) len, p); - - env_var = g_strndup (p, equals - p); - env_value = g_strndup (equals + 1, len - (equals - p) - 1); - flatpak_context_set_env_var (context, env_var, env_value); - p += len; - remaining -= len; - - if (remaining > 0) - { - g_assert (*p == '\0'); - p += 1; - remaining -= 1; - } + flatpak_context_set_env_var (context, + split[0], split[1]); } return TRUE;