fix(common.opcua): parse full range of status codes with uint32 (#12376)

This commit is contained in:
Sylvain Bruyère 2022-12-12 17:54:21 +01:00 committed by GitHub
parent c6663aca4f
commit 35b5476c83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 4 deletions

View File

@ -138,11 +138,11 @@ func (o *OpcUAClient) setupOptions() error {
func (o *OpcUAClient) setupWorkarounds() error { func (o *OpcUAClient) setupWorkarounds() error {
o.codes = []ua.StatusCode{ua.StatusOK} o.codes = []ua.StatusCode{ua.StatusOK}
for _, c := range o.Config.Workarounds.AdditionalValidStatusCodes { for _, c := range o.Config.Workarounds.AdditionalValidStatusCodes {
val, err := strconv.ParseInt(c, 0, 32) // setting 32 bits to allow for safe conversion val, err := strconv.ParseUint(c, 0, 32) // setting 32 bits to allow for safe conversion
if err != nil { if err != nil {
return err return err
} }
o.codes = append(o.codes, ua.StatusCode(uint32(val))) o.codes = append(o.codes, ua.StatusCode(val))
} }
return nil return nil

View File

@ -10,7 +10,7 @@ func TestSetupWorkarounds(t *testing.T) {
o := OpcUAClient{ o := OpcUAClient{
Config: &OpcUAClientConfig{ Config: &OpcUAClientConfig{
Workarounds: OpcUAWorkarounds{ Workarounds: OpcUAWorkarounds{
AdditionalValidStatusCodes: []string{"0xC0", "0x00AA0000"}, AdditionalValidStatusCodes: []string{"0xC0", "0x00AA0000", "0x80000000"},
}, },
}, },
} }
@ -18,10 +18,11 @@ func TestSetupWorkarounds(t *testing.T) {
err := o.setupWorkarounds() err := o.setupWorkarounds()
require.NoError(t, err) require.NoError(t, err)
require.Len(t, o.codes, 3) require.Len(t, o.codes, 4)
require.Equal(t, o.codes[0], ua.StatusCode(0)) require.Equal(t, o.codes[0], ua.StatusCode(0))
require.Equal(t, o.codes[1], ua.StatusCode(192)) require.Equal(t, o.codes[1], ua.StatusCode(192))
require.Equal(t, o.codes[2], ua.StatusCode(11141120)) require.Equal(t, o.codes[2], ua.StatusCode(11141120))
require.Equal(t, o.codes[3], ua.StatusCode(2147483648))
} }
func TestCheckStatusCode(t *testing.T) { func TestCheckStatusCode(t *testing.T) {