Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 00D0A19754 for ; Mon, 28 Mar 2016 18:41:26 +0000 (UTC) Received: (qmail 77395 invoked by uid 500); 28 Mar 2016 18:41:25 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 77368 invoked by uid 500); 28 Mar 2016 18:41:25 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 77094 invoked by uid 99); 28 Mar 2016 18:41:25 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 28 Mar 2016 18:41:25 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id 9422A2C1F60 for ; Mon, 28 Mar 2016 18:41:25 +0000 (UTC) Date: Mon, 28 Mar 2016 18:41:25 +0000 (UTC) From: "Robert Stupp (JIRA)" To: commits@cassandra.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Comment Edited] (CASSANDRA-11391) "class declared as inner class" error when using UDF MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/CASSANDRA-11391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15205266#comment-15205266 ] Robert Stupp edited comment on CASSANDRA-11391 at 3/28/16 6:41 PM: ------------------------------------------------------------------- --It's caused by a superfluous sandbox check. asm reports uses of inner classes (like {{java.util.Map$Entry}} - and the check triggers a byte-code validation error in that case. We don't need that check since we check for use and instantiation of "malicious" classes anyway.-- --The fix is quite simple: remove that superfluous check + add a regression utest.-- --Cassci's currently working on CI results.-- *EDIT* We still need the test against inner classes. Extended the fix to explicitly test against inner classes as shown in the new test target classes used in {{UFVerifierTest}}. was (Author: snazy): It's caused by a superfluous sandbox check. asm reports uses of inner classes (like {{java.util.Map$Entry}} - and the check triggers a byte-code validation error in that case. We don't need that check since we check for use and instantiation of "malicious" classes anyway. The fix is quite simple: remove that superfluous check + add a regression utest. Cassci's currently working on CI results. > "class declared as inner class" error when using UDF > ---------------------------------------------------- > > Key: CASSANDRA-11391 > URL: https://issues.apache.org/jira/browse/CASSANDRA-11391 > Project: Cassandra > Issue Type: Bug > Components: CQL > Environment: C* 3.4 > Reporter: DOAN DuyHai > Assignee: Robert Stupp > Priority: Critical > Fix For: 3.x > > > {noformat} > cqlsh:music> CREATE FUNCTION testMapEntry(my_map map) > ... CALLED ON NULL INPUT > ... RETURNS text > ... LANGUAGE java > ... AS $$ > ... String buffer = ""; > ... for(java.util.Map.Entry entry: my_map.entrySet()) { > ... buffer = buffer + entry.getKey() + ": " + entry.getValue() + ", "; > ... } > ... return buffer; > ... $$; > InvalidRequest: code=2200 [Invalid query] > message="Could not compile function 'music.testmapentry' from Java source: > org.apache.cassandra.exceptions.InvalidRequestException: > Java UDF validation failed: [class declared as inner class]" > {noformat} > When I try to decompile the source code into byte code, below is the result: > {noformat} > public java.lang.String test(java.util.Map); > Code: > 0: ldc #2 // String > 2: astore_2 > 3: aload_1 > 4: invokeinterface #3, 1 // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set; > 9: astore_3 > 10: aload_3 > 11: invokeinterface #4, 1 // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator; > 16: astore 4 > 18: aload 4 > 20: invokeinterface #5, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z > 25: ifeq 94 > 28: aload 4 > 30: invokeinterface #6, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object; > 35: checkcast #7 // class java/util/Map$Entry > 38: astore 5 > 40: new #8 // class java/lang/StringBuilder > 43: dup > 44: invokespecial #9 // Method java/lang/StringBuilder."":()V > 47: aload_2 > 48: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 51: aload 5 > 53: invokeinterface #11, 1 // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object; > 58: checkcast #12 // class java/lang/String > 61: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 64: ldc #13 // String : > 66: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 69: aload 5 > 71: invokeinterface #14, 1 // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object; > 76: checkcast #12 // class java/lang/String > 79: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 82: ldc #15 // String , > 84: invokevirtual #10 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 87: invokevirtual #16 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; > 90: astore_2 > 91: goto 18 > 94: aload_2 > 95: areturn > {noformat} > There is nothing that could trigger inner class creation ... -- This message was sent by Atlassian JIRA (v6.3.4#6332)