alter table set serdeproperties bypasses regexps checks (leaves table in a 
non-recoverable state?)
--------------------------------------------------------------------------------------------------

                 Key: HIVE-1850
                 URL: https://issues.apache.org/jira/browse/HIVE-1850
             Project: Hive
          Issue Type: Bug
          Components: Serializers/Deserializers
    Affects Versions: 0.7.0
         Environment: Trunk build from a few days ago, but seen once before 
with older version as well.
            Reporter: Terje Marthinussen


create table aa ( test STRING )
  ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
  WITH SERDEPROPERTIES ("input.regex" = "[^\\](.*)", "output.format.string" = 
"$1s");
This will fail. Great!

create table aa ( test STRING )
  ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
  WITH SERDEPROPERTIES ("input.regex" = "(.*)", "output.format.string" = "$1s");
Works, no problem there.

alter table aa set serdeproperties ("input.regex" = "[^\\](.*)", 
"output.format.string" = "$1s");
Wups... I can set that without any problems!


alter table aa set serdeproperties ("input.regex" = "(.*)", 
"output.format.string" = "$1s");
FAILED: Hive Internal Error: java.util.regex.PatternSyntaxException(Unclosed 
character class near index 7
[^\](.*)
       ^)
java.util.regex.PatternSyntaxException: Unclosed character class near index 7
[^\](.*)
       ^
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.clazz(Pattern.java:2254)
        at java.util.regex.Pattern.sequence(Pattern.java:1818)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)
        at java.util.regex.Pattern.<init>(Pattern.java:1133)
        at java.util.regex.Pattern.compile(Pattern.java:847)
        at 
org.apache.hadoop.hive.contrib.serde2.RegexSerDe.initialize(RegexSerDe.java:101)
        at 
org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:199)
        at 
org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:253)
        at org.apache.hadoop.hive.ql.metadata.Table.getCols(Table.java:484)
        at 
org.apache.hadoop.hive.ql.metadata.Table.checkValidity(Table.java:161)
        at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:803)
        at 
org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.analyzeAlterTableSerdeProps(DDLSemanticAnalyzer.java:558)
        at 
org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.analyzeInternal(DDLSemanticAnalyzer.java:232)
        at 
org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:238)
        at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:335)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:686)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:142)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:216)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:370)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

After this, all further commands on the table fails, including drop table :)

1. The alter table command should probably check the regexp just like the 
create table command does
2. Even though the regexp is bad, it should be possible to do things like set 
the regexp again or drop the table.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to