|
14 | 14 | package com.querydsl.core.types.dsl; |
15 | 15 |
|
16 | 16 | import static org.assertj.core.api.Assertions.assertThat; |
| 17 | +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; |
| 18 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
17 | 19 |
|
18 | 20 | import com.querydsl.core.BooleanBuilder; |
| 21 | +import com.querydsl.core.domain.Cat; |
| 22 | +import com.querydsl.core.types.Order; |
| 23 | +import com.querydsl.core.types.OrderSpecifier; |
19 | 24 | import com.querydsl.core.util.BeanMap; |
20 | 25 | import java.sql.Time; |
21 | 26 | import java.util.Date; |
@@ -128,4 +133,25 @@ public void calling_get_with_the_same_name_and_different_types_returns_correct_t |
128 | 133 | assertThat(entity.get(pathName, Comparable.class).getType()).isEqualTo(String.class); |
129 | 134 | assertThat(entity.get(pathName, Object.class).getType()).isEqualTo(String.class); |
130 | 135 | } |
| 136 | + |
| 137 | + @Test |
| 138 | + public void order_HQL_injection() { |
| 139 | + var orderBy = "breed"; |
| 140 | + var pathBuilder = new PathBuilder<Cat>(Cat.class, "entity"); |
| 141 | + assertDoesNotThrow(() -> new OrderSpecifier(Order.ASC, pathBuilder.get(orderBy))); |
| 142 | + } |
| 143 | + |
| 144 | + @Test |
| 145 | + // CVE-2024-49203 |
| 146 | + // https://github.com/OpenFeign/querydsl/security/advisories/GHSA-6q3q-6v5j-h6vg |
| 147 | + public void unsafe_order_HQL_injection() { |
| 148 | + var orderBy = |
| 149 | + "test.name INTERSECT SELECT t FROM Test t WHERE (SELECT cast(pg_sleep(10) AS text))='2' ORDER BY t.id"; |
| 150 | + var pathBuilder = new PathBuilder<Cat>(Cat.class, "entity"); |
| 151 | + var error = |
| 152 | + assertThrows( |
| 153 | + IllegalStateException.class, |
| 154 | + () -> new OrderSpecifier(Order.ASC, pathBuilder.get(orderBy))); |
| 155 | + assertThat(error).hasMessageContaining("CVE-2024-49203"); |
| 156 | + } |
131 | 157 | } |
0 commit comments