Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 908128f

Browse files
author
Nikita Glukhov
committed
Fix invalid path prefix case and explain invalid values case in jsonStatsInit()
1 parent 253ec7c commit 908128f

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/backend/utils/adt/jsonb_selfuncs.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,11 @@ jsonStatsInit(JsonStats data, const VariableStatData *vardata)
100100
ATTSTATSSLOT_NUMBERS | ATTSTATSSLOT_VALUES))
101101
return false;
102102

103-
/* XXX Not sure what this means / how could it happen? */
103+
/*
104+
* Valid JSON stats should have at least 2 elements in values:
105+
* 0th - root path prefix
106+
* 1st - root path stats
107+
*/
104108
if (data->attslot.nvalues < 2)
105109
{
106110
free_attstatsslot(&data->attslot);
@@ -115,9 +119,14 @@ jsonStatsInit(JsonStats data, const VariableStatData *vardata)
115119
data->values = data->attslot.values;
116120
data->nvalues = data->attslot.nvalues;
117121

122+
/* Extract root path prefix */
118123
jb = DatumGetJsonbP(data->values[0]);
119-
JsonbExtractScalar(&jb->root, &prefix);
120-
Assert(prefix.type == jbvString);
124+
if (!JsonbExtractScalar(&jb->root, &prefix) || prefix.type != jbvString)
125+
{
126+
free_attstatsslot(&data->attslot);
127+
return false;
128+
}
129+
121130
data->prefix = prefix.val.string.val;
122131
data->prefixlen = prefix.val.string.len;
123132

0 commit comments

Comments
 (0)