{"record":{"id":"ed5a9e62663a7ed3","repo":"grpc/grpc-go","slug":"extauthz-missing-default-value-in-filter-enabled","errorCode":null,"errorMessage":"extauthz: missing default_value in filter_enabled","messagePattern":"extauthz: missing default_value in filter_enabled","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/xds/httpfilter/ext_authz/ext_authz.go","lineNumber":68,"sourceCode":"\t}\n)\n\ntype builder struct{}\n\nfunc (builder) TypeURLs() []string {\n\treturn []string{\n\t\t\"type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz\",\n\t\t\"type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute\",\n\t}\n}\n\nfunc parseFilterEnabled(fp *v3corepb.RuntimeFractionalPercent) (fraction, error) {\n\tif fp == nil {\n\t\treturn fraction{numerator: 100, denominator: 100}, nil\n\t}\n\tfracPercent := fp.GetDefaultValue()\n\tif fracPercent == nil {\n\t\treturn fraction{}, fmt.Errorf(\"extauthz: missing default_value in filter_enabled\")\n\t}\n\n\tden := uint32(100)\n\tswitch fracPercent.GetDenominator() {\n\tcase v3typepb.FractionalPercent_TEN_THOUSAND:\n\t\tden = 10000\n\tcase v3typepb.FractionalPercent_MILLION:\n\t\tden = 1000000\n\t}\n\n\t// If the numerator exceeds the denominator, cap the fractional value at 100%.\n\tnum := min(fracPercent.GetNumerator(), den)\n\treturn fraction{numerator: num, denominator: den}, nil\n}\n\n// grpcStatusCode converts an HTTP status code to a gRPC status code.\nfunc grpcStatusCode(httpStatus int32) codes.Code {\n\tif code, ok := transport.HTTPStatusConvTab[int(httpStatus)]; ok {","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/grpc/grpc-go/blob/03255a9237b6eb32710f6bc4f2de9a675b99fe36/internal/xds/httpfilter/ext_authz/ext_authz.go#L50-L86","documentation":"Returned by parseFilterEnabled when the ExtAuthz config provides a filter_enabled RuntimeFractionalPercent whose default_value (the FractionalPercent) is nil. A present-but-empty filter_enabled is treated as a config error; an absent (nil) filter_enabled defaults to 100%.","triggerScenarios":"An xDS ExtAuthz config where filter_enabled is set as a non-nil RuntimeFractionalPercent but its default_value field is omitted, producing a nil FractionalPercent.","commonSituations":"Control plane partially populating filter_enabled (setting the wrapper but not the inner default_value), or a tool/UI that emits an empty filter_enabled object. Envoy and Traffic Director normally omit the field entirely or fully populate it.","solutions":["On the management server, either omit filter_enabled (defaults to 100%) or fully populate filter_enabled.default_value with numerator and denominator.","Validate the ExtAuthz config before publishing to ensure default_value is set whenever filter_enabled is present."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Ensure filter_enabled.default_value is set when filter_enabled is present.\nfunc validateFilterEnabled(fp *v3corepb.RuntimeFractionalPercent) error {\n    if fp != nil && fp.GetDefaultValue() == nil {\n        return errors.New(\"filter_enabled present but default_value missing\")\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Either omit filter_enabled (defaults to 100%) or fully populate its default_value.","Validate ExtAuthz config server-side before publishing.","Watch for UIs/tools that emit an empty filter_enabled object."],"tags":["grpc","xds","ext-authz","config","validation"],"analyzedSha":"03255a9237b6eb32710f6bc4f2de9a675b99fe36","analyzedAt":"2026-08-07T00:29:34.215Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}