Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
DVR: accept char limiting for title and subtitle formatters, fixes #3…
…541.
  • Loading branch information
perexg committed Feb 19, 2016
1 parent cfbda5e commit d157011
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 37 deletions.
82 changes: 46 additions & 36 deletions src/dvr/dvr_rec.c
Expand Up @@ -281,6 +281,16 @@ dvr_clean_directory_separator(char *s, char *tmp, size_t tmplen)
static const char *
dvr_do_prefix(const char *id, const char *s, char *tmp, size_t tmplen)
{
if (id[0] == '?') {
if (*s >= '0' && *s <= '9') {
char *endptr;
long l = strtol(s, &endptr, 10);
if (l && tmplen > l)
tmplen = l;
s = endptr;
}
id++;
}
if (s == NULL) {
tmp[0] = '\0';
} else if (s[0] && !isalpha(id[0])) {
Expand Down Expand Up @@ -398,42 +408,42 @@ dvr_sub_stop(const char *id, const void *aux, char *tmp, size_t tmplen)
}

static htsstr_substitute_t dvr_subs_entry[] = {
{ .id = "t", .getval = dvr_sub_title },
{ .id = " t", .getval = dvr_sub_title },
{ .id = "-t", .getval = dvr_sub_title },
{ .id = "_t", .getval = dvr_sub_title },
{ .id = ".t", .getval = dvr_sub_title },
{ .id = ",t", .getval = dvr_sub_title },
{ .id = ";t", .getval = dvr_sub_title },
{ .id = "s", .getval = dvr_sub_subtitle },
{ .id = " s", .getval = dvr_sub_subtitle },
{ .id = "-s", .getval = dvr_sub_subtitle },
{ .id = "_s", .getval = dvr_sub_subtitle },
{ .id = ".s", .getval = dvr_sub_subtitle },
{ .id = ",s", .getval = dvr_sub_subtitle },
{ .id = ";s", .getval = dvr_sub_subtitle },
{ .id = "e", .getval = dvr_sub_episode },
{ .id = " e", .getval = dvr_sub_episode },
{ .id = "-e", .getval = dvr_sub_episode },
{ .id = "_e", .getval = dvr_sub_episode },
{ .id = ".e", .getval = dvr_sub_episode },
{ .id = ",e", .getval = dvr_sub_episode },
{ .id = ";e", .getval = dvr_sub_episode },
{ .id = "c", .getval = dvr_sub_channel },
{ .id = " c", .getval = dvr_sub_channel },
{ .id = "-c", .getval = dvr_sub_channel },
{ .id = "_c", .getval = dvr_sub_channel },
{ .id = ".c", .getval = dvr_sub_channel },
{ .id = ",c", .getval = dvr_sub_channel },
{ .id = ";c", .getval = dvr_sub_channel },
{ .id = "g", .getval = dvr_sub_genre },
{ .id = " g", .getval = dvr_sub_genre },
{ .id = "-g", .getval = dvr_sub_genre },
{ .id = "_g", .getval = dvr_sub_genre },
{ .id = ".g", .getval = dvr_sub_genre },
{ .id = ",g", .getval = dvr_sub_genre },
{ .id = ";g", .getval = dvr_sub_genre },
{ .id = NULL, .getval = NULL }
{ .id = "?t", .getval = dvr_sub_title },
{ .id = "? t", .getval = dvr_sub_title },
{ .id = "?-t", .getval = dvr_sub_title },
{ .id = "?_t", .getval = dvr_sub_title },
{ .id = "?.t", .getval = dvr_sub_title },
{ .id = "?,t", .getval = dvr_sub_title },
{ .id = "?;t", .getval = dvr_sub_title },
{ .id = "?s", .getval = dvr_sub_subtitle },
{ .id = "? s", .getval = dvr_sub_subtitle },
{ .id = "?-s", .getval = dvr_sub_subtitle },
{ .id = "?_s", .getval = dvr_sub_subtitle },
{ .id = "?.s", .getval = dvr_sub_subtitle },
{ .id = "?,s", .getval = dvr_sub_subtitle },
{ .id = "?;s", .getval = dvr_sub_subtitle },
{ .id = "e", .getval = dvr_sub_episode },
{ .id = " e", .getval = dvr_sub_episode },
{ .id = "-e", .getval = dvr_sub_episode },
{ .id = "_e", .getval = dvr_sub_episode },
{ .id = ".e", .getval = dvr_sub_episode },
{ .id = ",e", .getval = dvr_sub_episode },
{ .id = ";e", .getval = dvr_sub_episode },
{ .id = "c", .getval = dvr_sub_channel },
{ .id = " c", .getval = dvr_sub_channel },
{ .id = "-c", .getval = dvr_sub_channel },
{ .id = "_c", .getval = dvr_sub_channel },
{ .id = ".c", .getval = dvr_sub_channel },
{ .id = ",c", .getval = dvr_sub_channel },
{ .id = ";c", .getval = dvr_sub_channel },
{ .id = "g", .getval = dvr_sub_genre },
{ .id = " g", .getval = dvr_sub_genre },
{ .id = "-g", .getval = dvr_sub_genre },
{ .id = "_g", .getval = dvr_sub_genre },
{ .id = ".g", .getval = dvr_sub_genre },
{ .id = ",g", .getval = dvr_sub_genre },
{ .id = ";g", .getval = dvr_sub_genre },
{ .id = NULL, .getval = NULL }
};

static const char *
Expand Down
9 changes: 8 additions & 1 deletion src/htsstr.c
Expand Up @@ -250,9 +250,16 @@ htsstr_substitute(const char *src, char *dst, size_t dstlen,
src++;
}
for (s = sub; s->id; s++) {
for (p = s->id, x = src; *p; p++, x++)
for (p = s->id, x = src; *p; p++, x++) {
if (*p == '?') {
while (*x >= '0' && *x <= '9')
x++;
x--;
continue;
}
if (*p != *x)
break;
}
if (*p == '\0') {
src = x;
if ((l = dstlen) > 0) {
Expand Down

0 comments on commit d157011

Please sign in to comment.