注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android开发之四十五之NDK中对BYTE数组的控制  

2015-10-28 10:31:40|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android开发之四十五之NDK中对BYTE数组的控制

在高度SO的过程,发现了这样一个问题,程序到:
函数:JNIEXPORT jint JNICALL Java_com_irisking_tee_CommTee_AddFeature(JNIEnv *env, jobject obj,
      
jstring userid, jbyteArray dataleft, jbyteArray dataright, jint saveFlag, int flagType )
{
int ret = -1;

if (0==dataleft) {
    LOGD(
"AddFeature dataleft is null, just return -1!");
   
return -1;
}

// 提取出用户名称
char *id = (char*)(*env)->GetStringUTFChars(env,userid,0);//推荐跨平台用法

//
提取出特征
jsize lbuflen = (*env)->GetArrayLength(env,dataleft);
jbyte *lbuf = (*env)->GetByteArrayElements(env,dataleft,0);

jbyte *rbuf = (*env)->GetByteArrayElements(env,dataright,0);
jsize rbuflen = (*env)->GetArrayLength(env,dataright);

ldata = (UINT8*)lbuf;
rdata = (UINT8*)rbuf;

// 把新特征发送过去后,保存特征
IKErrorCode iec = SendFeatureBuild(flagType,id);
LOGD("SendFeatureBuild iec=%x", iec);
if ((iec==TEE_SUCCESS)&&(0==saveFlag))
{
    iec = SaveFeaturesBuild()
;
   
LOGD("SaveFeaturesBuild iec=%x", iec);
}

if (TEE_SUCCESS==iec) {
   
return 0;
}

}

就直接崩溃了,通过打印日志,定位到了jbyte *lbuf = (*env)->GetByteArrayElements(env,dataleft,0);,但是这段代码是经过在Fido中测试过的,可以使用的,为什么会出现这种情况呢?高度怀疑是数据的问题。但由于SO的调试还是不如Android的应用程序那么方便,所以还得接着打日志。

char *id = (char*)(*env)->GetStringUTFChars(env,userid,0);

这个ID返回是空,但没有问题,程序继续向下,还是到了

jbyte *lbuf = (*env)->GetByteArrayElements(env,dataleft,0);

直接挂掉,所以在之前打印数据后发现了问题,这个jbyteArray dataleft这个数据从Android层上传来的是NULL,既然发现了问题,怎么解决呢?

第一个,可以从应用层上处理,判断传入的值是否为空。这个容易控制,但是有一个致命问题,写应用程序的人水平参差不齐,好多人会不判断,或者误用。

第二个,在SO的接口内部判断,这样做的好处是安全性大大提高。但有一个问题,jbyteArray这种类型怎么判断。好好查了下书,发现它竟然也可以象指针一样处理,即:

if (0 == dataleft)

{....}

这不就安全许多么。

该抓细节的时候,还是不能放松。

  评论这张
 
阅读(190)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017