Skip to content

Commit fc766b7

Browse files
committed
chore(appsec): handle edge cases
Signed-off-by: Alexandre Rulleau <[email protected]>
1 parent 39ebaed commit fc766b7

7 files changed

+153
-3
lines changed

appsec/src/extension/tags.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,8 @@ static PHP_FUNCTION(datadog_appsec_track_user_signup_event_automated)
10261026
// _dd.appsec.usr.id = <user_id>
10271027
_add_new_zstr_to_meta(meta_ht, _dd_appsec_user_id,
10281028
anon_user_id ? anon_user_id : user_id, !anon_user_id, true);
1029+
} else if (anon_user_id) {
1030+
zend_string_release(anon_user_id);
10291031
}
10301032

10311033
// _dd.appsec.events.users.signup.auto.mode =
@@ -1161,9 +1163,6 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_success_event_automated)
11611163
zend_string_release(anon_user_id);
11621164
return;
11631165
}
1164-
1165-
user_login = anon_user_login;
1166-
user_id = anon_user_id;
11671166
}
11681167

11691168
if (ZSTR_LEN(user_id) > 0) {
@@ -1176,6 +1175,8 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_success_event_automated)
11761175
// _dd.appsec.usr.id = <user_id>
11771176
_add_new_zstr_to_meta(meta_ht, _dd_appsec_user_id,
11781177
anon_user_id ? anon_user_id : user_id, !anon_user_id, true);
1178+
} else if (anon_user_id) {
1179+
zend_string_release(anon_user_id);
11791180
}
11801181

11811182
// _dd.appsec.events.users.login.success.auto.mode =
@@ -1325,6 +1326,8 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_failure_event_automated)
13251326
// _dd.appsec.usr.id = <user_id>
13261327
_add_new_zstr_to_meta(meta_ht, _dd_appsec_user_id,
13271328
anon_user_id ? anon_user_id : user_id, !anon_user_id, true);
1329+
} else if (anon_user_id) {
1330+
zend_string_release(anon_user_id);
13281331
}
13291332

13301333
// _dd.appsec.events.users.login.failure.auto.mode =
@@ -1341,6 +1344,8 @@ static PHP_FUNCTION(datadog_appsec_track_user_login_failure_event_automated)
13411344
_add_new_zstr_to_meta(meta_ht, _dd_appsec_user_login,
13421345
anon_user_login ? anon_user_login : user_login, !anon_user_login,
13431346
true);
1347+
} else if (anon_user_login) {
1348+
zend_string_release(anon_user_login);
13441349
}
13451350

13461351
// appsec.events.users.login.failure.track = true
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
--TEST--
2+
Track automated user login failure with anonymization mode and verify the tags in the root span
3+
--INI--
4+
extension=ddtrace.so
5+
--ENV--
6+
DD_APPSEC_ENABLED=1
7+
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
8+
--FILE--
9+
<?php
10+
use function datadog\appsec\testing\root_span_get_meta;
11+
use function datadog\appsec\track_user_login_failure_event_automated;
12+
include __DIR__ . '/inc/ddtrace_version.php';
13+
14+
ddtrace_version_at_least('0.79.0');
15+
16+
track_user_login_failure_event_automated("", "automatedID",
17+
true,
18+
[
19+
"value" => "something",
20+
"metadata" => "some other metadata",
21+
"email" => "[email protected]"
22+
]
23+
);
24+
25+
echo "root_span_get_meta():\n";
26+
print_r(root_span_get_meta());
27+
?>
28+
--EXPECTF--
29+
root_span_get_meta():
30+
Array
31+
(
32+
[runtime-id] => %s
33+
[appsec.events.users.login.failure.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
34+
[_dd.appsec.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
35+
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
36+
[appsec.events.users.login.failure.track] => true
37+
[appsec.events.users.login.failure.usr.exists] => true
38+
[server.business_logic.users.login.failure] => null
39+
)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
--TEST--
2+
Track automated user login failure with anonymization mode and verify the tags in the root span
3+
--INI--
4+
extension=ddtrace.so
5+
--ENV--
6+
DD_APPSEC_ENABLED=1
7+
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
8+
--FILE--
9+
<?php
10+
use function datadog\appsec\testing\root_span_get_meta;
11+
use function datadog\appsec\track_user_login_failure_event_automated;
12+
include __DIR__ . '/inc/ddtrace_version.php';
13+
14+
ddtrace_version_at_least('0.79.0');
15+
16+
track_user_login_failure_event_automated("login", "",
17+
true,
18+
[
19+
"value" => "something",
20+
"metadata" => "some other metadata",
21+
"email" => "[email protected]"
22+
]
23+
);
24+
25+
echo "root_span_get_meta():\n";
26+
print_r(root_span_get_meta());
27+
?>
28+
--EXPECTF--
29+
root_span_get_meta():
30+
Array
31+
(
32+
[runtime-id] => %s
33+
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
34+
[appsec.events.users.login.failure.usr.login] => anon_428821350e9691491f616b754cd8315f
35+
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
36+
[appsec.events.users.login.failure.track] => true
37+
[appsec.events.users.login.failure.usr.exists] => true
38+
[server.business_logic.users.login.failure] => null
39+
)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--TEST--
2+
Track automated user login success event with anonymization mode and verify the tags in the root span
3+
--INI--
4+
extension=ddtrace.so
5+
--ENV--
6+
DD_APPSEC_ENABLED=1
7+
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
8+
--FILE--
9+
<?php
10+
use function datadog\appsec\testing\root_span_get_meta;
11+
use function datadog\appsec\track_user_login_success_event_automated;
12+
include __DIR__ . '/inc/ddtrace_version.php';
13+
14+
ddtrace_version_at_least('0.79.0');
15+
16+
track_user_login_success_event_automated("login", "", ['something' => 'discarded']);
17+
18+
echo "root_span_get_meta():\n";
19+
print_r(root_span_get_meta());
20+
?>
21+
--EXPECTF--
22+
root_span_get_meta():
23+
Array
24+
(
25+
[runtime-id] => %s
26+
[_dd.appsec.events.users.login.success.auto.mode] => anonymization
27+
[appsec.events.users.login.success.usr.login] => anon_428821350e9691491f616b754cd8315f
28+
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
29+
[appsec.events.users.login.success.track] => true
30+
[server.business_logic.users.login.success] => null
31+
)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
Track automated user sign up event with anonymization mode and verify the tags in the root span
3+
--INI--
4+
extension=ddtrace.so
5+
--ENV--
6+
DD_APPSEC_ENABLED=1
7+
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
8+
--FILE--
9+
<?php
10+
use function datadog\appsec\testing\root_span_get_meta;
11+
use function datadog\appsec\track_user_signup_event_automated;
12+
include __DIR__ . '/inc/ddtrace_version.php';
13+
14+
ddtrace_version_at_least('0.79.0');
15+
16+
track_user_signup_event_automated("login", "",
17+
[
18+
"value" => "something",
19+
"metadata" => "some other metadata",
20+
"email" => "[email protected]"
21+
]);
22+
23+
echo "root_span_get_meta():\n";
24+
print_r(root_span_get_meta());
25+
?>
26+
--EXPECTF--
27+
root_span_get_meta():
28+
Array
29+
(
30+
[runtime-id] => %s
31+
[_dd.appsec.events.users.signup.auto.mode] => anonymization
32+
[appsec.events.users.signup.usr.login] => anon_428821350e9691491f616b754cd8315f
33+
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
34+
[appsec.events.users.signup.track] => true
35+
[server.business_logic.users.signup] => null
36+
)

0 commit comments

Comments
 (0)