[vdr] Crash with cMenuEditStrItem in vdr-1.5.9

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Sat Oct 13 12:45:40 CEST 2007


On 09/29/07 09:33, Christian Wieninger wrote:
> Hi,
> 
> me and Rolf Ahrenberg noticed that there seems to be a problem with 
> cMenuEditStrItem in vdr-1.5.9. To reproduce it just call the timer edit 
> menu and hit 'left' on the directory item or any other cMenuEditStrItem 
> object. The following patch should fix this:
> 
> --- vdr-1.5.9/menuitems.c       2007-08-17 15:48:07.000000000 +0200
> +++ VDR/menuitems.c     2007-09-29 09:02:12.000000000 +0200
> @@ -500,7 +500,7 @@
>                         pos--;
>                      newchar = true;
>                      }
> -                 if (!insert && Utf8is(alpha, valueUtf8[pos]))
> +                 if (pos >= 0 && !insert && Utf8is(alpha, valueUtf8[pos]))
>                      uppercase = Utf8is(upper, valueUtf8[pos]);
>                   break;
>      case kRight|k_Repeat:
> 
> It happens here that pos is -1.

I would even put the whole 'if (!insert &&...' into the first
'if (pos > 0)...', because it only makes sense if an actual cursor
movement to the left has taken place:

--- menuitems.c 2007/08/17 13:48:07     1.51
+++ menuitems.c 2007/10/13 10:39:40
@@ -499,9 +499,9 @@
                     if (!insert || newchar)
                        pos--;
                     newchar = true;
+                    if (!insert && Utf8is(alpha, valueUtf8[pos]))
+                       uppercase = Utf8is(upper, valueUtf8[pos]);
                     }
-                 if (!insert && Utf8is(alpha, valueUtf8[pos]))
-                    uppercase = Utf8is(upper, valueUtf8[pos]);
                  break;
     case kRight|k_Repeat:
     case kRight: if (InEditMode())


Klaus



More information about the vdr mailing list