Skip to content

Commit f6e14df

Browse files
Merge branch 'release26.3-SNAPSHOT' into 26.3_fb_register_later
2 parents 07a278b + a5c7322 commit f6e14df

13 files changed

Lines changed: 121 additions & 37 deletions

File tree

api/src/org/labkey/api/exp/property/AbstractDomainKind.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ protected boolean getBlanksSql(Domain domain, DomainProperty prop, SQLFragment b
206206
else
207207
{
208208
// Issue 29047
209-
blankRowsSQL.appendIdentifier(columnId).append(" IS NOT NULL");
209+
blankRowsSQL.appendIdentifier(columnId).append(" IS NULL");
210210
}
211211
if (prop.isMvEnabled())
212212
{

api/src/org/labkey/api/query/QueryService.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,38 @@
1616

1717
package org.labkey.api.query;
1818

19+
import jakarta.servlet.http.HttpSession;
1920
import org.apache.commons.collections4.SetValuedMap;
2021
import org.jetbrains.annotations.NotNull;
2122
import org.jetbrains.annotations.Nullable;
2223
import org.json.JSONObject;
2324
import org.labkey.api.audit.AuditHandler;
2425
import org.labkey.api.audit.DetailedAuditTypeEvent;
26+
import org.labkey.api.data.ColumnHeaderType;
27+
import org.labkey.api.data.ColumnInfo;
28+
import org.labkey.api.data.CompareType;
29+
import org.labkey.api.data.Container;
30+
import org.labkey.api.data.ContainerFilter;
31+
import org.labkey.api.data.DbSchema;
32+
import org.labkey.api.data.DisplayColumn;
33+
import org.labkey.api.data.Filter;
34+
import org.labkey.api.data.JdbcType;
35+
import org.labkey.api.data.MethodInfo;
36+
import org.labkey.api.data.MutableColumnInfo;
37+
import org.labkey.api.data.ParameterDescription;
38+
import org.labkey.api.data.ParameterDescriptionImpl;
39+
import org.labkey.api.data.QueryLogging;
40+
import org.labkey.api.data.Results;
41+
import org.labkey.api.data.SQLFragment;
42+
import org.labkey.api.data.Sort;
43+
import org.labkey.api.data.SqlSelector;
44+
import org.labkey.api.data.TableInfo;
45+
import org.labkey.api.data.TableSelector;
46+
import org.labkey.api.data.dialect.SqlDialect;
2547
import org.labkey.api.gwt.client.model.GWTPropertyDescriptor;
48+
import org.labkey.api.module.Module;
2649
import org.labkey.api.pipeline.PipelineJob;
2750
import org.labkey.api.query.column.ColumnInfoTransformer;
28-
import org.labkey.api.data.*;
29-
import org.labkey.api.data.dialect.SqlDialect;
30-
import org.labkey.api.module.Module;
3151
import org.labkey.api.query.column.ConceptURIColumnInfoTransformer;
3252
import org.labkey.api.query.snapshot.QuerySnapshotDefinition;
3353
import org.labkey.api.security.User;
@@ -41,7 +61,6 @@
4161
import org.labkey.data.xml.TableType;
4262
import org.springframework.web.servlet.mvc.Controller;
4363

44-
import jakarta.servlet.http.HttpSession;
4564
import java.io.IOException;
4665
import java.sql.ResultSet;
4766
import java.sql.SQLException;
@@ -653,6 +672,13 @@ default MutableColumnInfo applyColumnTransformer(MutableColumnInfo col)
653672
@Nullable
654673
ContainerFilter getContainerFilterForLookups(Container container, User user);
655674

675+
/**
676+
* Provides the configured ContainerFilter to utilize when requesting data that is being read
677+
* within a folder context. Equivalent to the client side function in @labkey/components
678+
*/
679+
@Nullable
680+
ContainerFilter getContainerFilterForFolder(Container container, User user);
681+
656682

657683
interface SelectBuilder
658684
{

api/src/org/labkey/api/util/XmlBeansUtil.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public static void addComment(XmlTokenSource doc, String comment)
132132
public static final SAXParserFactory SAX_PARSER_FACTORY_ALLOWING_DOCTYPE;
133133
public static final XMLInputFactory XML_INPUT_FACTORY;
134134
public static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY;
135+
public static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY_ALLOWING_DOCTYPE;
135136

136137
static
137138
{
@@ -145,16 +146,9 @@ public static void addComment(XmlTokenSource doc, String comment)
145146
SAX_PARSER_FACTORY = saxParserFactory(false);
146147
SAX_PARSER_FACTORY_ALLOWING_DOCTYPE = saxParserFactory(true);
147148

148-
//noinspection XMLInputFactory
149-
DOCUMENT_BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
150-
DOCUMENT_BUILDER_FACTORY.setNamespaceAware(true);
151-
DOCUMENT_BUILDER_FACTORY.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
152-
DOCUMENT_BUILDER_FACTORY.setFeature("http://xml.org/sax/features/external-general-entities", false);
153-
DOCUMENT_BUILDER_FACTORY.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
154-
DOCUMENT_BUILDER_FACTORY.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
155-
DOCUMENT_BUILDER_FACTORY.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
156-
DOCUMENT_BUILDER_FACTORY.setXIncludeAware(false);
157-
DOCUMENT_BUILDER_FACTORY.setExpandEntityReferences(false);
149+
DOCUMENT_BUILDER_FACTORY = documentBuilderFactory(false);
150+
// Use the ALLOWING_DOCTYPE variant when parsing XML that contains a <!DOCTYPE> declaration (e.g. NCBI's eSummary responses)
151+
DOCUMENT_BUILDER_FACTORY_ALLOWING_DOCTYPE = documentBuilderFactory(true);
158152
}
159153
catch (ParserConfigurationException | SAXException e)
160154
{
@@ -181,4 +175,26 @@ private static SAXParserFactory saxParserFactory(boolean allowDocType) throws SA
181175
result.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
182176
return result;
183177
}
178+
179+
private static DocumentBuilderFactory documentBuilderFactory(boolean allowDocType) throws ParserConfigurationException
180+
{
181+
//noinspection XMLInputFactory
182+
DocumentBuilderFactory result = DocumentBuilderFactory.newInstance();
183+
result.setNamespaceAware(true);
184+
185+
// Disable features that could lead to XXE or other vulnerabilities.
186+
// When allowDocType is true the DOCTYPE declaration is permitted. External entity
187+
// resolution remains disabled, so XXE protection is still in effect.
188+
if (!allowDocType)
189+
{
190+
result.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
191+
}
192+
result.setFeature("http://xml.org/sax/features/external-general-entities", false);
193+
result.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
194+
result.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
195+
result.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
196+
result.setXIncludeAware(false);
197+
result.setExpandEntityReferences(false);
198+
return result;
199+
}
184200
}

assay/package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assay/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"clean": "rimraf resources/web/assay/gen && rimraf resources/views/gen && rimraf resources/web/gen"
1313
},
1414
"dependencies": {
15-
"@labkey/components": "7.21.0"
15+
"@labkey/components": "7.21.4"
1616
},
1717
"devDependencies": {
1818
"@labkey/build": "8.9.0",

core/package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
}
5454
},
5555
"dependencies": {
56-
"@labkey/components": "7.21.0",
56+
"@labkey/components": "7.21.4",
5757
"@labkey/themes": "1.7.0"
5858
},
5959
"devDependencies": {

experiment/package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

experiment/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"test-integration": "cross-env NODE_ENV=test jest --ci --runInBand -c test/js/jest.config.integration.js"
1414
},
1515
"dependencies": {
16-
"@labkey/components": "7.21.0"
16+
"@labkey/components": "7.21.4"
1717
},
1818
"devDependencies": {
1919
"@labkey/build": "8.9.0",

pipeline/package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)