eclipse-ee4j / eclipse-ee4j/eclipselink

EclipseLink is missing doPrivileged for setAccessible when parsing JPQL query with EXTRACT

Open
#1,981 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
246
Forks
202
Avg merge
1d 22h
Merged PRs (30d)
14

Description

JPQL that includes EXTRACT, such as,
... WHERE EXTRACT (HOUR FROM o.start) BETWEEN ?1 AND ?2 AND EXTRACT (MINUTE FROM o.start)=?3
fails when Java 2 security is enabled because EclipseLink attempts method.setAccessible without a doPrivileged,

java.security.AccessControlException: Access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")java.base/java.security.AccessController.throwACE(AccessController.java:177)
java.base/java.security.AccessController.checkPermissionHelper(AccessController.java:239)
java.base/java.security.AccessController.checkPermission(AccessController.java:386)
java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416)
com.ibm.ws.kernel.launch.internal.MissingDoPrivDetectionSecurityManager.checkPermission(MissingDoPrivDetectionSecurityManager.java:47)
java.base/java.lang.reflect.AccessibleObject.checkPermission(AccessibleObject.java:91)
java.base/java.lang.reflect.Method.setAccessible(Method.java:192)
org.eclipse.persistence.jpa.jpql.parser.AbstractExpression.acceptUnknownVisitor(AbstractExpression.java:247)
org.eclipse.persistence.jpa.jpql.parser.AbstractExpression.acceptUnknownVisitor(AbstractExpression.java:192)
org.eclipse.persistence.jpa.jpql.parser.ExtractExpression.accept(ExtractExpression.java:72)
org.eclipse.persistence.jpa.jpql.parser.BetweenExpression.acceptChildren(BetweenExpression.java:104)
org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743)
org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:81)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:2640)
org.eclipse.persistence.jpa.jpql.parser.BetweenExpression.accept(BetweenExpression.java:99)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateCompoundExpression(AbstractGrammarValidator.java:2250)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateLogicalExpression(AbstractGrammarValidator.java:2472)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:2554)
org.eclipse.persistence.jpa.jpql.parser.AndExpression.accept(AndExpression.java:59)
org.eclipse.persistence.jpa.jpql.parser.AbstractSingleEncapsulatedExpression.acceptChildren(AbstractSingleEncapsulatedExpression.java:53)
org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743)
org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:439)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:4054)
org.eclipse.persistence.jpa.jpql.parser.SubExpression.accept(SubExpression.java:49)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.validateAbstractConditionalClause(AbstractGrammarValidator.java:1676)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:4333)
org.eclipse.persistence.jpa.jpql.parser.WhereClause.accept(WhereClause.java:56)
org.eclipse.persistence.jpa.jpql.parser.AbstractSelectStatement.acceptChildren(AbstractSelectStatement.java:94)
org.eclipse.persistence.jpa.jpql.parser.SelectStatement.acceptChildren(SelectStatement.java:105)
org.eclipse.persistence.jpa.jpql.AbstractValidator.visit(AbstractValidator.java:743)
org.eclipse.persistence.jpa.jpql.parser.AnonymousExpressionVisitor.visit(AnonymousExpressionVisitor.java:399)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:3993)
org.eclipse.persistence.jpa.jpql.parser.SelectStatement.accept(SelectStatement.java:100)
org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator.visit(AbstractGrammarValidator.java:3604)
org.eclipse.persistence.jpa.jpql.parser.JPQLExpression.accept(JPQLExpression.java:135)
org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:321)
org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:271)
org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:164)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:141)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:117)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.(EJBQueryImpl.java:104)
org.eclipse.persistence.internal.jpa.EJBQueryImpl.(EJBQueryImpl.java:88)
org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1726)
org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1749)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.