[libsoup/new-io] Add some error checking
- From: Benjamin Otte <otte src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libsoup/new-io] Add some error checking
- Date: Sun, 20 Dec 2009 14:01:25 +0000 (UTC)
commit 611b29aa63b4a3f3d1286311df9a025e32d438aa
Author: Benjamin Otte <otte gnome org>
Date: Sun Dec 20 12:02:22 2009 +0100
Add some error checking
libsoup/soup-request.c | 24 ++----------------------
libsoup/soup-session.c | 24 ++++++++++++++++++++++++
2 files changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/libsoup/soup-request.c b/libsoup/soup-request.c
index a969c9d..3623cb8 100644
--- a/libsoup/soup-request.c
+++ b/libsoup/soup-request.c
@@ -40,8 +40,6 @@
* Since: 2.30
**/
-static void soup_request_interface_init (SoupRequestInterface *interface);
-
static void send_async_default (SoupRequest *request,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -50,28 +48,10 @@ static GInputStream *send_finish_default (SoupRequest *request,
GAsyncResult *result,
GError **error);
-GType
-soup_request_get_type (void)
-{
- static volatile gsize g_define_type_id__volatile = 0;
- if (g_once_init_enter (&g_define_type_id__volatile))
- {
- GType g_define_type_id =
- g_type_register_static_simple (G_TYPE_INTERFACE,
- g_intern_static_string ("SoupRequest"),
- sizeof (SoupRequestInterface),
- (GClassInitFunc)soup_request_interface_init,
- 0,
- (GInstanceInitFunc)NULL,
- (GTypeFlags) 0);
- g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
- }
- return g_define_type_id__volatile;
-}
+G_DEFINE_INTERFACE (SoupRequest, soup_request, G_TYPE_OBJECT)
static void
-soup_request_interface_init (SoupRequestInterface *interface)
+soup_request_default_init (SoupRequestInterface *interface)
{
interface->send_async = send_async_default;
interface->send_finish = send_finish_default;
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index bfa2cbe..97c6d35 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -2010,6 +2010,27 @@ init_request_types (SoupSessionPrivate *priv)
GSIZE_TO_POINTER (SOUP_TYPE_REQUEST_FTP));
}
+/* RFC 2396, 3.1 */
+static gboolean
+soup_scheme_is_valid (const char *scheme)
+{
+ if (scheme == NULL ||
+ !g_ascii_isalpha (*scheme))
+ return FALSE;
+
+ scheme++;
+ while (*scheme) {
+ if (!g_ascii_isalpha (*scheme) &&
+ !g_ascii_isdigit (*scheme) &&
+ *scheme != '+' &&
+ *scheme != '-' &&
+ *scheme != '.')
+ return FALSE;
+ scheme++;
+ }
+ return TRUE;
+}
+
void
soup_session_add_protocol (SoupSession *session,
const char *scheme,
@@ -2018,6 +2039,8 @@ soup_session_add_protocol (SoupSession *session,
SoupSessionPrivate *priv;
g_return_if_fail (SOUP_IS_SESSION (session));
+ g_return_if_fail (soup_scheme_is_valid (scheme));
+ g_return_if_fail (g_type_is_a (request_type, SOUP_TYPE_REQUEST));
priv = SOUP_SESSION_GET_PRIVATE (session);
init_request_types (priv);
@@ -2032,6 +2055,7 @@ soup_session_remove_protocol (SoupSession *session,
SoupSessionPrivate *priv;
g_return_if_fail (SOUP_IS_SESSION (session));
+ g_return_if_fail (soup_scheme_is_valid (scheme));
priv = SOUP_SESSION_GET_PRIVATE (session);
init_request_types (priv);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]