Jive筆記8--查詢的Bug (轉)
(1)建立一個 Forum,everyOne 可讀
(2)建立一個Hidden Category,其下建立一個Forum,命名為Forum(2)
(3)建立第三個Category,其下建立一個Forum(3)均為可讀。
隨意在各個Forum填寫資料,Rebuild Index.
進入search.
選中Forum(3),填入Forum(2)中某個message的內容中某些單詞,Search,查詢結果出來,呵呵。Forum(2)赫然在返回的結果中。
正確的結果應該是:這裡選擇了Forum(3),也就是在forum(3)中查詢,那麼應該是隻允許返回Forum(3)下的結果(地球人都知道)。
原因分析
看Query.:executeQuery()的程式碼:
// Forum filter -- we can ignore filtering if we are searching all // forums in the system. if (forums.length != 0 && factory.getForumCount() != forums.length) { String[] forumIDs = new String[forums.length]; for (int j=0; j public Query createQuery() { // Special implementation of this method so that we can detene the // actual list of forums that the user has permissions to search over. ArrayList forumList = new ArrayList(); for (Iterator iter = forums(); iter.hasNext(); ) { forumList.add(iter.next()); } Forum [] forums = new Forum[forumList.size()]; for (int i=0; i
問題就在這個sb的if()判斷!!
這裡牽涉到ForumFactory.createQuery()裡面的一段程式碼
從這段程式碼可以看到,獲得了可訪問的forums,傳遞給DBQuery。
這樣似乎可以限制使用者在其可訪問的forums中搜尋。
所以有了DBQuery::executeQuery()中的哪個if(判斷),意思是:如果傳入的forums和(DBForumFactory)factory.getForumCount()相同,則認為查詢所有Forums,不做判斷。否則,是在某幾個forum中查詢。
上面的邏輯很對,,但是加了Category以後就出問題了。
首先,為了相容factory.getForums(),factory.getForumCount()都是了RootForumCategory的方法,也就是說,只返回了root forum.
你發現問題了麼?
沒錯,按照上面的判斷,我選擇了forum(2),此時有1個rootForum,顯然if(factory.getForumCount() != forums.length)這樣的判斷是不成立的。所以“在forum(2)中查詢這個條件”這個條件就被忽略了。於是,返回了不應該出現的查詢結果。
究其根本的原因有2個,(1)jive2.5後來加入的Category以後同時為了保證相容,而帶來的問題;(2)搜尋的控制問題。
順便帶一句,jive官方網站的論壇沒有rootForum.所以,上面的判斷永遠成立。於是這個問題就被“隱藏起來”了。
解決辦法
自己想!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958265/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jive筆記7 -- Jive的硬傷 (轉)筆記
- Jive筆記3----Jive2.1.1 License保護原理分析 (轉)筆記
- Jive筆記2----關於Jive2中的中文搜尋 (轉)筆記
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- Jive筆記6 --Database Package下面的暗黑世界 (轉)筆記DatabasePackage
- 解Bug之路-記一次JVM堆外記憶體洩露Bug的查詢JVM記憶體洩露
- 安裝配置bugzilla筆記(轉)筆記
- Jive筆記1--關於Jive1中的驗證和相關類的呼叫 (轉)筆記
- Spring Data Jpa 的簡單查詢多表查詢HQL,SQL ,動態查詢, QueryDsl ,自定義查詢筆記SpringSQL筆記
- 子查詢學習筆記1筆記
- 一個oracle查詢引起的bugOracle
- Jive筆記4--結果集分頁處理 (轉)筆記
- (MySQL學習筆記)分頁查詢MySql筆記
- es 筆記二之基礎查詢筆記
- EntityFramework Core筆記:查詢資料(3)Framework筆記
- 【筆記】靜態查詢演算法筆記演算法
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- 9i 子查詢bug?
- es筆記五之term-level的查詢操作筆記
- oracle學習筆記(十一) 高階查詢Oracle筆記
- 筆記 mongo查詢慢日誌,建立索引筆記Go索引
- 查詢dba_jobs_running慢的bug
- 記一次詭異的Oracle查詢轉換Oracle
- ThinkPHP5.0 使用 model 關聯查詢筆記PHP筆記
- leetCode資料查詢筆記(簡單)LeetCode筆記
- mysql,where條件查詢等學習筆記MySql筆記
- 資料庫學習筆記之查詢表資料庫筆記
- 《卸甲筆記》-分組統計查詢對比筆記
- Oracle學習筆記整理之日期查詢篇Oracle筆記
- SQL筆記之 子查詢080812SQL筆記
- 我的前端筆記 之 bug篇前端筆記
- 查詢轉換
- MySQL必知必會筆記——查詢的基礎知識MySql筆記
- Hive學習筆記 5 Hive的資料查詢、函式Hive筆記函式
- 在oracle查詢記錄時給記錄加鎖(轉)Oracle
- [Mysql 查詢語句]——查詢指定記錄MySql
- ES[7.6.x]學習筆記(十)聚合查詢筆記