Skip to content

Commit 7148de1

Browse files
committed
Prevent to divide by zero and range out of 0..1
1 parent a91fa39 commit 7148de1

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

contrib/tsearch2/rank.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ calc_rank(float *w, tsvector * t, QUERYTYPE * q, int4 method)
288288
{
289289
ITEM *item = GETQUERY(q);
290290
float res = 0.0;
291+
int len;
291292

292293
if (!t->size || !q->size)
293294
return 0.0;
@@ -303,10 +304,11 @@ calc_rank(float *w, tsvector * t, QUERYTYPE * q, int4 method)
303304
case 0:
304305
break;
305306
case 1:
306-
res /= log((float) cnt_length(t));
307+
res /= log( (float)(cnt_length(t)+1) ) / log(2.0);
307308
break;
308309
case 2:
309-
res /= (float) cnt_length(t);
310+
len = cnt_length(t);
311+
if ( len > 0 ) res /= (float)len;
310312
break;
311313
default:
312314
/* internal error */
@@ -609,10 +611,11 @@ rank_cd(PG_FUNCTION_ARGS)
609611
case 0:
610612
break;
611613
case 1:
612-
res /= log((float) cnt_length(txt));
614+
res /= log( (float)(cnt_length(txt)+1) );
613615
break;
614616
case 2:
615-
res /= (float) cnt_length(txt);
617+
len = cnt_length(txt);
618+
if ( len > 0 ) res /= (float)len;
616619
break;
617620
default:
618621
/* internal error */

0 commit comments

Comments
 (0)