Yaf中地图路由下delimiter的有关问题
程序员文章站
2024-04-05 15:24:30
...
Yaf中map路由下delimiter的问题
由于map路由下用户请求的url会按照"/"分级对应到controllers下的目录下的Controller上,action则默认为indexAction,所以想要实现/key1/param1/key2/param2这种形式进行传参,就要通过delimiter来讲url分割成req_uri和query_str两个部分。
在实践中,定义了delimiter(尽管并没有用到它的功能),这时,如果用户的请求(更多的是爬虫或扫站)无意中包含以下形式:/aaa/bbb[delimiter](xxx)?/key1/param1/key2/param2...,会造成程序崩溃。
将这个问题提给鸟哥后,鸟哥迅速给出了修复(18~19行):
1 if (Z_TYPE_P(delimer) == IS_STRING 2 && Z_STRLEN_P(delimer)) { 3 if ((query_str = strstr(req_uri, Z_STRVAL_P(delimer))) != NULL 4 && *(query_str - 1) == '/') { 5 tmp = req_uri; 6 rest = query_str + Z_STRLEN_P(delimer); 7 if (*rest == '\0') { 8 req_uri = estrndup(req_uri, query_str - req_uri); 9 query_str = NULL;10 efree(tmp);11 } else if (*rest == '/') {12 req_uri = estrndup(req_uri, query_str - req_uri);13 query_str = estrdup(rest);14 efree(tmp);15 } else {16 query_str = NULL;17 }18 } else {19 query_str = NULL;20 }
通过delimer获取了query_str后,判断delimer的前一个字符是"/"的情况,却没有判断不是的情况,导致不符合/aaa/bbb/[delimer]/key1/param1/...形式的urk被截断成req_uri和query_str去解析,所以程序出现了问题。
感谢鸟哥快速的答复!
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: Oracle中虚拟专用数据控制方法研究
下一篇: 高性能PHP学习-基准测试技术
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论