Skip to content

Commit b2420d2

Browse files
committed
Don't set the '_dd1.sr.eausr' on parsing failure
1 parent 36c8ac9 commit b2420d2

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

ext/serializer.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,14 +1203,14 @@ void ddtrace_shutdown_span_sampling_limiter(void) {
12031203
}
12041204

12051205
// ParseBool returns the boolean value represented by the string.
1206-
// It accepts 1, t, T, True (case insensitive), 0, f, F, False (case insensitive).
1207-
// Any other value returns 0
1206+
// It accepts 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False.
1207+
// Any other value returns -1.
12081208
static zend_always_inline double strconv_parse_bool(zend_string *str) {
12091209
// See Go's strconv.ParseBool
12101210
// https://cs.opensource.google/go/go/+/refs/tags/go1.21.5:src/strconv/atob.go;drc=1f137052e4a20dbd302f947b1cf34cdf4b427d65;l=10
12111211
size_t len = ZSTR_LEN(str);
12121212
if (len == 0) {
1213-
return 0;
1213+
return -1;
12141214
}
12151215

12161216
char *s = ZSTR_VAL(str);
@@ -1228,18 +1228,18 @@ static zend_always_inline double strconv_parse_bool(zend_string *str) {
12281228
}
12291229
break;
12301230
case 4:
1231-
if (strcasecmp(s, "true") == 0) {
1231+
if (strcmp(s, "TRUE") == 0 || strcmp(s, "True") == 0 || strcmp(s, "true") == 0) {
12321232
return 1;
12331233
}
12341234
break;
12351235
case 5:
1236-
if (strcasecmp(s, "false") == 0) {
1236+
if (strcmp(s, "FALSE") == 0 || strcmp(s, "False") == 0 || strcmp(s, "false") == 0) {
12371237
return 0;
12381238
}
12391239
break;
12401240
}
12411241

1242-
return 0;
1242+
return -1;
12431243
}
12441244

12451245
void ddtrace_serialize_span_to_array(ddtrace_span_data *span, zval *array) {
@@ -1365,12 +1365,17 @@ void ddtrace_serialize_span_to_array(ddtrace_span_data *span, zval *array) {
13651365
if (analytics_event) {
13661366
zval analytics_event_as_double;
13671367
if (Z_TYPE_P(analytics_event) == IS_STRING) {
1368-
ZVAL_DOUBLE(&analytics_event_as_double, strconv_parse_bool(Z_STR_P(analytics_event)));
1368+
double parsed_analytics_event = strconv_parse_bool(Z_STR_P(analytics_event));
1369+
if (parsed_analytics_event >= 0) {
1370+
ZVAL_DOUBLE(&analytics_event_as_double, parsed_analytics_event);
1371+
zend_array *metrics = ddtrace_property_array(&span->property_metrics);
1372+
zend_hash_str_add_new(metrics, ZEND_STRL("_dd1.sr.eausr"), &analytics_event_as_double);
1373+
}
13691374
} else {
13701375
ZVAL_DOUBLE(&analytics_event_as_double, zval_get_double(analytics_event));
1376+
zend_array *metrics = ddtrace_property_array(&span->property_metrics);
1377+
zend_hash_str_add_new(metrics, ZEND_STRL("_dd1.sr.eausr"), &analytics_event_as_double);
13711378
}
1372-
zend_array *metrics = ddtrace_property_array(&span->property_metrics);
1373-
zend_hash_str_add_new(metrics, ZEND_STRL("_dd1.sr.eausr"), &analytics_event_as_double);
13741379
zend_hash_str_del(meta, ZEND_STRL("analytics.event"));
13751380
}
13761381

0 commit comments

Comments
 (0)