=== modified file 'sql/sql_signal.cc'
--- a/sql/sql_signal.cc	2008-07-18 01:21:18 +0000
+++ b/sql/sql_signal.cc	2008-07-21 17:34:06 +0000
@@ -287,29 +287,15 @@
 int Abstract_signal::eval_sqlcode_sqlstate(THD *thd, SQL_condition *cond)
 {
   DBUG_ASSERT(m_cond);
-
-  switch(m_cond->type)
-  {
-    case sp_cond_type::number:
-      if (m_cond->mysqlerr > MAX_MYSQL_ERRNO)
-      {
-        char buff[20];
-        sprintf(buff, "%d", m_cond->mysqlerr);
-        /* The parser accepts bigger condition numbers */
-        my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "MYSQL_ERRNO", buff);
-        return (1);
-      }
-      cond->m_sqlcode= m_cond->mysqlerr;
-      cond->set_sqlstate(mysql_errno_to_sqlstate(cond->m_sqlcode));
-      break;
-    case sp_cond_type::state:
-      cond->m_sqlcode= 0;
-      cond->set_sqlstate(m_cond->sqlstate);
-      break;
-    default:
-      DBUG_ASSERT(FALSE);
-      break;
-  }
+  DBUG_ASSERT(cond);
+
+  /*
+    SIGNAL is restricted in sql_yacc.yy to only signal SQLSTATE conditions
+  */
+  DBUG_ASSERT(m_cond->type == sp_cond_type::state);
+
+  cond->m_sqlcode= 0;
+  cond->set_sqlstate(m_cond->sqlstate);
 
   return 0;
 }

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2008-07-18 01:21:18 +0000
+++ b/sql/sql_yacc.yy	2008-07-21 17:34:06 +0000
@@ -2696,8 +2696,8 @@
             }
             $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
             $$->type= sp_cond_type_t::state;
-            memcpy($$->sqlstate, $3.str, 5);
-            $$->sqlstate[5]= '\0';
+            memcpy($$->sqlstate, $3.str, SQLSTATE_LENGTH);
+            $$->sqlstate[SQLSTATE_LENGTH]= '\0';
           }
         ;
 



