summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--i18n.c7
-rw-r--r--tools.c4
4 files changed, 10 insertions, 5 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 471a6bc5..985055ba 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1841,6 +1841,7 @@ Christian Wieninger <cwieninger@gmx.de>
from the "Schedule" menu in case it starts withing the next two minutes
for reporting a problem with a format string in recording.c on 64bit systems
for reporting a problem with the device selection in case of timer conflicts
+ for a patch that fixed part of a crash in i18n character set conversion
Thiemo Gehrke <tgehrke@reel-multimedia.com>
for suggesting to add a setup option to turn off the automatic timeout of the
@@ -2087,3 +2088,4 @@ Krzysztof Parma <krzycho@zoz.wodzislaw.pl>
Alexander Riedel <alexander-riedel@t-online.de>
for a patch that was used as a base to implement support for Freetype fonts and
UTF-8 handling
+ for a patch that fixed part of a crash in i18n character set conversion
diff --git a/HISTORY b/HISTORY
index b4069310..3bbec1b1 100644
--- a/HISTORY
+++ b/HISTORY
@@ -5233,3 +5233,5 @@ Video Disk Recorder Revision History
2007-06-15: Version 1.5.4
- Increased APIVERSION (forgot to do that in 1.5.2 and 1.5.3).
+- Fixed a crash in i18n character set conversion (thanks to Alexander Riedel and
+ Christian Wieninger for patches that cured part of the problem).
diff --git a/i18n.c b/i18n.c
index 88832d77..5ed05362 100644
--- a/i18n.c
+++ b/i18n.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: i18n.c 1.294 2007/06/09 08:44:54 kls Exp $
+ * $Id: i18n.c 1.295 2007/06/15 12:52:51 kls Exp $
*
* Translations provided by:
*
@@ -6820,7 +6820,7 @@ static const char *ConvertPhrase(const tI18nPhrase *Original, tI18nPhrase **Conv
*Converted = new tI18nPhrase[NumPhrases + 1];
memset(*Converted, 0, sizeof(tI18nPhrase) * (NumPhrases + 1));
}
- if (!(*Converted)[NrPhrase][NrLanguage]) {
+ if (!(*Converted)[NrPhrase][NrLanguage] && Original[NrPhrase][NrLanguage]) {
cCharSetConv csc(Phrases[1][NrLanguage], cCharSetConv::SystemCharacterTable());
(*Converted)[NrPhrase][NrLanguage] = strdup(csc.Convert(Original[NrPhrase][NrLanguage]));
}
@@ -6851,7 +6851,8 @@ const char *I18nTranslate(const char *s, const char *Plugin)
return t;
}
}
- p = Phrases;
+ p = OriginalPhrases = Phrases;
+ ConvertedPhrases = &Converted;
}
esyslog("%s%sno translation found for '%s' in language %d (%s)", Plugin ? Plugin : "", Plugin ? ": " : "", s, Setup.OSDLanguage, Phrases[0][Setup.OSDLanguage]);
}
diff --git a/tools.c b/tools.c
index 4498e6ae..465335ae 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 1.124 2007/06/15 12:20:40 kls Exp $
+ * $Id: tools.c 1.125 2007/06/15 12:46:38 kls Exp $
*/
#include "tools.h"
@@ -753,7 +753,7 @@ void cCharSetConv::SetSystemCharacterTable(const char *CharacterTable)
const char *cCharSetConv::Convert(const char *From, char *To, size_t ToLength)
{
- if (cd != (iconv_t)-1) {
+ if (cd != (iconv_t)-1 && From && *From) {
char *FromPtr = (char *)From;
size_t FromLength = strlen(From);
char *ToPtr = To;