Skip to content

Commit f12d198

Browse files
authored
Merge commit from fork
1 parent 442cdbd commit f12d198

5 files changed

Lines changed: 55 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
8282
- Fix race condition in `FixedSizeReservoir` in `go.opentelemetry.io/otel/sdk/metric/exemplar` by reverting #7447. (#8249)
8383
- Fix counting of spans and logs in self-observability metrics in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`, and `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#8254)
8484
- Drop conflicting scope attributes named `name`, `version`, or `schema_url` from metric labels in `go.opentelemetry.io/otel/exporters/prometheus`, preserving the dedicated `otel_scope_name`, `otel_scope_version`, and `otel_scope_schema_url` labels. (#8264)
85+
- Close schema files opened by `ParseFile` in `go.opentelemetry.io/otel/schema/v1.0` and `go.opentelemetry.io/otel/schema/v1.1`. ([GHSA-995v-fvrw-c78m](https://github.com/open-telemetry/opentelemetry-go/security/advisories/GHSA-995v-fvrw-c78m))
8586

8687
<!-- Released section -->
8788
<!-- Don't change this section unless doing release -->

schema/v1.0/parser.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func ParseFile(schemaFilePath string) (*ast.Schema, error) {
2626
if err != nil {
2727
return nil, err
2828
}
29+
defer file.Close()
2930
return Parse(file)
3031
}
3132

schema/v1.0/parser_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ package schema
55

66
import (
77
"bytes"
8+
"os"
9+
"runtime/debug"
810
"testing"
911

1012
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/require"
1114

1215
"go.opentelemetry.io/otel/schema/v1.0/ast"
1316
"go.opentelemetry.io/otel/schema/v1.0/types"
@@ -149,6 +152,29 @@ func TestParseSchemaFile(t *testing.T) {
149152
)
150153
}
151154

155+
func TestParseFileClosesFile(t *testing.T) {
156+
oldGCPercent := debug.SetGCPercent(-1)
157+
defer debug.SetGCPercent(oldGCPercent)
158+
159+
before := openFileDescriptors(t)
160+
_, err := ParseFile("testdata/valid-example.yaml")
161+
require.NoError(t, err)
162+
after := openFileDescriptors(t)
163+
164+
assert.LessOrEqual(t, after, before, "ParseFile leaked file descriptors: before=%d after=%d", before, after)
165+
}
166+
167+
func openFileDescriptors(t *testing.T) int {
168+
t.Helper()
169+
170+
entries, err := os.ReadDir("/proc/self/fd")
171+
if err != nil {
172+
t.Skipf("cannot inspect file descriptors: %v", err)
173+
}
174+
175+
return len(entries)
176+
}
177+
152178
func TestFailParseSchemaFile(t *testing.T) {
153179
ts, err := ParseFile("testdata/unsupported-file-format.yaml")
154180
assert.Error(t, err)

schema/v1.1/parser.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func ParseFile(schemaFilePath string) (*ast.Schema, error) {
2626
if err != nil {
2727
return nil, err
2828
}
29+
defer file.Close()
2930
return Parse(file)
3031
}
3132

schema/v1.1/parser_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
package schema
55

66
import (
7+
"os"
8+
"runtime/debug"
79
"testing"
810

911
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
1013

1114
ast10 "go.opentelemetry.io/otel/schema/v1.0/ast"
1215
types10 "go.opentelemetry.io/otel/schema/v1.0/types"
@@ -160,6 +163,29 @@ func TestParseSchemaFile(t *testing.T) {
160163
)
161164
}
162165

166+
func TestParseFileClosesFile(t *testing.T) {
167+
oldGCPercent := debug.SetGCPercent(-1)
168+
defer debug.SetGCPercent(oldGCPercent)
169+
170+
before := openFileDescriptors(t)
171+
_, err := ParseFile("testdata/valid-example.yaml")
172+
require.NoError(t, err)
173+
after := openFileDescriptors(t)
174+
175+
assert.LessOrEqual(t, after, before, "ParseFile leaked file descriptors: before=%d after=%d", before, after)
176+
}
177+
178+
func openFileDescriptors(t *testing.T) int {
179+
t.Helper()
180+
181+
entries, err := os.ReadDir("/proc/self/fd")
182+
if err != nil {
183+
t.Skipf("cannot inspect file descriptors: %v", err)
184+
}
185+
186+
return len(entries)
187+
}
188+
163189
func TestFailParseFileUnsupportedFileFormat(t *testing.T) {
164190
ts, err := ParseFile("testdata/unsupported-file-format.yaml")
165191
assert.ErrorContains(t, err, "unsupported schema file format minor version number")

0 commit comments

Comments
 (0)