Skip to content

Commit 4a0e0c5

Browse files
authored
[disk-buffering] Ensure no sign propagation for flags byte (#1166)
1 parent 7ed5ab0 commit 4a0e0c5

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/logs/LogRecordDataMapper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.logs;
77

88
import static io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans.SpanDataMapper.flagsFromInt;
9+
import static io.opentelemetry.contrib.disk.buffering.internal.utils.ProtobufTools.toUnsignedInt;
910

1011
import io.opentelemetry.api.common.Attributes;
1112
import io.opentelemetry.api.logs.Severity;
@@ -45,7 +46,8 @@ public LogRecord mapToProto(LogRecordData source) {
4546
logRecord.body(bodyToAnyValue(source.getBody()));
4647
}
4748

48-
logRecord.flags(source.getSpanContext().getTraceFlags().asByte());
49+
byte flags = source.getSpanContext().getTraceFlags().asByte();
50+
logRecord.flags(toUnsignedInt(flags));
4951

5052
addExtrasToProtoBuilder(source, logRecord);
5153

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/spans/SpanDataMapper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.contrib.disk.buffering.internal.serialization.mapping.spans;
77

8+
import static io.opentelemetry.contrib.disk.buffering.internal.utils.ProtobufTools.toUnsignedInt;
9+
810
import io.opentelemetry.api.common.Attributes;
911
import io.opentelemetry.api.trace.SpanContext;
1012
import io.opentelemetry.api.trace.SpanKind;
@@ -309,7 +311,7 @@ private static Span.Link linkDataToProto(LinkData source) {
309311
SpanContext spanContext = source.getSpanContext();
310312
builder.trace_id(ByteStringMapper.getInstance().stringToProto(spanContext.getTraceId()));
311313
builder.span_id(ByteStringMapper.getInstance().stringToProto(spanContext.getSpanId()));
312-
builder.flags = spanContext.getTraceFlags().asByte();
314+
builder.flags = toUnsignedInt(spanContext.getTraceFlags().asByte());
313315
builder.attributes.addAll(attributesToProto(source.getAttributes()));
314316
builder.dropped_attributes_count(
315317
source.getTotalAttributeCount() - source.getAttributes().size());

disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/utils/ProtobufTools.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,12 @@ public static int readRawVarint32(int firstByte, InputStream input) throws IOExc
4848
}
4949
throw new IllegalStateException();
5050
}
51+
52+
/**
53+
* Vendored {@link Byte#toUnsignedInt(byte)} to support Android. Also helps with accidental sign
54+
* propagation.
55+
*/
56+
public static int toUnsignedInt(byte x) {
57+
return ((int) x) & 0xff;
58+
}
5159
}

0 commit comments

Comments
 (0)