Yaf中map路由下delimiter的問題,yafdelimiter
由於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去解析,所以程式出現了問題。
感謝鳥哥快速的回覆!
http://www.bkjia.com/PHPjc/1035427.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1035427.htmlTechArticleYaf中map路由下delimiter的問題,yafdelimiter 由於map路由下使用者請求的url會按照"/"分級對應到controllers下的目錄下的Controller上,action則預設為in...