亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? handlers.c

?? 源碼漏洞檢查
?? C
字號:
/* handlers.C * John Viega * * Jan 28-29 2000 */#include "lex.H"#include "handlers.H"#include "resultsdb.H"#include "config.H"#include "dict.H"#include "strpool.H"void ConditionalAdd(char *source, int line, Severity s,		    VulnInfo *v, int explanation=0){  // If we're in input scanning mode, severitys are ignored.  if(s>=GetSeverityCutoff() || GetInputScanning())    AddResult(source, line, s, v, explanation);}static void ReportFormatAttack(VulnInfo *v, Token *t, char *source, 			       int construct_new_vulninfo=1){  VulnInfo *new_v, *proto_info;  if(construct_new_vulninfo) {    proto_info = GetVulnInfo("printf");    if(!proto_info) {      // Shitty kludge to make sure this doesn't crash on the off chance      // an old or incomplete database is being used with new handlers.      new_v = new VulnInfo(AddStringToPool("Format strings should be constant."), 			   AddStringToPool("Don't use variable format strings."), 			   S_MOST_RISKY,			   0, v->id, 0);    }    else {      new_v = new VulnInfo(proto_info->desc, proto_info->solution, S_MOST_RISKY,			   0 /* ignored */, v->id, 0);    }  }  else {    new_v = v;  }  ConditionalAdd(source, t?(t->GetLineNo()):-1, S_MOST_RISKY, new_v, 		 construct_new_vulninfo /* If 1, not the default explanation. */);}void FindNextArgument(TokenContainer *tc, int &i){  int nesting = 0;  char *repr;  Token *tok;  while((tok = tc->GetToken(i++)))    {      switch(tok->GetTokenType())	{	case OPERATOR:	  repr = ((OperatorTok *)tok)->GetOperatorName();	  if(!strcmp(repr, "("))	    {	      nesting++;	      continue;	    }	  if(!strcmp(repr, ")"))	    {	      if(!nesting--) 		return;	      continue;	    }	  if(!nesting && !strcmp(repr, ","))	    {	      return;	    }	default:	  continue;	}    }  i = -1;  return;}void DefaultHandler(VulnInfo *v, TokenContainer *tc, int i, char *source){    /* NOTE: i points to the token AFTER the identifier, because handlers   * generally check the stuff after the identifier.  So when we report   * the line number, ask the original token, just in case the next token   * is on the next line.   */  IdTok *tok = (IdTok *)tc->GetToken(i-1);  // Assert t->GetTokenType() == IDENTIFIER    ConditionalAdd(source, tok?(tok->GetLineNo()):-1, v->severity, v);}/* Handle functions of the form f(arg1, arg2), where arg2 being a string * constant more or less renders the call harmless from a breakin pov. * TODO: Should actually check that the first token is a left paren! */void StrcpyHandler(VulnInfo *v, TokenContainer *tc, int i, char *source){  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok)     {    default_handler:      DefaultHandler(v, tc, original_i, source);      return;    }  FindNextArgument(tc, i);  if(i<0){goto default_handler;}  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING){goto default_handler;}  // You can still overflow the buffer, but you really won't have to  // worry about a breakin, etc. except in very rare cases.  ConditionalAdd(source, tc->GetToken(original_i)->GetLineNo(),S_NO_RISK,v);}/* Scan the format string if we can find it (it's the 2nd arg).  If there's * no %s, then we're not too worried, unless there aren't quotes, in which * case we're very worried. */void SprintfHandler(VulnInfo *v, TokenContainer *tc, int i, char *source){  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok)     {    default_handler:      DefaultHandler(v, tc, original_i, source);      return;    }  FindNextArgument(tc, i);  if(i<0){goto default_handler;}  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING){    ReportFormatAttack(v, tok, source);    return;  }  char *s = ((StringTok*)tok)->GetContents();  while((s=strchr(s,'%')))    {      if(*(++s) == 's')	goto default_handler;    }  // We can't make it NO risk, because the s might not follow the   // %, but it usually does.  And when it doesn't, people are often  // using the precision modifiers, which also helps avoid the problem.  ConditionalAdd(source, tc->GetToken(original_i)->GetLineNo(),S_LOW_RISK,v);}/* Scan the format string if we can find it (it's the 3rd arg on Linux at least) * If there's no %s, then we're not too worried (tho we weren't worried  * before either). */void SnprintfHandler(VulnInfo *v, TokenContainer *tc, int i, char *source){  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok)     {    default_handler:      DefaultHandler(v, tc, original_i, source);      return;    }  FindNextArgument(tc, i);  if(i<0){goto default_handler;}  FindNextArgument(tc, i);  if(i<0){goto default_handler;}  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING){    ReportFormatAttack(v, tok, source);    return;  }  char *s = ((StringTok*)tok)->GetContents();  while((s=strchr(s,'%')))    {      if(*(++s) == 's')	  goto default_handler;    }  // We can't make it NO risk, because the s might not follow the   // %, but it usually does.  And when it doesn't, people are often  // using the precision modifiers, which also helps avoid the problem.  ConditionalAdd(source, tc->GetToken(original_i)->GetLineNo(),S_LOW_RISK,v);}void ScanfHandler(VulnInfo *v, TokenContainer *tc, int i, char *source){  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok)     {    default_handler:      DefaultHandler(v, tc, original_i, source);      return;    }  tok = tc->GetToken(i);  if(!tok || (tok->GetTokenType() != STRING)){goto default_handler;}  char *s = ((StringTok*)tok)->GetContents();  while((s=strchr(s,'%')))    {      if(*(++s) == 's')	goto default_handler;    }  ConditionalAdd(source, tc->GetToken(original_i)->GetLineNo(),S_NO_RISK,v);}// This is exactly the same as the Sprintf handler, but if we don't see// a %s, I'm willing to classify it as no risk.  Might not be the best// idea...void SscanfHandler(VulnInfo *v, TokenContainer *tc, int i, char *source){  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok)     {    default_handler:      DefaultHandler(v, tc, original_i, source);      return;    }  FindNextArgument(tc, i);  if(i<0){goto default_handler;}  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING){goto default_handler;}  char *s = ((StringTok*)tok)->GetContents();  while((s=strchr(s,'%')))    {      if(*(++s) == 's')	goto default_handler;    }  ConditionalAdd(source, tc->GetToken(original_i)->GetLineNo(),S_NO_RISK,v);}void FprintfHandler(VulnInfo *v, TokenContainer *tc, int i, char *source) {  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok) {  default_handler:    DefaultHandler(v, tc, original_i, source);    return;  }  FindNextArgument(tc, i);  if(i<0) goto default_handler;  FindNextArgument(tc, i);  if(i<0) goto default_handler;  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING) {    ReportFormatAttack(v, tok, source, 0);    return;  }  goto default_handler;}void PrintfHandler(VulnInfo *v, TokenContainer *tc, int i, char *source) {  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok) {  default_handler:    DefaultHandler(v, tc, original_i, source);    return;  }  FindNextArgument(tc, i);  if(i<0) goto default_handler;  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING) {    ReportFormatAttack(v, tok, source, 0);    return;  }  goto default_handler;}void SyslogHandler(VulnInfo *v, TokenContainer *tc, int i, char *source) {  int original_i = i;  Token *tok = tc->GetToken(i++);  if(!tok) {  default_handler:    DefaultHandler(v, tc, original_i, source);    return;  }  FindNextArgument(tc, i);  if(i<0) goto default_handler;  FindNextArgument(tc, i);  if(i<0) goto default_handler;  tok = tc->GetToken(i);  if(tok->GetTokenType() != STRING) {    ReportFormatAttack(v, tok, source);    return;  }  goto default_handler;}static Dictionary<TTBucket> *toctou_info;char *GrabSomeMem(int x) { return new char[x]; }void Generic_TOCTOU_Handler(VulnInfo *v, TokenContainer *tc, int i, 			    char *source, int which){  int original_i = i;  int line_no;  // assert which in [0,1,2]  Token *tok = tc->GetToken(i-1);  line_no = tok->GetLineNo();  tok = tc->GetToken(i++);  // If the next thing isn't a left paren  if(!tok || (tok->GetTokenType() != OPERATOR) ||      strcmp(((OperatorTok *)tok)->GetOperatorName(), "("))    {    default_handler:      DefaultHandler(v, tc, original_i, source);      return;    }  int j = i;  FindNextArgument(tc, j);  j--;  char *arg_repr = 0;  int  arg_size = 0;  if((i>=j) || (j==-1)) goto default_handler;  for(;i<j;i++)    {      tok = tc->GetToken(i);      char *varname = 0;      varname = tok->GetValue();      int x = strlen(varname);      char *tmp = new char[arg_size+x+2];      arg_size += x+1;      if(arg_repr)	{	  // This will add a shitload of extra spaces, but hey.	  sprintf(tmp, "%s%s", arg_repr, varname); // ITS4: ignore sprintf	  delete[] arg_repr;	  arg_repr = tmp;	}      else	{	  sprintf(tmp, "%s", varname); // ITS4: ignore sprintf	  arg_repr = tmp;	}      if(tok->AllocedValue()) delete[] varname;    }  TTSite *t = new TTSite(v, source, line_no);  short error = 0;  TTBucket *b = toctou_info->GetItem(arg_repr, error);  if(!b)    {      b = new TTBucket();      if(!b) OutOfMemory();      toctou_info->SetItem(arg_repr, b);    }  else    {      delete[] arg_repr;    }  t->next = 0;  if(!b->calls[which])    {      b->calls[which] = b->ends[which] = t;      b->num[which] = 1;    }  else    {      b->ends[which]->next = t;      b->ends[which] = t;      b->num[which]++;    }}    void TOCTOU_A_Handler(VulnInfo *v, TokenContainer *tc, int i, char *src){  Generic_TOCTOU_Handler(v,tc,i,src,0);}void TOCTOU_B_Handler(VulnInfo *v, TokenContainer *tc, int i, char *src){  Generic_TOCTOU_Handler(v,tc,i,src,1);}void TOCTOU_C_Handler(VulnInfo *v, TokenContainer *tc, int i, char *src){  DefaultHandler(v,tc,i,src);}void RunTOCTOUScan(){  int numkeys = toctou_info->GetNumKeys();  int n;  char **varnames = new char* [numkeys];  if(!varnames)    OutOfMemory();  toctou_info->GetKeys(varnames);  for(int i = 0; i<numkeys; i++)    {      short error;      TTBucket *b = toctou_info->GetItem(varnames[i], error);      TTSite *first_t = b->calls[0];      // This being true means there is no increase in severity      // but we use first_t to report all the stuff we didn't report eariler      if(!first_t)first_t = b->calls[1];      // assert b != NULL      if((b->num[0] > 1) || (b->num[0] && b->num[1]))	{	  const char *fnamefmt = (GetMSVSFormat() ? "%s(%d) " : "%s:%d: ");	  TTSite *cur = b->calls[0];	  n = strlen(fnamefmt)+strlen(cur->source_file)+	                         3*sizeof(cur->line);	  char *buf1  = new char[n];	  if(!buf1) OutOfMemory();	  /* ITS4: ignore */	  sprintf(buf1, fnamefmt, cur->source_file, cur->line);	  const char *fmt = (GetMSVSFormat() ? 		  "Potential race condition on: %s\n  Points of concern are:\n    %s: %s" :	      "Potential race condition on: %s\nPoints of concern are:\n%s%s");	  char *funcname = GetNameById(cur->vuln->id);	  n = strlen(fmt)+2*strlen(buf1)+				  strlen(varnames[i])+strlen(funcname);	  char *buf2   = new char[n];	  if(!buf2) OutOfMemory();	  /* ITS4: ignore */	  sprintf(buf2, fmt, varnames[i], buf1, funcname);	  delete[] buf1;	  fmt = (GetMSVSFormat() ? "%s\n    %s(%d) : %s\n  Advice" :	      "%s\n%s:%d: %s");	  cur = cur->next;	  for(int j=1;j<b->num[0];j++)	    {	      funcname = GetNameById(cur->vuln->id);	  n = strlen(fmt)+strlen(cur->source_file)+	                      strlen(funcname)+3*sizeof(cur->line)+     	                      strlen(buf2);	  buf1 = new char[n];	      if(!buf1)		OutOfMemory();	      /* ITS4: ignore */	      sprintf(buf1, fmt, buf2, cur->source_file, cur->line,		      funcname);	      delete[] buf2;	      buf2 = buf1;	      cur = cur->next;	    }	  cur = b->calls[1];	  for(int k=0;k<b->num[1];k++)	    {	      funcname = GetNameById(cur->vuln->id);	      n = strlen(fmt)+strlen(cur->source_file)+	                      strlen(funcname)+3*sizeof(cur->line)+			      strlen(buf2);	      buf1 = new char[n]; 	      if(!buf1)		OutOfMemory();	      /* ITS4: ignore */	      sprintf(buf1, fmt, buf2, cur->source_file, cur->line,		      funcname);	      delete[] buf2;	      buf2 = buf1;	      cur = cur->next;	    }	  VulnInfo *new_v = new VulnInfo(AddStringToPool(buf2), 					 first_t->vuln->solution, 					 S_VERY_RISKY, 0, 					 first_t->vuln->id, 0);	  AddResult(first_t->source_file,first_t->line, S_VERY_RISKY, new_v);	  delete[] buf2;	}      else  // give the standard warning for anything that is there.	{	  TTSite *cur = first_t;	  while(cur)	    {	      AddResult(cur->source_file, cur->line, 			cur->vuln->severity, cur->vuln);	      cur = cur->next;	    }	}    }  delete[] varnames;}void DoPostProcessing(){  RunTOCTOUScan();}void InitHandlers(){  toctou_info = new Dictionary<TTBucket>(5);  if(!toctou_info)    OutOfMemory();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩av| 欧美一区二区在线播放| 国产欧美精品一区二区色综合| 免费在线观看精品| 精品欧美黑人一区二区三区| 美女在线一区二区| 精品日韩成人av| 成人一区二区三区| 亚洲婷婷综合色高清在线| 91美女视频网站| 亚洲宅男天堂在线观看无病毒| 欧美日韩一区二区在线观看视频| 视频在线观看一区二区三区| 日韩欧美国产精品一区| 国产一本一道久久香蕉| 亚洲日穴在线视频| 欧美顶级少妇做爰| 国产sm精品调教视频网站| 国产精品久久久久久妇女6080 | 国产三级久久久| 91麻豆国产香蕉久久精品| 性做久久久久久免费观看| 精品国产一区久久| 成人国产精品免费| 亚洲国产成人精品视频| 精品久久久久一区二区国产| 国产盗摄一区二区三区| 亚洲欧美激情插| 日韩欧美成人午夜| 成a人片国产精品| 午夜精品国产更新| 中文字幕免费一区| 在线电影院国产精品| 国产电影一区二区三区| 亚洲va中文字幕| 中文字幕不卡在线观看| 6080日韩午夜伦伦午夜伦| 成人综合在线观看| 美女在线一区二区| 一区二区三区在线播| 久久久综合精品| 欧美日韩精品一区二区天天拍小说 | 最新中文字幕一区二区三区| 欧美亚男人的天堂| 成人美女视频在线观看| 日本伊人精品一区二区三区观看方式| 国产欧美精品日韩区二区麻豆天美| 色欧美日韩亚洲| 黑人精品欧美一区二区蜜桃| 国产一区二区三区在线观看免费| 亚洲视频一区在线观看| 精品美女在线播放| 欧美日本乱大交xxxxx| 成人免费高清在线观看| 精品亚洲成av人在线观看| 亚洲自拍偷拍av| 亚洲色图欧美在线| 久久久久九九视频| 欧美刺激午夜性久久久久久久| 色欧美日韩亚洲| 99国产精品国产精品毛片| 国产精品一线二线三线精华| 爽爽淫人综合网网站| 有码一区二区三区| 中文字幕亚洲成人| 日本一区二区成人| 久久午夜色播影院免费高清| 欧美丰满少妇xxxxx高潮对白| 91最新地址在线播放| 处破女av一区二区| 国产成人亚洲综合色影视| 韩国三级中文字幕hd久久精品| 日韩二区三区四区| 三级成人在线视频| 午夜国产精品一区| 亚洲成人资源网| 性欧美疯狂xxxxbbbb| 亚洲成人免费观看| 婷婷开心激情综合| 日韩精品亚洲一区| 日本亚洲三级在线| 麻豆成人免费电影| 国内精品在线播放| 国产成人福利片| 国产91对白在线观看九色| 国产成人在线免费观看| 国产经典欧美精品| 国产91精品精华液一区二区三区| 国产凹凸在线观看一区二区| 成人国产精品免费观看视频| 不卡免费追剧大全电视剧网站| www.综合网.com| 欧美伊人久久久久久午夜久久久久| 欧美性色黄大片| 91精品国产91久久综合桃花| 欧美电视剧在线看免费| 久久久一区二区三区捆绑**| 久久久国产精品不卡| 国产精品丝袜91| 亚洲精品欧美激情| 三级成人在线视频| 国产乱子轮精品视频| 99视频在线精品| 欧美亚洲综合另类| 欧美成人在线直播| 中文字幕国产精品一区二区| 亚洲女同ⅹxx女同tv| 亚洲福利一区二区| 久久99精品国产麻豆婷婷洗澡| 国产精品一区二区男女羞羞无遮挡| 国产69精品久久777的优势| 972aa.com艺术欧美| 欧美另类变人与禽xxxxx| 欧美精品一区二区三区蜜桃| 综合欧美亚洲日本| 日本一区中文字幕| 不卡影院免费观看| 欧美精品xxxxbbbb| 国产精品素人视频| 亚洲一级不卡视频| 国产伦理精品不卡| 欧美在线观看视频一区二区 | 99久久777色| 日韩欧美中文一区二区| 国产精品久久久久久久久搜平片| 亚洲一二三四久久| 国产.精品.日韩.另类.中文.在线.播放| 在线视频欧美精品| 久久精品视频网| 丝袜亚洲另类丝袜在线| 国产成人啪免费观看软件| 欧美性受xxxx黑人xyx性爽| 国产拍欧美日韩视频二区| 天天免费综合色| 99久久99久久精品国产片果冻 | 久久久久久久久久电影| 亚洲成人免费在线观看| 国产91清纯白嫩初高中在线观看| 欧美日韩高清不卡| 亚洲美女在线一区| 韩国精品免费视频| 欧美军同video69gay| 国产精品无码永久免费888| 蜜桃一区二区三区在线观看| 色综合激情五月| 久久久精品蜜桃| 日本成人在线网站| 欧美在线一区二区三区| 日韩毛片视频在线看| 国产永久精品大片wwwapp| 欧美喷水一区二区| 一区二区三区精密机械公司| 久久精品国产成人一区二区三区| 在线观看一区不卡| |精品福利一区二区三区| 国产麻豆成人传媒免费观看| 日韩天堂在线观看| 日日嗨av一区二区三区四区| 欧洲国产伦久久久久久久| 国产精品美女久久久久久| 国产精品一区二区视频| 久久久综合九色合综国产精品| 蜜臀av一区二区在线观看| 欧美日韩亚洲不卡| 一区2区3区在线看| 欧美专区在线观看一区| 夜夜爽夜夜爽精品视频| 91天堂素人约啪| 亚洲美女视频一区| 一本一道久久a久久精品| 亚洲日本成人在线观看| 91在线丨porny丨国产| 中文字幕在线不卡视频| 波多野结衣一区二区三区| 国产精品免费免费| 91伊人久久大香线蕉| 一区二区三区国产豹纹内裤在线 | 国产综合成人久久大片91| 精品国产一区二区亚洲人成毛片| 久久精品99久久久| 国产偷国产偷精品高清尤物| 大陆成人av片| 亚洲免费高清视频在线| 欧美精品自拍偷拍| 国产在线精品免费| 久久精品视频免费观看| 97精品国产97久久久久久久久久久久| 日韩毛片高清在线播放| 欧美色视频在线| 黄一区二区三区| 亚洲三级在线免费| 91精品国产综合久久福利| 国产一区二区导航在线播放| 国产精品家庭影院| 欧美日韩中文字幕精品| 精品亚洲aⅴ乱码一区二区三区| 国产亚洲综合在线| 日本电影欧美片| 美女国产一区二区| 国产精品福利影院|