From 25d9d6c6f067269815b5e3c8fcf21930dbdc481b Mon Sep 17 00:00:00 2001 From: Vincent Gao Date: Tue, 4 Aug 2026 15:21:49 +1000 Subject: [PATCH] Prevented scalar JSON:API includes from causing server errors. --- modules/tide_api/src/IncludeResolver.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/tide_api/src/IncludeResolver.php b/modules/tide_api/src/IncludeResolver.php index 1df4c6730..9498952a6 100644 --- a/modules/tide_api/src/IncludeResolver.php +++ b/modules/tide_api/src/IncludeResolver.php @@ -68,13 +68,21 @@ protected function resolveIncludeTree(array $include_tree, Data $data, Data $inc $includes = IncludedData::merge($includes, new IncludedData([$exception])); continue; } - $target_type = $field_list->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type'); - assert(!empty($target_type)); foreach ($field_list as $field_item) { - assert($field_item instanceof EntityReferenceItem); + // JSON:API includes are relationships. Ignore scalar attributes that + // were supplied as include paths instead of treating them as entity + // references with an empty target type. + if (!$field_item instanceof EntityReferenceItem) { + continue; + } + // Include the target_revision_id in the references of paragraphs. $target_type = $field_item->getDataDefinition()->getSetting('target_type'); - if ($field_item instanceof EntityReferenceRevisionsItem && $target_type == 'paragraph') { + if (!is_string($target_type) || $target_type === '' || !$this->entityTypeManager->hasDefinition($target_type)) { + continue; + } + + if ($field_item instanceof EntityReferenceRevisionsItem && $target_type === 'paragraph') { $references[$target_type][$field_item->get($field_item::mainPropertyName())->getValue()] = $field_item->get('target_revision_id')->getValue(); } else {