起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1074|回复: 1

[处理中2] baas服务内置类TokenManager等有严重BUG

[复制链接]

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
发表于 2016-4-26 19:25:36 | 显示全部楼层 |阅读模式
1、该类的派生类MathCmpMatcher中,请将注释 cmps.put("!=", TokenKind.MATH_CMP_NE); 前面的注释去掉,因为 != 符号在SQL是合法的比较符。
2、该类中函数matchToken存在性能问题和BUG。
首先说性能问题,Set<TokenKind> kindSet = matchers.keySet();应该放在while循环外面;
其次说BUG,while内部的for遍历,如果没有一个命中,应该抛出异常,而现在是继续回到外层循环,导致无限死循环,这样的恶果是,一个不规范的SQL字符串,就可以将服务器CPU资源吃尽。函数修复建议如下:
  1.         private List<Token> matchToken(CharStream stream) {
  2.                 List<Token> ret = new ArrayList<Token>();
  3.                 Utilities.skipWhite(stream);
  4.                 Set<TokenKind> kindSet = matchers.keySet();
  5.                 boolean ishit = true;
  6.                 while(ishit && !stream.isEof()){
  7.                         ishit = false;
  8.                         for(TokenKind kind : kindSet){
  9.                                 stream.mark();
  10.                                 Token tk = matchers.get(kind).match(stream);
  11.                                 if (tk != null) {
  12.                                         stream.unmark();
  13.                                         ret.add(tk);
  14.                                         Utilities.skipWhite(stream);
  15.                                         ishit = true;
  16.                                         break;
  17.                                 }else stream.back();
  18.                         }
  19.                 }
  20.                 if(!ishit){
  21.                         throw new SQLException("无法分析SQL语句中的某个成分,开始于:" + stream.subString(stream.position(), stream.length()));
  22.                 }
  23.                 return ret;
  24.         }
复制代码

12

主题

2627

帖子

2866

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2866
发表于 2016-4-27 09:21:26 | 显示全部楼层
谢谢楼主, 已经通知相关的开发人员
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-6-2 16:29 , Processed in 0.065373 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表