*** empty log message ***
[dana/urxvt.git] / src / misc.C
index a56e4de..e93dba7 100644 (file)
@@ -108,17 +108,19 @@ rxvt_utf8towcs (const char *str, int len)
 
   unsigned char *s = (unsigned char *)str;
 
-  while (len--)
+  while (len)
     {
       if (s[0] < 0x80)
-        *p++ = *s++;
+        {
+          *p++ = *s++; len--;
+        }
       else if (len > 0 
                && s[0] >= 0xc2 && s[0] <= 0xdf 
                && (s[1] & 0xc0) == 0x80)
         {
           *p++ = ((s[0] & 0x1f) << 6)
                |  (s[1] & 0x3f);
-          s += 2;
+          s += 2; len -= 2;
         }
       else if (len > 1 
                && (   (s[0] == 0xe0                 && s[1] >= 0xa0 && s[1] <= 0xbf)
@@ -131,7 +133,7 @@ rxvt_utf8towcs (const char *str, int len)
           *p++ = ((s[0] & 0x0f) << 12)
                | ((s[1] & 0x3f) <<  6)
                |  (s[2] & 0x3f);
-          s += 3;
+          s += 3; len -= 3;
         }
       else if (len > 2
                && (   (s[0] == 0xf0                 && s[1] >= 0x90 && s[1] <= 0xbf)
@@ -145,12 +147,12 @@ rxvt_utf8towcs (const char *str, int len)
                | ((s[1] & 0x3f) << 12) 
                | ((s[2] & 0x3f) <<  6) 
                |  (s[3] & 0x3f);
-          s += 4;
+          s += 4; len -= 4;
         }
       else
         {
           *p++ = 0xfffd;
-          s++;
+          s++; len--;
         }
     }