器件型号:OPT8241-CDK-EVM
Thilo 在 GitHub 上( https://github.com/3dtof/voxelsdk/issues/93)输入了此漏洞(又名 theten85)、该漏洞已于2016年9月1日报告
但是、TI 的反应是没有什么问题、这种拒绝让我们的团队决定放弃官方 SDK 并自行应用 Thilo 的错误修复。
这不是一个理想的情况,因此,下面我要重复一个问题:
在 voxelSDK 0.6.11 (和早期版本)中、方法 CloudPointTransform::getDirection (int row、int col)返回值"directions[col * width + row]"
这是错误的、它应该返回"Directions [row * width + col]"!!!
很容易看到、SDK 此区域中的所有平面阵列都具有各自的数据"逐行"(主要行顺序)、
因此、水平= x =列= u 方向"变快"、
垂直= y =行= v 方向"变慢"。
为了更加具体:数组方向[]填充方法 CloudPointTransform::_init()如下所示:
Directions.clear();
对于(int v = top;v < top + height;v++)
{
对于(int u = left;u < left + width;u++)
{
点方向=……;
Directions.push_back (dir);
}
}
为简单起见、顶部=左侧= 0、然后显然要在(y、x)=(v、u)=(row、col)处访问元素、我们必须使用 index = row*width + col;
要说服自己、请执行以下代码:
{
uint32_t left = 0;
uint32_t top = 0;
uint32_t 宽度= 320;
uint32_t 高度= 240;
uint32_t rowsToMerge = 1;
uint32_t 列 ToMerge = 1;
float fx = 200;
FY 悬空= 200;
浮点 Cx =(宽度- 1)* 0.5f;
浮动 cy =(高度- 1)* 0.5f;
浮点 K1 = 0;
浮点 K2 = 0;
浮点 K3 = 0;
浮点 P1 = 0;
浮点 P2 = 0;
体素::PointCloudTransformation pcltransl()
左侧、顶部、宽度、高度、行至合并、 列合并、
FX、FY、CX、Cy、K1、 K2、K3、P1、P2);
int row_ar[]={0、高度- 1、高度- 1、0};
int col_ar[]={0、0、宽度- 1、宽度- 1};
对于(int k = 0;k < 4;+k)
{
点&pt = pcltransform.getDirection (row_ar[k]、col_ar[k]);
std:::cout <<"(row、col)=("<< row_ar[k]<<"、"<< col_ar[k]<<"):(x、y、z)="<< pt.x <<"<< pt.y <<"<<"<< pt.z << std:endl;
}
}
使用官方 SDK 时、这将崩溃、并在应用错误修复时正常运行。
希望这足够清楚、谨致问候、
时代范达尔夫森