Index: modules/node/node.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.api.php,v
retrieving revision 1.70
diff -u -p -r1.70 node.api.php
--- modules/node/node.api.php	17 Jun 2010 13:44:45 -0000	1.70
+++ modules/node/node.api.php	23 Jul 2010 11:44:12 -0000
@@ -653,10 +653,12 @@ function hook_node_update_index($node) {
  *   The node being validated.
  * @param $form
  *   The form being used to edit the node.
+ * @param $form_state
+ *   The form state array.
  *
  * @ingroup node_api_hooks
  */
-function hook_node_validate($node, $form) {
+function hook_node_validate($node, $form, &$form_state) {
   if (isset($node->end) && isset($node->start)) {
     if ($node->start > $node->end) {
       form_set_error('time', t('An event may not end before it starts.'));
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1280
diff -u -p -r1.1280 node.module
--- modules/node/node.module	16 Jul 2010 02:37:06 -0000	1.1280
+++ modules/node/node.module	23 Jul 2010 11:50:44 -0000
@@ -832,14 +832,15 @@ function node_hook($node, $hook) {
  *   A string containing the name of the hook.
  * @param $a2, $a3, $a4
  *   Arguments to pass on to the hook, after the $node argument.
+ *
  * @return
  *   The returned value of the invoked hook.
  */
-function node_invoke($node, $hook, $a2 = NULL, $a3 = NULL, $a4 = NULL) {
+function node_invoke($node, $hook, &$a2 = NULL, &$a3 = NULL, &$a4 = NULL) {
   if (node_hook($node, $hook)) {
     $base = node_type_get_base($node);
     $function = $base . '_' . $hook;
-    return ($function($node, $a2, $a3, $a4));
+    return $function($node, $a2, $a3, $a4);
   }
 }
 
@@ -922,7 +923,7 @@ function node_object_prepare($node) {
 /**
  * Perform validation checks on the given node.
  */
-function node_validate($node, $form = array()) {
+function node_validate($node, &$form, &$form_state) {
   $type = node_type_get_type($node);
 
   if (isset($node->nid) && (node_last_changed($node->nid) > $node->changed)) {
@@ -943,8 +944,8 @@ function node_validate($node, $form = ar
   }
 
   // Do node-type-specific validation checks.
-  node_invoke($node, 'validate', $form);
-  module_invoke_all('node_validate', $node, $form);
+  node_invoke($node, 'validate', $form, $form_state);
+  module_invoke_all('node_validate', $node, $form, $form_state);
 }
 
 /**
Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.127
diff -u -p -r1.127 node.pages.inc
--- modules/node/node.pages.inc	17 Jun 2010 13:44:45 -0000	1.127
+++ modules/node/node.pages.inc	23 Jul 2010 11:43:15 -0000
@@ -80,7 +80,7 @@ function node_form_validate($form, &$for
   // not update it with form values that have not yet been validated, so we
   // create a pseudo-entity to use during validation.
   $node = (object) $form_state['values'];
-  node_validate($node, $form);
+  node_validate($node, $form, $form_state);
 
   // Field validation. Requires access to $form_state, so this cannot be
   // done in node_validate() as it currently exists.
