]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Fix #1517 - escape regexp special chars before adding autorec rule.
authorAdam Sutton <dev@adamsutton.me.uk>
Sat, 19 Jan 2013 01:30:24 +0000 (01:30 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Sat, 19 Jan 2013 19:49:19 +0000 (19:49 +0000)
This stops autorec rules entered from event failing to detect events.

src/dvr/dvr_autorec.c
src/tvheadend.h
src/utils.c

index 0b6a5c915d208c1622c6522e89907cb46529ea6e..9da3e3d7364df663f922f6e03204a5be4a717443 100644 (file)
@@ -559,9 +559,11 @@ void dvr_autorec_add_series_link
   ( const char *dvr_config_name, epg_broadcast_t *event,
     const char *creator, const char *comment )
 {
+  char *title;
   if (!event || !event->episode) return;
+  title = regexp_escape(epg_broadcast_get_title(event, NULL));
   _dvr_autorec_add(dvr_config_name,
-                   epg_broadcast_get_title(event, NULL),
+                   title,
                    event->channel,
                    NULL, 0, // tag/content type
                    NULL,
@@ -569,6 +571,8 @@ void dvr_autorec_add_series_link
                    event->serieslink,
                    0, NULL,
                    creator, comment);
+  if (title)
+    free(title);
 }
 
 
index 7b9e95be43e95cb3051250f69d852baa7e6fb106..6b0f3ab5b14fbf222bbd640cf206ada6b5e5902c 100644 (file)
@@ -561,6 +561,8 @@ int makedirs ( const char *path, int mode );
 
 int rmtree ( const char *path );
 
+char *regexp_escape ( const char *str );
+
 /* printing */
 #if __SIZEOF_LONG__ == 8
   #define PRItime_t PRId64
index 47b2cff2b8a97aefc5ccb656909f1f1e112f5c4f..a30ea8231d05f87504c96fa3a1abdd0ceda01e29 100644 (file)
@@ -403,3 +403,36 @@ rmtree ( const char *path )
     err = rmdir(path);
   return err;
 }
+
+char *
+regexp_escape(const char* str)
+{
+  const char *a;
+  char *tmp, *b;
+  if (!str)
+    return NULL;
+  a = str;
+  b = tmp = malloc(strlen(str) * 2);
+  while (*a) {
+    switch (*a) {
+      case '?':
+      case '+':
+      case '.':
+      case '(':
+      case ')':
+      case '[':
+      case ']':
+      case '*':
+        *b = '\\';
+        b++;
+        /* -fallthrough */
+      default:
+        break;
+    }
+    *b = *a;
+    b++;
+    a++;
+  }
+  *b = 0;
+  return tmp;
+}