Reject operator names >= NAMEDATALEN characters. These will not work
authorTom Lane <[email protected]>
Tue, 16 Aug 2005 00:48:29 +0000 (00:48 +0000)
committerTom Lane <[email protected]>
Tue, 16 Aug 2005 00:48:29 +0000 (00:48 +0000)
anyway, and in assert-enabled builds you are likely to get an assertion
failure.  Backpatch as far as 7.3; 7.2 seems not to have the problem.

src/backend/parser/scan.l

index 7e944467bd05cd925d99657ad4a6d54cffca9e4e..433e42bf6a084253bd72a615373cff99ce4cd5eb 100644 (file)
@@ -10,7 +10,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.119 2004/12/31 22:00:27 pgsql Exp $
+ *   $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.119.4.1 2005/08/16 00:48:29 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -534,6 +534,15 @@ other          .
                            return yytext[0];
                    }
 
+                   /*
+                    * Complain if operator is too long.  Unlike the case
+                    * for identifiers, we make this an error not a notice-
+                    * and-truncate, because the odds are we are looking at
+                    * a syntactic mistake anyway.
+                    */
+                   if (nchars >= NAMEDATALEN)
+                       yyerror("operator too long");
+
                    /* Convert "!=" operator to "<>" for compatibility */
                    if (strcmp(yytext, "!=") == 0)
                        yylval.str = pstrdup("<>");