Implemented what could be a fix for bug #1356: Pazpar2 crashes for some
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 13 Aug 2007 13:27:04 +0000 (13:27 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 13 Aug 2007 13:27:04 +0000 (13:27 +0000)
invalid URL. The problem is not URL related but rather that a show following
a faulty search (here filter fail) will read a _lot_ of uninitalized memory.

src/logic.c
test/test_http_12.res [new file with mode: 0644]
test/test_http_13.res [new file with mode: 0644]
test/test_http_14.res [new file with mode: 0644]
test/test_http_urls

index 2144acc..45a5d0e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: logic.c,v 1.59 2007-08-13 12:12:30 adam Exp $
+/* $Id: logic.c,v 1.60 2007-08-13 13:27:04 adam Exp $
    Copyright (c) 2006-2007, Index Data.
 
 This file is part of Pazpar2.
@@ -647,23 +647,22 @@ enum pazpar2_error_code search(struct session *se,
 
     *addinfo = 0;
     nmem_reset(se->nmem);
+    se->relevance = 0;
+    se->total_records = se->total_hits = se->total_merged = 0;
+    se->reclist = 0;
+    se->num_termlists = 0;
     criteria = parse_filter(se->nmem, filter);
     se->requestid++;
     live_channels = select_targets(se, criteria);
     if (live_channels)
     {
         int maxrecs = live_channels * global_parameters.toget;
-        se->num_termlists = 0;
         se->reclist = reclist_create(se->nmem, maxrecs);
-        // This will be initialized in send_search()
-        se->total_records = se->total_hits = se->total_merged = 0;
         se->expected_maxrecs = maxrecs;
     }
     else
         return PAZPAR2_NO_TARGETS;
 
-    se->relevance = 0;
-
     for (cl = se->clients; cl; cl = client_next_in_session(cl))
     {
         if (prepare_session_database(se, client_get_database(cl)) < 0)
diff --git a/test/test_http_12.res b/test/test_http_12.res
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/test_http_13.res b/test/test_http_13.res
new file mode 100644 (file)
index 0000000..d687e45
--- /dev/null
@@ -0,0 +1,8 @@
+<show>
+<status>OK</status>
+<activeclients>0</activeclients>
+<merged>0</merged>
+<total>0</total>
+<start>0</start>
+<num>0</num>
+</show>
diff --git a/test/test_http_14.res b/test/test_http_14.res
new file mode 100644 (file)
index 0000000..d687e45
--- /dev/null
@@ -0,0 +1,8 @@
+<show>
+<status>OK</status>
+<activeclients>0</activeclients>
+<merged>0</merged>
+<total>0</total>
+<start>0</start>
+<num>0</num>
+</show>
index 83c6e71..f8f99cb 100644 (file)
@@ -10,3 +10,6 @@ http://localhost:9763/search.pz2?session=1&command=show&start=0&number=1&sort=ti
 http://localhost:9763/search.pz2?session=1&command=show&start=0&number=1&sort=title:1
 http://localhost:9763/search.pz2?session=1&command=show&start=0&number=1&sort=date:0
 http://localhost:9763/search.pz2?session=1&command=show&start=0&number=1&sort=date:1
+http://localhost:9763/search.pz2?command=search&query=function%20()%20%7B%250A%20%20%20%20var%20ccl%20=%20%22%22;%250A%20%20%20%20if%20(this.simpleQuery%20!=%20%22%22)%20%7B%250A%20%20%20%20%20%20%20%20ccl%20=%20this.simpleQuery;%250A%20%20%20%20%7D%250A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20this.advTerms.length;%20i++)%20%7B%250A%20%20%20%20%20%20%20%20if%20(ccl%20!=%20%22%22)%20%7B%250A%20%20%20%20%20%20%20%20%20%20%20%20ccl%20=%20ccl%20+%20%22%20and%20%22;%250A%20%20%20%20%20%20%20%20%7D%250A%20%20%20%20%20%20%20%20ccl%20=%20ccl%20+%20this.advTerms%5Bi%5D.field%20+%20%22=%5C%22%22%20+%20this.advTerms%5Bi%5D.value%20+%20%22%5C%22%22;%250A%20%20%20%20%7D%250A%20%20%20%20return%20ccl;%250A%7D&session=1&filter=function%20()%20%7B%250A%20%20%20%20if%20(this.singleFilter%20!=%20null)%20%7B%250A%20%20%20%20%20%20%20%20return%20%22pz:id=%22%20+%20this.singleFilter.id;%250A%20%20%20%20%7D%20else%20if%20(this.filterNums%20%3C=%200)%20%7B%250A%20%20%20%20%20%20%20%20return%20undefined;%250A%20%20%20%20%7D%250A%20%20%20%20var%20filter%20=%20%22pz:id=%22;%250A%20%20%20%20for%20(var%20i%20=%200;%20i%20%3C%20this.filterHash.length;%20i++)%20%7B%250A%20%20%20%20%20%20%20%20if%20(this.filterHash%5Bi%5D%20==%20undefined)%20%7B%250A%20%20%20%20%20%20%20%20%20%20%20%20continue;%250A%20%20%20%20%20%20%20%20%7D%250A%20%20%20%20%20%20%20%20if%20(filter%20%3E%20%22pz:id=%22)%20%7B%250A%20%20%20%20%20%20%20%20%20%20%20%20filter%20=%20filter%20+%20%22%7C%22;%250A%20%20%20%20%20%20%20%20%7D%250A%20%20%20%20%20%20%20%20filter%20+=%20this.filterHash%5Bi%5D.id;%250A%20%20%20%20%7D%250A%20%20%20%20return%20filter;%250A%7D
+http://localhost:9763/search.pz2?session=1&command=show&start=0&number=1&sort=date:1
+http://localhost:9763/search.pz2?session=1&command=show&start=0&number=1&block=1