一个用到Boost中time_duration类而产生的bug

测试小组提交在ClearQuest上的一个Defect引起了我的注意,当一个逻辑中输入日期为1940年以前的任何一个值时,会产生异常,程序逻辑不正常,直觉告诉我,这有可能是其中用到时间比较时出了错,果不其然,在经过仔细定位后发现一段程序:

而跟踪到这里时发现,计算出的这个diff居然是负值!

仔细查阅文档,发现我的boost date_time库在编译时选择了time_duration的ticks数据类型为__int64,此时发生了数据溢出:)

65*365*24*60*60*1000000000

   boost::posix_time::time_duration diff = util::ptime_now() - util::oletime_to_boosttime(dateOfBirth);
   if( diff.is_negative() || diff > boost::posix_time::hours(200*365*24) )
     return E_INVALIDARG;
   }

改成用DATE_DURATION来计算就没有问题了

    boost::gregorian::date_duration diff = boost::gregorian::day_clock::local_day()- util::oledate_to_boostdate(dateOfBirth);

    if( diff.is_negative() || diff > boost::gregorian::date_duration(200*365) )
     return E_INVALIDARG;
   }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值