[Swfdec-commits] 2 commits - swfdec/swfdec_access.c swfdec/swfdec_access.h swfdec/swfdec_load_object.c swfdec/swfdec_load_sound.c swfdec/swfdec_net_stream.c swfdec/swfdec_resource.c
Benjamin Otte
company at kemper.freedesktop.org
Wed Jun 18 09:57:48 PDT 2008
swfdec/swfdec_access.c | 10 +++-----
swfdec/swfdec_access.h | 1
swfdec/swfdec_load_object.c | 55 +++++++++-----------------------------------
swfdec/swfdec_load_sound.c | 5 ++--
swfdec/swfdec_net_stream.c | 2 -
swfdec/swfdec_resource.c | 44 +++++++++--------------------------
6 files changed, 33 insertions(+), 84 deletions(-)
New commits:
commit e224e8967e2b7735db244d484b29b4ae6f29171e
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jun 18 18:55:13 2008 +0200
rewrite code to use access matrix
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index 0fb6784..ee200d5 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2006-2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2006-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <string.h>
#include "swfdec_resource.h"
+#include "swfdec_access.h"
#include "swfdec_as_object.h"
#include "swfdec_as_internal.h"
#include "swfdec_as_interpret.h"
@@ -596,12 +597,19 @@ swfdec_resource_do_load (SwfdecPlayer *player, gboolean allowed, gpointer loadp)
g_object_unref (loader);
}
+static const SwfdecAccessMatrix swfdec_resource_matrix = {
+ { SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO },
+ { SWFDEC_ACCESS_NO, SWFDEC_ACCESS_YES, SWFDEC_ACCESS_YES },
+ { SWFDEC_ACCESS_YES, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO },
+ { SWFDEC_ACCESS_YES, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_POLICY },
+ { SWFDEC_ACCESS_YES, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_POLICY }
+};
+
static void
swfdec_resource_load_request (gpointer loadp, gpointer playerp)
{
SwfdecResourceLoad *load = loadp;
SwfdecPlayer *player = playerp;
- SwfdecURL *url;
/* empty URL means unload (yay!) */
if (load->url[0] == '\0') {
@@ -637,36 +645,8 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
return;
}
- if (swfdec_url_path_is_relative (load->url)) {
- swfdec_resource_do_load (player, TRUE, load);
- return;
- }
- url = swfdec_player_create_url (player, load->url);
- if (url == NULL) {
- swfdec_resource_do_load (player, FALSE, load);
- return;
- }
- switch (load->sandbox->type) {
- case SWFDEC_SANDBOX_REMOTE:
- swfdec_resource_do_load (player, !swfdec_url_is_local (url), load);
- break;
- case SWFDEC_SANDBOX_LOCAL_NETWORK:
- case SWFDEC_SANDBOX_LOCAL_TRUSTED:
- if (!swfdec_url_is_local (url)) {
- SWFDEC_FIXME ("Adobe claims you need to be allowed by policy files now, "
- "we don't check that though");
- }
- swfdec_resource_do_load (player, TRUE, load);
- break;
- case SWFDEC_SANDBOX_LOCAL_FILE:
- swfdec_resource_do_load (player, swfdec_url_is_local (url), load);
- break;
- case SWFDEC_SANDBOX_NONE:
- default:
- g_assert_not_reached ();
- break;
- }
- swfdec_url_free (url);
+ swfdec_player_allow_by_matrix (player, load->sandbox, load->url,
+ swfdec_resource_matrix, swfdec_resource_do_load, load);
}
/* NB: must be called from a script */
commit 8d111e79ee285c256338e8fdfd47096541649f00
Author: Benjamin Otte <otte at gnome.org>
Date: Wed Jun 18 18:48:50 2008 +0200
make LoadObject use the matrix
Requires passing the sandbox as an argument.
diff --git a/swfdec/swfdec_access.c b/swfdec/swfdec_access.c
index 5068b8c..e29845f 100644
--- a/swfdec/swfdec_access.c
+++ b/swfdec/swfdec_access.c
@@ -25,21 +25,19 @@
#include <swfdec/swfdec_debug.h>
void
-swfdec_player_allow_by_matrix (SwfdecPlayer *player, const char *url_string,
- const SwfdecAccessMatrix matrix, SwfdecPolicyFunc func, gpointer data)
+swfdec_player_allow_by_matrix (SwfdecPlayer *player, SwfdecSandbox *sandbox,
+ const char *url_string, const SwfdecAccessMatrix matrix,
+ SwfdecPolicyFunc func, gpointer data)
{
- SwfdecSandbox *sandbox;
SwfdecAccessPermission perm;
SwfdecAccessType type;
SwfdecURL *url;
g_return_if_fail (SWFDEC_IS_PLAYER (player));
+ g_return_if_fail (SWFDEC_IS_SANDBOX (sandbox));
g_return_if_fail (url_string != NULL);
g_return_if_fail (func);
- sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
- g_assert (sandbox);
-
url = swfdec_player_create_url (player, url_string);
if (url == NULL) {
func (player, FALSE, data);
diff --git a/swfdec/swfdec_access.h b/swfdec/swfdec_access.h
index d386eff..9ac6fef 100644
--- a/swfdec/swfdec_access.h
+++ b/swfdec/swfdec_access.h
@@ -41,6 +41,7 @@ typedef enum {
typedef SwfdecAccessPermission SwfdecAccessMatrix[5][3];
void swfdec_player_allow_by_matrix (SwfdecPlayer * player,
+ SwfdecSandbox * sandbox,
const char * url_string,
const SwfdecAccessMatrix matrix,
SwfdecPolicyFunc func,
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index 9a04204..c9e0d3a 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -24,6 +24,7 @@
#include <string.h>
#include "swfdec_load_object.h"
+#include "swfdec_access.h"
#include "swfdec_as_frame_internal.h"
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
@@ -182,54 +183,22 @@ swfdec_load_object_load (SwfdecPlayer *player, gboolean allow, gpointer obj)
swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
}
+static const SwfdecAccessMatrix swfdec_load_object_matrix = {
+ { SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO },
+ { SWFDEC_ACCESS_NO, SWFDEC_ACCESS_YES, SWFDEC_ACCESS_POLICY },
+ { SWFDEC_ACCESS_YES, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO },
+ { SWFDEC_ACCESS_NO, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_POLICY },
+ { SWFDEC_ACCESS_YES, SWFDEC_ACCESS_NO, SWFDEC_ACCESS_POLICY }
+};
+
/* perform security checks */
static void
swfdec_load_object_request (gpointer objectp, gpointer playerp)
{
- SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (objectp);
- SwfdecPlayer *player = SWFDEC_PLAYER (playerp);
- SwfdecURL *url;
-
- if (swfdec_url_path_is_relative (load->url)) {
- swfdec_load_object_load (player,
- load->sandbox->type != SWFDEC_SANDBOX_LOCAL_NETWORK, load);
- return;
- }
- url = swfdec_player_create_url (player, load->url);
- if (url == NULL) {
- swfdec_load_object_load (player, FALSE, load);
- return;
- }
- switch (load->sandbox->type) {
- case SWFDEC_SANDBOX_REMOTE:
- if (swfdec_url_host_equal(url, load->sandbox->url)) {
- swfdec_load_object_load (player, TRUE, load);
- break;
- }
- /* fall through */
- case SWFDEC_SANDBOX_LOCAL_NETWORK:
- case SWFDEC_SANDBOX_LOCAL_TRUSTED:
- if (swfdec_url_is_local (url)) {
- swfdec_load_object_load (player, load->sandbox->type == SWFDEC_SANDBOX_LOCAL_TRUSTED, load);
- } else {
- SwfdecURL *load_url = swfdec_url_new_components (
- swfdec_url_get_protocol (url), swfdec_url_get_host (url),
- swfdec_url_get_port (url), "crossdomain.xml", NULL);
- swfdec_player_allow_or_load (player, load->sandbox->url, url, load_url,
- swfdec_load_object_load, load);
- swfdec_url_free (load_url);
- }
- break;
- case SWFDEC_SANDBOX_LOCAL_FILE:
- swfdec_load_object_load (player, swfdec_url_is_local (url), load);
- break;
- case SWFDEC_SANDBOX_NONE:
- default:
- g_assert_not_reached ();
- break;
- }
+ SwfdecLoadObject *load = objectp;
- swfdec_url_free (url);
+ swfdec_player_allow_by_matrix (playerp, load->sandbox, load->url,
+ swfdec_load_object_matrix, swfdec_load_object_load, load);
}
static void
diff --git a/swfdec/swfdec_load_sound.c b/swfdec/swfdec_load_sound.c
index 6c4b41e..702d94f 100644
--- a/swfdec/swfdec_load_sound.c
+++ b/swfdec/swfdec_load_sound.c
@@ -410,8 +410,9 @@ swfdec_load_sound_new (SwfdecAsObject *target, const char *url)
sound->target = target;
sound->sandbox = SWFDEC_SANDBOX (target->context->global);
sound->url = g_strdup (url);
- swfdec_player_allow_by_matrix (SWFDEC_PLAYER (target->context), url,
- swfdec_load_sound_matrix, swfdec_load_sound_load, sound);
+ g_assert (sound->sandbox);
+ swfdec_player_allow_by_matrix (SWFDEC_PLAYER (target->context), sound->sandbox,
+ url, swfdec_load_sound_matrix, swfdec_load_sound_load, sound);
/* tell missing plugins stuff we want MP3 */
missing = NULL;
swfdec_audio_decoder_prepare (SWFDEC_AUDIO_CODEC_MP3,
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index acc3e94..350fc67 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -598,7 +598,7 @@ swfdec_net_stream_set_url (SwfdecNetStream *stream, const char *url_string)
stream->requested_url = g_strdup (url_string);
stream->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
- swfdec_player_allow_by_matrix (player, url_string,
+ swfdec_player_allow_by_matrix (player, stream->sandbox, url_string,
swfdec_net_stream_matrix, swfdec_net_stream_load, stream);
}
More information about the Swfdec-commits
mailing list