Ignore:
Timestamp:
Oct 12, 2001, 5:20:41 AM (24 years ago)
Author:
phaller
Message:

fixed potential memory overwrite in debugstr_

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/win/debugtools.h

    r6381 r7026  
     1/* $Id: debugtools.h,v 1.17 2001-10-12 03:20:41 phaller Exp $ */
    12
    23#ifndef __WINE_DEBUGTOOLS_H
     
    211212  dst = res;
    212213  *dst++ = '"';
    213   while (n-- > 0 && *src)
     214 
     215  // PH safety margin 10 characters, overwrites
     216  // memory otherwise
     217  while (n-- > 10 && *src)
     218  {
     219    BYTE c = *src++;
     220    switch (c)
    214221    {
    215       BYTE c = *src++;
    216       switch (c)
    217    {
    218    case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
    219    case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
    220    case '\t': *dst++ = '\\'; *dst++ = 't'; break;
    221    case '"': *dst++ = '\\'; *dst++ = '"'; break;
    222    case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
    223    default:
    224      if (c >= ' ' && c <= 126)
    225        *dst++ = c;
    226      else
    227        {
    228          *dst++ = '\\';
    229          *dst++ = '0' + ((c >> 6) & 7);
    230          *dst++ = '0' + ((c >> 3) & 7);
    231          *dst++ = '0' + ((c >> 0) & 7);
    232        }
    233    }
     222    case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
     223    case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
     224    case '\t': *dst++ = '\\'; *dst++ = 't'; break;
     225    case '"': *dst++ = '\\'; *dst++ = '"'; break;
     226    case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
     227    default:
     228      if (c >= ' ' && c <= 126)
     229        *dst++ = c;
     230      else
     231      {
     232        n -= 3;
     233        *dst++ = '\\';
     234        *dst++ = '0' + ((c >> 6) & 7);
     235        *dst++ = '0' + ((c >> 3) & 7);
     236        *dst++ = '0' + ((c >> 0) & 7);
     237      }
    234238    }
     239  }
     240 
    235241  *dst++ = '"';
     242 
    236243  if (*src)
    237     {
    238       *dst++ = '.';
    239       *dst++ = '.';
    240       *dst++ = '.';
    241     }
     244  {
     245    *dst++ = '.';
     246    *dst++ = '.';
     247    *dst++ = '.';
     248  }
    242249  *dst++ = '\0';
    243250  return res;
     
    263270  *dst++ = 'L';
    264271  *dst++ = '"';
    265   while (n-- > 0 && *src)
     272 
     273  // PH safety margin 10 characters, overwrites
     274  // memory otherwise
     275  while (n-- > 10 && *src)
     276  {
     277    WORD c = *src++;
     278    switch (c)
    266279    {
    267       WORD c = *src++;
    268       switch (c)
    269    {
    270    case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
    271    case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
    272    case '\t': *dst++ = '\\'; *dst++ = 't'; break;
    273    case '"': *dst++ = '\\'; *dst++ = '"'; break;
    274    case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
    275    default:
    276      if (c >= ' ' && c <= 126)
    277        *dst++ = (char)c;
    278      else
    279        {
    280          *dst++ = '\\';
    281           sprintf(dst,"%04x",c);
    282           dst+=4;
    283        }
    284    }
     280    case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
     281    case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
     282    case '\t': *dst++ = '\\'; *dst++ = 't'; break;
     283    case '"': *dst++ = '\\'; *dst++ = '"'; break;
     284    case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
     285    default:
     286      if (c >= ' ' && c <= 126)
     287        *dst++ = (char)c;
     288      else
     289      {
     290        n -= 3;
     291        *dst++ = '\\';
     292        sprintf(dst,"%04x",c);
     293        dst+=4;
     294      }
    285295    }
     296  }
    286297  *dst++ = '"';
    287298  if (*src)
    288     {
    289       *dst++ = '.';
    290       *dst++ = '.';
    291       *dst++ = '.';
    292     }
     299  {
     300    *dst++ = '.';
     301    *dst++ = '.';
     302    *dst++ = '.';
     303  }
    293304  *dst++ = '\0';
    294305  return res;
Note: See TracChangeset for help on using the changeset viewer.