Advertisement
Blzut3

ZDoom parser crash

Jan 2nd, 2014
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <ctype.h>
  5.  
  6. struct FParseSymbol
  7. {
  8.     int Value;
  9.     char Sym[80];
  10. };
  11.  
  12. union FParseToken
  13. {
  14.     int val;
  15.     double fval;
  16.     char sym[80];
  17.     char string[80];
  18.     FParseSymbol *symval;
  19. };
  20.  
  21. static FParseSymbol symbols[10];
  22. bool FindSym (char *sym, FParseSymbol **val)
  23. {
  24.     // Remove loop or if here to fix
  25.     for(unsigned i=0;i<10; i++)
  26.     {
  27.         if (strcmp (symbols[i].Sym, sym) == 0)
  28.         {
  29.             *val = &symbols[i];
  30.             return true;
  31.         }
  32.     }
  33.     return false;
  34. }
  35.  
  36. int GetToken (char *&sourcep, FParseToken *yylval)
  37. {
  38.     char token[80];
  39.     int toksize;
  40.     int c;
  41.  
  42. loop:
  43.     while (isspace (c = *sourcep++) && c != 0)
  44.     {
  45.     }
  46.  
  47.     if (isalpha (c))
  48.     {      
  49.         token[0] = c;
  50.         token[1] = c;
  51.         token[2] = c;
  52.         token[3] = c;
  53.         token[4] = c;
  54.         token[5] = c;
  55.         token[6] = c;
  56.         token[7] = c;
  57.         token[8] = c;
  58.         token[9] = c;
  59.         token[10] = c;
  60.         toksize = 10;
  61.         token[toksize] = 0;
  62.  
  63.         // Remove this if line to fix
  64.         if (FindSym (token, &yylval->symval)) return 0;
  65.         strcpy (yylval->sym, token);
  66.  
  67.         // Replacing above strcpy with this works
  68.         //memcpy(yylval->sym, token, 80);
  69.         return 0;
  70.     }
  71.     return 0;
  72. }
  73.  
  74. int main()
  75. {
  76.     char* test = new char[4096];
  77.     strcpy(test, "asdfg asdfgsdfg s dfgsfg");
  78.  
  79.     FParseToken sym;
  80.     GetToken(test, &sym);
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement