From 421629d1cee8e5c22724561aabb13e0760c85f6c Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 13 Aug 2007 13:27:04 +0000 Subject: [PATCH] Implemented what could be a fix for bug #1356: Pazpar2 crashes for some 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 | 11 +++++------ test/test_http_13.res | 8 ++++++++ test/test_http_14.res | 8 ++++++++ test/test_http_urls | 3 +++ 4 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 test/test_http_12.res create mode 100644 test/test_http_13.res create mode 100644 test/test_http_14.res diff --git a/src/logic.c b/src/logic.c index 2144acc..45a5d0e 100644 --- a/src/logic.c +++ b/src/logic.c @@ -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 index 0000000..e69de29 diff --git a/test/test_http_13.res b/test/test_http_13.res new file mode 100644 index 0000000..d687e45 --- /dev/null +++ b/test/test_http_13.res @@ -0,0 +1,8 @@ + +OK +0 +0 +0 +0 +0 + diff --git a/test/test_http_14.res b/test/test_http_14.res new file mode 100644 index 0000000..d687e45 --- /dev/null +++ b/test/test_http_14.res @@ -0,0 +1,8 @@ + +OK +0 +0 +0 +0 +0 + diff --git a/test/test_http_urls b/test/test_http_urls index 83c6e71..f8f99cb 100644 --- a/test/test_http_urls +++ b/test/test_http_urls @@ -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 -- 1.7.10.4