From 3da4e0e0157b62d4aacd8857bd1f09c079718a05 Mon Sep 17 00:00:00 2001 From: Angie Byron <webchick@24967.no-reply.drupal.org> Date: Fri, 11 Sep 2009 03:42:34 +0000 Subject: [PATCH] #382464 by fgm and bjaspan: Disallow reserved field names. --- modules/field/field.crud.inc | 9 +++++++++ modules/field/field.test | 14 ++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/modules/field/field.crud.inc b/modules/field/field.crud.inc index 8e0ff149750a..d837f8aaa241 100644 --- a/modules/field/field.crud.inc +++ b/modules/field/field.crud.inc @@ -239,6 +239,15 @@ function field_create_field($field) { throw new FieldException($message); } + // Disallow reserved field names. This can't prevent all field name + // collisions with existing object properties, but some is better + // than none. + foreach (field_info_fieldable_types() as $type => $info) { + if (in_array($field['field_name'], $info['object keys'])) { + throw new FieldException(t('Attempt to create field name %name which is reserved by entity type %type.', array('%name' => $field['field_name'], '%type' => $type))); + } + } + $field += array( 'cardinality' => 1, 'translatable' => FALSE, diff --git a/modules/field/field.test b/modules/field/field.test index 04ceb0ab2f14..f99821f889df 100644 --- a/modules/field/field.test +++ b/modules/field/field.test @@ -1543,6 +1543,20 @@ class FieldCrudTestCase extends FieldTestCase { catch (FieldException $e) { $this->pass(t('Cannot create a field with a name longer than 32 characters.')); } + + // Check that field name can not be an object key. + // "ftvid" is known as an object key from the "test_entity" type. + try { + $field_definition = array( + 'type' => 'test_field', + 'field_name' => 'ftvid', + ); + $field = field_create_field($field_definition); + $this->fail(t('Cannot create a field bearing the name of an object key.')); + } + catch (FieldException $e) { + $this->pass(t('Cannot create a field bearing the name of an object key.')); + } } /** -- GitLab