Skip to content

Commit ee12ad3

Browse files
authored
Adding sanitizer allow lists (#1386)
1 parent ce2eb75 commit ee12ad3

File tree

10 files changed

+170
-16
lines changed

10 files changed

+170
-16
lines changed

lib/android_build/maesdk/src/main/java/com/microsoft/applications/events/Sanitizer.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,45 @@
44
//
55
package com.microsoft.applications.events;
66

7-
public class Sanitizer {
8-
7+
public class Sanitizer {
98
/**
109
* Initializes the sanitizer with the given logger pointer and optional notification event name.
1110
*
1211
* @param loggerNativePtr Native pointer to ILogger.
1312
* @param notificationEventName Optional event name for sanitizer notifications.
1413
* @param enforceSanitization Flag to control whether sanitization is enforced.
14+
* @param urlDomains Array of URL domains to allow.
15+
* @param emailDomains Array of email domains to allow.
16+
* @param analyzerOptions Analyzer options flags (bitwise OR of values):
17+
* 0 = None (default - no special analyzer behaviors). SitePathLoose is the default behavior.
18+
* 1 = SitePathStrict (enables strict site path analysis)
19+
* 2 = SitePathLoose (enables loose site path analysis)
20+
* Multiple flags can be combined with bitwise OR (e.g., 1 | 2 = 3)
1521
* @return true if initialization was successful, false otherwise.
1622
*/
17-
private static native boolean nativeInitialize(long loggerNativePtr, String notificationEventName, boolean enforceSanitization);
18-
23+
private static native boolean nativeInitialize(long loggerNativePtr,
24+
String notificationEventName,
25+
boolean enforceSanitization,
26+
String[] urlDomains,
27+
String[] emailDomains,
28+
int analyzerOptions,
29+
int sendConcernLimit);
1930
/**
2031
* Initializes the sanitizer with the provided configuration.
2132
*
2233
* @param config The configuration settings used to initialize a sanitizer.
34+
* @param urlDomains Array of URL domains to allow (can be null for empty list).
35+
* @param emailDomains Array of email domains to allow (can be null for empty list).
36+
* @param analyzerOptions Analyzer options flags (bitwise OR of values):
37+
* 0 = None (default - no special analyzer behaviors). SitePathLoose is the default behavior.
38+
* 1 = SitePathStrict (enables strict site path analysis)
39+
* 2 = SitePathLoose (enables loose site path analysis)
40+
* Multiple flags can be combined with bitwise OR (e.g., 1 | 2 = 3)
41+
* @param sendConcernLimit Maximum number of concerns to send. 0 = no concerns sent, 65536+ = all concerns sent.
2342
* @return true if initialization succeeds, false otherwise.
2443
* @throws IllegalArgumentException if config or any required field is null or invalid.
2544
*/
26-
public static boolean initialize(SanitizerConfiguration config) {
45+
public static boolean initialize(SanitizerConfiguration config, String[] urlDomains, String[] emailDomains, int analyzerOptions, int sendConcernLimit) {
2746

2847
// Validate that the configuration object is not null
2948
if(config == null) {
@@ -43,7 +62,11 @@ public static boolean initialize(SanitizerConfiguration config) {
4362
return nativeInitialize(
4463
config.getLogger().getNativeILoggerPtr(),
4564
config.getNotificationEventName(),
46-
config.isEnforceSanitization());
65+
config.isEnforceSanitization(),
66+
urlDomains,
67+
emailDomains,
68+
analyzerOptions,
69+
sendConcernLimit);
4770
}
4871

4972
/**

lib/include/public/Version.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
#define MAT_VERSION_HPP
77
// WARNING: DO NOT MODIFY THIS FILE!
88
// This file has been automatically generated, manual changes will be lost.
9-
#define BUILD_VERSION_STR "3.9.309.1"
10-
#define BUILD_VERSION 3,9,309,1
9+
#define BUILD_VERSION_STR "3.9.318.1"
10+
#define BUILD_VERSION 3,9,318,1
1111

1212
#ifndef RESOURCE_COMPILER_INVOKED
1313
#include "ctmacros.hpp"
@@ -18,7 +18,7 @@ namespace MAT_NS_BEGIN {
1818
uint64_t const Version =
1919
((uint64_t)3 << 48) |
2020
((uint64_t)9 << 32) |
21-
((uint64_t)309 << 16) |
21+
((uint64_t)318 << 16) |
2222
((uint64_t)1);
2323

2424
} MAT_NS_END

lib/jni/Sanitizer_jni.cpp

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,66 @@ Java_com_microsoft_applications_events_Sanitizer_isInitialized(const JNIEnv *env
2323
return spSanitizer != nullptr;
2424
}
2525

26-
extern "C"
27-
JNIEXPORT jboolean JNICALL
28-
Java_com_microsoft_applications_events_Sanitizer_nativeInitialize(
26+
/**
27+
* Initializes the sanitizer with the provided configuration.
28+
*
29+
* @param iLoggerNativePtr Native pointer to the ILogger instance.
30+
* @param notificationEventName Name of the event to log sanitizer concerns.
31+
* @param warningsToSanitization If true, all warnings are treated as sanitizations.
32+
* @param urlDomains Array of URL domains to allow (can be null for empty list).
33+
* @param emailDomains Array of email domains to allow (can be null for empty list).
34+
* @param analyzerOptions Analyzer options flags (bitwise OR of values):
35+
* 0 = None (default - no special analyzer behaviors). SitePathLoose is the default behavior.
36+
* 1 = SitePathStrict (enables strict site path analysis)
37+
* 2 = SitePathLoose (enables loose site path analysis)
38+
* Multiple flags can be combined with bitwise OR (e.g., 1 | 2 = 3)
39+
* @param sendConcernLimit Maximum number of concerns to send. 0 = no concerns sent, 65536+ = all concerns sent.
40+
* **/
41+
extern "C"
42+
JNIEXPORT jboolean JNICALL
43+
Java_com_microsoft_applications_events_Sanitizer_nativeInitialize(
2944
JNIEnv *env, jclass /* this */,
3045
jlong iLoggerNativePtr,
3146
jstring notificationEventName,
32-
jboolean warningsToSanitization) {
47+
jboolean warningsToSanitization,
48+
jobjectArray urlDomains,
49+
jobjectArray emailDomains,
50+
jint analyzerOptions,
51+
jint sendConcernLimit // number of concerns to upload. Set to 0 to upload none, greater than 65536 uploads everything.
52+
) {
3353

3454
if (spSanitizer != nullptr) {
3555
return false;
3656
}
3757

38-
SanitizerConfiguration sanitizerConfig(reinterpret_cast<ILogger*>(iLoggerNativePtr));
58+
std::vector<std::string> urlDomainsVec;
59+
std::vector<std::string> emailDomainsVec;
60+
61+
if (urlDomains != nullptr) {
62+
jsize urlDomainsLength = env->GetArrayLength(urlDomains);
63+
for (jsize i = 0; i < urlDomainsLength; i++) {
64+
jstring domain = static_cast<jstring>(env->GetObjectArrayElement(urlDomains, i));
65+
if (domain != nullptr) {
66+
urlDomainsVec.push_back(JStringToStdString(env, domain));
67+
env->DeleteLocalRef(domain);
68+
}
69+
}
70+
}
71+
72+
if (emailDomains != nullptr) {
73+
jsize emailDomainsLength = env->GetArrayLength(emailDomains);
74+
for (jsize i = 0; i < emailDomainsLength; i++) {
75+
jstring domain = static_cast<jstring>(env->GetObjectArrayElement(emailDomains, i));
76+
if (domain != nullptr) {
77+
emailDomainsVec.push_back(JStringToStdString(env, domain));
78+
env->DeleteLocalRef(domain);
79+
}
80+
}
81+
}
82+
83+
SanitizerConfiguration sanitizerConfig(reinterpret_cast<ILogger*>(iLoggerNativePtr), urlDomainsVec, emailDomainsVec, static_cast<size_t>(analyzerOptions));
84+
85+
sanitizerConfig.SendConcernLimit = sendConcernLimit;
3986

4087
if (notificationEventName != nullptr) {
4188
sanitizerConfig.NotificationEventName = JStringToStdString(env, notificationEventName);

lib/modules

wrappers/obj-c/ODWLogger.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,21 @@ typedef NS_ENUM(NSInteger, ODWSessionState)
134134
*/
135135
-(void)initializeSanitizerWithODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject;
136136

137+
/*!
138+
@brief Initialize the Sanitizer component with domain allow lists.
139+
@param initConfigObject An instance of ODWSanitizerInitConfig that contains the configuration settings for the Sanitizer component.
140+
There is a property on initConfigObject named "SendConcernLimit" that controls the maximum number of concerns uploaded. If set to 0, no concerns are uploaded.
141+
If set to 65536 or higher all concerns are uploaded. For n between 0 and 65536, n concerns are uploaded. This number cannot be changed after process start.
142+
@param urlDomains Array of URL domains to allow (can be nil for empty list).
143+
@param emailDomains Array of email domains to allow (can be nil for empty list).
144+
@param analyzerOptions Analyzer options flags (bitwise OR of values):
145+
- 0: None (default - no special analyzer behaviors)
146+
- 1: SitePathStrict (enables strict site path analysis)
147+
- 2: SitePathLoose (enables loose site path analysis)
148+
Multiple flags can be combined with bitwise OR (e.g., 1 | 2 = 3)
149+
*/
150+
-(void)initializeSanitizerWithODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject urlDomains:(NSArray<NSString *> * _Nullable)urlDomains emailDomains:(NSArray<NSString *> * _Nullable)emailDomains analyzerOptions:(int)analyzerOptions;
151+
137152
#pragma mark Set Context methods
138153

139154
/*!

wrappers/obj-c/ODWLogger.mm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
//
23
// Copyright (c) Microsoft Corporation. All rights reserved.
34
// SPDX-License-Identifier: Apache-2.0
@@ -418,4 +419,9 @@ -(void)initializeSanitizerWithODWSanitizerInitConfig:(ODWSanitizerInitConfig *)i
418419
{
419420
[ODWSanitizer initializeSanitizer:_wrappedLogger withODWSanitizerInitConfig:initConfigObject];
420421
}
422+
423+
-(void)initializeSanitizerWithODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject urlDomains:(NSArray<NSString *> *)urlDomains emailDomains:(NSArray<NSString *> *)emailDomains analyzerOptions:(int)analyzerOptions
424+
{
425+
[ODWSanitizer initializeSanitizer:_wrappedLogger withODWSanitizerInitConfig:initConfigObject urlDomains:urlDomains emailDomains:emailDomains analyzerOptions:analyzerOptions];
426+
}
421427
@end

wrappers/obj-c/ODWSanitizer.mm

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
//
23
// Copyright (c) Microsoft Corporation. All rights reserved.
34
// SPDX-License-Identifier: Apache-2.0
@@ -19,19 +20,59 @@ @implementation ODWSanitizer
1920
std::shared_ptr<Sanitizer> _sanitizerPtr;
2021

2122
+(void)initializeSanitizer:(ILogger *)logger withODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject
23+
{
24+
if (_sanitizerPtr != nullptr)
25+
{
26+
return;
27+
}
28+
std::vector<std::string> urlDomains;
29+
std::vector<std::string> emailDomains;
30+
SanitizerConfiguration config(logger, urlDomains, emailDomains, 0);
31+
32+
if ([initConfigObject notificationEventName] != nil)
33+
{
34+
config.NotificationEventName = [[initConfigObject notificationEventName] UTF8String];
35+
}
36+
config.SetAllWarningsToSanitizations = initConfigObject.setWarningsToSanitization;
37+
config.SendConcernLimit = static_cast<size_t>(initConfigObject.sendConcernLimit);
38+
39+
_sanitizerPtr = std::make_shared<Sanitizer>(config);
40+
LogManager::GetInstance()->SetDataInspector(_sanitizerPtr);
41+
}
42+
43+
+(void)initializeSanitizer:(ILogger *)logger withODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject urlDomains:(NSArray<NSString *> *)urlDomains emailDomains:(NSArray<NSString *> *)emailDomains analyzerOptions:(int)analyzerOptions
2244
{
2345
if (_sanitizerPtr != nullptr)
2446
{
2547
return;
2648
}
2749

28-
SanitizerConfiguration config(logger);
50+
std::vector<std::string> urlDomainsVec;
51+
std::vector<std::string> emailDomainsVec;
52+
53+
if (urlDomains != nil)
54+
{
55+
for (NSString *domain in urlDomains)
56+
{
57+
urlDomainsVec.push_back([domain UTF8String]);
58+
}
59+
}
60+
61+
if (emailDomains != nil)
62+
{
63+
for (NSString *domain in emailDomains)
64+
{
65+
emailDomainsVec.push_back([domain UTF8String]);
66+
}
67+
}
68+
SanitizerConfiguration config(logger, urlDomainsVec, emailDomainsVec, static_cast<size_t>(analyzerOptions));
2969

3070
if ([initConfigObject notificationEventName] != nil)
3171
{
3272
config.NotificationEventName = [[initConfigObject notificationEventName] UTF8String];
3373
}
3474
config.SetAllWarningsToSanitizations = initConfigObject.setWarningsToSanitization;
75+
config.SendConcernLimit = static_cast<size_t>(initConfigObject.sendConcernLimit);
3576

3677
_sanitizerPtr = std::make_shared<Sanitizer>(config);
3778
LogManager::GetInstance()->SetDataInspector(_sanitizerPtr);

wrappers/obj-c/ODWSanitizerInitConfig.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ NS_ASSUME_NONNULL_BEGIN
2020
*/
2121
@property(readwrite, nonatomic) BOOL setWarningsToSanitization;
2222

23+
/*!
24+
@brief (OPTIONAL) Total amount of SendConcerns that can be emitted. If set to 0 no concerns will be uploaded.
25+
If set to 65536 or higher all concerns will be uploaded. Default value is `65536`.
26+
*/
27+
@property(readwrite, nonatomic) NSUInteger sendConcernLimit;
28+
2329
// Initializer
2430
- (instancetype)init;
2531

wrappers/obj-c/ODWSanitizerInitConfig.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ - (instancetype)init {
1515
if (self) {
1616
_notificationEventName = @"SanitizerConcerns"; // Default event name
1717
_setWarningsToSanitization = YES; // Default to true
18+
_sendConcernLimit = 65536; // Default to 65536 (upload all concerns)
1819
}
1920
return self;
2021
}

wrappers/obj-c/ODWSanitizer_private.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,21 @@ NS_ASSUME_NONNULL_BEGIN
2222
@param initConfigObject the configuration
2323
*/
2424
+(void)initializeSanitizer:(ILogger *)logger withODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject;
25+
26+
/*!
27+
@brief Initializes the sanitizer with domain allow lists
28+
@param logger Logger used for reporting concerns
29+
@param initConfigObject the configuration
30+
@param urlDomains Array of URL domains to allow (can be nil for empty list)
31+
@param emailDomains Array of email domains to allow (can be nil for empty list)
32+
@param analyzerOptions Analyzer options flags (bitwise OR of values):
33+
- 0: None (default - no special analyzer behaviors)
34+
- 1: SitePathStrict (enables strict site path analysis)
35+
- 2: SitePathLoose (enables loose site path analysis)
36+
Multiple flags can be combined with bitwise OR (e.g., 1 | 2 = 3)
37+
*/
38+
+(void)initializeSanitizer:(ILogger *)logger withODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject urlDomains:(NSArray<NSString *> * _Nullable)urlDomains emailDomains:(NSArray<NSString *> * _Nullable)emailDomains analyzerOptions:(int)analyzerOptions;
39+
2540
@end
2641

2742
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)