[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