summaryrefslogtreecommitdiff
path: root/contrib/tsearch2
diff options
context:
space:
mode:
authorTeodor Sigaev2005-06-01 11:45:03 +0000
committerTeodor Sigaev2005-06-01 11:45:03 +0000
commit7148de1fa89c1a7ef4613ddfca730711335132ef (patch)
tree597c34cca5960775656014b29048de5aca1c2787 /contrib/tsearch2
parenta91fa3902863489bf8f73881543baa0eb59f2683 (diff)
Prevent to divide by zero and range out of 0..1
Diffstat (limited to 'contrib/tsearch2')
-rw-r--r--contrib/tsearch2/rank.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/contrib/tsearch2/rank.c b/contrib/tsearch2/rank.c
index a58986e474..046b062b97 100644
--- a/contrib/tsearch2/rank.c
+++ b/contrib/tsearch2/rank.c
@@ -288,6 +288,7 @@ calc_rank(float *w, tsvector * t, QUERYTYPE * q, int4 method)
{
ITEM *item = GETQUERY(q);
float res = 0.0;
+ int len;
if (!t->size || !q->size)
return 0.0;
@@ -303,10 +304,11 @@ calc_rank(float *w, tsvector * t, QUERYTYPE * q, int4 method)
case 0:
break;
case 1:
- res /= log((float) cnt_length(t));
+ res /= log( (float)(cnt_length(t)+1) ) / log(2.0);
break;
case 2:
- res /= (float) cnt_length(t);
+ len = cnt_length(t);
+ if ( len > 0 ) res /= (float)len;
break;
default:
/* internal error */
@@ -609,10 +611,11 @@ rank_cd(PG_FUNCTION_ARGS)
case 0:
break;
case 1:
- res /= log((float) cnt_length(txt));
+ res /= log( (float)(cnt_length(txt)+1) );
break;
case 2:
- res /= (float) cnt_length(txt);
+ len = cnt_length(txt);
+ if ( len > 0 ) res /= (float)len;
break;
default:
/* internal error */