]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvr: fix the wrong idnode class usage (memory access), fixes #4480
authorJaroslav Kysela <perex@perex.cz>
Tue, 25 Jul 2017 12:25:51 +0000 (14:25 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 22 Aug 2017 09:01:33 +0000 (11:01 +0200)
src/api.h
src/api/api_dvr.c
src/api/api_idnode.c

index 2a56bf356702f4ae9c0b3a9e6f7175354e7e2b71..6636540cd7a463ec94a00edcb37391d0539fe5c3 100644 (file)
--- a/src/api.h
+++ b/src/api.h
@@ -114,7 +114,7 @@ int api_idnode_load_by_class
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp );
 
 int api_idnode_handler
-  ( access_t *perm, htsmsg_t *args, htsmsg_t **resp,
+  ( const idclass_t *idc, access_t *perm, htsmsg_t *args, htsmsg_t **resp,
     void (*handler)(access_t *perm, idnode_t *in), const char *op, int destroyed );
 
 int api_idnode_load_simple
index 22ae5dd69f9470d29c107bd7638e172d4814d8af..6402be938b6f8a86ca6e7a838b52f529f27ef69a 100644 (file)
@@ -264,7 +264,7 @@ static int
 api_dvr_entry_rerecord_toggle
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_rerecord_toggle, "rerecord", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_rerecord_toggle, "rerecord", 0);
 }
 
 static void
@@ -277,7 +277,7 @@ static int
 api_dvr_entry_rerecord_deny
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_rerecord_deny, "rerecord", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_rerecord_deny, "rerecord", 0);
 }
 
 static void
@@ -290,7 +290,7 @@ static int
 api_dvr_entry_rerecord_allow
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_rerecord_allow, "rerecord", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_rerecord_allow, "rerecord", 0);
 }
 
 static void
@@ -303,7 +303,7 @@ static int
 api_dvr_entry_stop
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_stop, "stop", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_stop, "stop", 0);
 }
 
 static void
@@ -316,7 +316,7 @@ static int
 api_dvr_entry_cancel
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_cancel, "cancel", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_cancel, "cancel", 0);
 }
 
 static void
@@ -331,7 +331,7 @@ static int
 api_dvr_entry_remove
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_remove, "remove", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_remove, "remove", 0);
 }
 
 static void
@@ -344,7 +344,7 @@ static int
 api_dvr_entry_move_finished
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_move_finished, "move finished", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_move_finished, "move finished", 0);
 }
 
 static void
@@ -357,7 +357,7 @@ static int
 api_dvr_entry_move_failed
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_dvr_move_failed, "move failed", 0);
+  return api_idnode_handler(&dvr_entry_class, perm, args, resp, api_dvr_move_failed, "move failed", 0);
 }
 
 static void
index 5f094effc1368ba4e46eed1e083b68414a45226f..fe7b42623f532d55b654d33d5b0d87f7e4306e75 100644 (file)
@@ -610,7 +610,8 @@ exit:
 
 int
 api_idnode_handler
-  ( access_t *perm, htsmsg_t *args, htsmsg_t **resp,
+  ( const idclass_t *idc,
+    access_t *perm, htsmsg_t *args, htsmsg_t **resp,
     void (*handler)(access_t *perm, idnode_t *in),
     const char *op, int destroyed )
 {
@@ -636,7 +637,7 @@ api_idnode_handler
     HTSMSG_FOREACH(f, uuids) {
       if (!(uuid = htsmsg_field_get_string(f))) continue;
       pthread_mutex_lock(&global_lock);
-      if ((in = idnode_find(uuid, NULL, domain)) != NULL) {
+      if ((in = idnode_find(uuid, idc, domain)) != NULL) {
         domain = in->in_domain;
         if (idnode_perm(in, perm, msg)) {
           pthread_mutex_unlock(&global_lock);
@@ -661,7 +662,7 @@ api_idnode_handler
   } else {
     uuid = htsmsg_field_get_string(f);
     pthread_mutex_lock(&global_lock);
-    if (!(in   = idnode_find(uuid, NULL, NULL))) {
+    if (!(in   = idnode_find(uuid, idc, NULL))) {
       err = ENOENT;
     } else {
       msg = htsmsg_create_map();
@@ -692,7 +693,7 @@ static int
 api_idnode_delete
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_idnode_delete_, "delete", 1);
+  return api_idnode_handler(NULL, perm, args, resp, api_idnode_delete_, "delete", 1);
 }
 
 static void
@@ -705,7 +706,7 @@ static int
 api_idnode_moveup
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_idnode_moveup_, "moveup", 0);
+  return api_idnode_handler(NULL, perm, args, resp, api_idnode_moveup_, "moveup", 0);
 }
 
 static void
@@ -718,7 +719,7 @@ static int
 api_idnode_movedown
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  return api_idnode_handler(perm, args, resp, api_idnode_movedown_, "movedown", 0);
+  return api_idnode_handler(NULL, perm, args, resp, api_idnode_movedown_, "movedown", 0);
 }
 
 void