add_cell/add_span是否需要判断数组越界

1触发场景

       目前在wxArt2D项目中,调用a2dStToolContr::Zoomin2函数,会触发add_cell/add_span

越界

2修改代码

> ---thirdparty/agg2/include/agg_scanline_u.h     2006-12-2711:48:54.468750000 -0800

> +++thirdparty/agg2/include/agg_scanline_u.h 2006-12-2711:48:48.796875000 -0800

> @@ -149,6 +149,9 @@

>          void add_cell(int x, unsigned cover)

>          {

>              x -= m_min_x;

> +            if( x < 0 || x > (int)m_covers.size() - 1 ){

> +                return;

> +            }

>              m_covers[x] = (cover_type)cover;

>              if(x == m_last_x+1)

>              {

> @@ -187,6 +190,9 @@

>          void add_span(int x, unsigned len,unsigned cover)

>          {

>              x -= m_min_x;

> +            if(x < 0 || x > (int)m_covers.size() - 1 || len > m_covers.size() - x){

> +                return;

> +            }

>              memset(&m_covers[x], cover,len);

>              if(x == m_last_x+1)

>              {

 

3 对比现在代码

       AGG的任何一个版本都没有将上述的判断纳入发布版本中,是否说明作者希望用户调用的过程中,不会传递一个可能导致数组越界的参数,用户完全理解传递参数的取值范围。就如同你传递一个角度280,给一个弧度参数(AGG几乎所知的度参数都是使用弧度,范围是-3.143.14),不会导致程序崩溃,但是什么效果也没有!!

 

4原文如下

摘自:http://sourceforge.net/p/vector-agg/mailman/vector-agg-general/?viewmonth=200701&page=1

 

 

> The patch just handles "out ofbound" cases in add_cell/add_span that

> were triggered by subsequent calls toa2dStToolContr::Zoomin2.


你可能感兴趣的:(agg, ,add_cell,add_span)