diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c
new file mode 100644
index f9ab4ce..0fd28cd
*** a/src/backend/utils/adt/jsonb_gin.c
--- b/src/backend/utils/adt/jsonb_gin.c
*************** gin_extract_jsonb_hash(PG_FUNCTION_ARGS)
*** 315,326 ****
  		switch (r)
  		{
  			case WJB_BEGIN_ARRAY:
- 				tmp = stack;
- 				stack = (PathHashStack *) palloc(sizeof(PathHashStack));
- 				stack->next = tmp;
- 				stack->hash_state = tmp->hash_state;
- 				COMP_CRC32(stack->hash_state, PATH_SEPARATOR, 1);
- 				break;
  			case WJB_BEGIN_OBJECT:
  				/* Preserve stack item for key */
  				tmp = stack;
--- 315,320 ----
*************** gin_extract_jsonb_hash(PG_FUNCTION_ARGS)
*** 335,340 ****
--- 329,336 ----
  				break;
  			case WJB_VALUE:
  			case WJB_ELEM:
+ 				stack->hash_state = stack->next->hash_state;
+ 				COMP_CRC32(stack->hash_state, PATH_SEPARATOR, 1);
  				hash_stack_value(&v, stack);
  				path_crc32 = stack->hash_state;
  				FIN_CRC32(path_crc32);
