From abd5a81c897ae6b4c09b68742bf9f396155d1eb2 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 6 Jun 2009 14:07:02 +0200 Subject: [PATCH] Modified cSVDRP::CmdGRAB() to avoid writing into const data --- CONTRIBUTORS | 1 + HISTORY | 2 ++ svdrp.c | 13 +++++++------ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 1767899e..adbd0cad 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -921,6 +921,7 @@ Ludwig Nussel for adding some missing 'const' keywords for pointing out that "%016llX" should be used instead of "%016LX" for adding some missing 'const' keywords to avoid compilation errors with gcc 4.4 + for reporting that cSVDRP::CmdGRAB() writes into const data Thomas Koch for his support in keeping the Premiere World channels up to date in 'channels.conf' diff --git a/HISTORY b/HISTORY index 29b7ed60..4f75111f 100644 --- a/HISTORY +++ b/HISTORY @@ -6127,3 +6127,5 @@ Video Disk Recorder Revision History Reinhard Nissl). - Added some missing 'const' keywords to avoid compilation errors with gcc 4.4 (thanks to Ville Skyttä and Ludwig Nussel). +- Modified cSVDRP::CmdGRAB() to avoid writing into const data (reported by + Ludwig Nussel). diff --git a/svdrp.c b/svdrp.c index b417a8e1..416b8698 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 2.4 2009/06/06 13:42:52 kls Exp $ + * $Id: svdrp.c 2.5 2009/06/06 14:03:55 kls Exp $ */ #include "svdrp.h" @@ -798,16 +798,17 @@ void cSVDRP::CmdGRAB(const char *Option) char RealFileName[PATH_MAX]; if (FileName) { if (grabImageDir) { - cString s; - char *slash = strrchr(FileName, '/'); + cString s(FileName); + FileName = s; + const char *slash = strrchr(FileName, '/'); if (!slash) { s = AddDirectory(grabImageDir, FileName); FileName = s; } slash = strrchr(FileName, '/'); // there definitely is one - *slash = 0; - char *r = realpath(FileName, RealFileName); - *slash = '/'; + cString t(s); + t.Truncate(slash - FileName); + char *r = realpath(t, RealFileName); if (!r) { LOG_ERROR_STR(FileName); Reply(501, "Invalid file name \"%s\"", FileName);