summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--recording.c11
3 files changed, 11 insertions, 4 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 76572ef5..e49400a4 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -588,6 +588,8 @@ Helmut Auer <vdr@helmutauer.de>
is a recording going on or about to start, and the user insists in shutting down now
for suggesting to make the channel entry timeout configurable
for a patch that was used to implement the SVDRP command REMO
+ for reporting a possible crash in decoding filename characters in case there are
+ not two hex digits after the '#'
Jeremy Hall <jhall@UU.NET>
for fixing an incomplete initialization of the filter parameters in eit.c
diff --git a/HISTORY b/HISTORY
index 6270c7cc..6984bbd4 100644
--- a/HISTORY
+++ b/HISTORY
@@ -5516,3 +5516,5 @@ Video Disk Recorder Revision History
of their Makefiles.
- Fixed a crash if no fonts are found (thanks to Mario Ivankovits and Clemens
Kirchgatterer).
+- Fixed decoding filename characters in case there are not two hex digits after
+ the '#' (reported by Helmut Auer).
diff --git a/recording.c b/recording.c
index 51846114..7999f724 100644
--- a/recording.c
+++ b/recording.c
@@ -4,10 +4,11 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 1.156 2007/10/14 10:21:54 kls Exp $
+ * $Id: recording.c 1.157 2007/11/04 11:17:43 kls Exp $
*/
#include "recording.h"
+#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
@@ -448,12 +449,14 @@ char *ExchangeChars(char *s, bool ToFileSystem)
case '/': *p = '~'; break;
// encoded characters:
case '#': {
- if (strlen(p) > 2) {
+ if (strlen(p) > 2 && isxdigit(*(p + 1)) && isxdigit(*(p + 2))) {
char buf[3];
sprintf(buf, "%c%c", *(p + 1), *(p + 2));
unsigned char c = strtol(buf, NULL, 16);
- *p = c;
- memmove(p + 1, p + 3, strlen(p) - 2);
+ if (c) {
+ *p = c;
+ memmove(p + 1, p + 3, strlen(p) - 2);
+ }
}
}
break;