github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/analysis/passes/unmarshal/testdata/src/a/a.go (about)

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // This file contains tests for the unmarshal checker.
     6  
     7  package testdata
     8  
     9  import (
    10  	"encoding/asn1"
    11  	"encoding/gob"
    12  	"encoding/json"
    13  	"encoding/xml"
    14  	"io"
    15  )
    16  
    17  func _() {
    18  	type t struct {
    19  		a int
    20  	}
    21  	var v t
    22  	var r io.Reader
    23  
    24  	json.Unmarshal([]byte{}, v) // want "call of Unmarshal passes non-pointer as second argument"
    25  	json.Unmarshal([]byte{}, &v)
    26  	json.NewDecoder(r).Decode(v) // want "call of Decode passes non-pointer"
    27  	json.NewDecoder(r).Decode(&v)
    28  	gob.NewDecoder(r).Decode(v) // want "call of Decode passes non-pointer"
    29  	gob.NewDecoder(r).Decode(&v)
    30  	xml.Unmarshal([]byte{}, v) // want "call of Unmarshal passes non-pointer as second argument"
    31  	xml.Unmarshal([]byte{}, &v)
    32  	xml.NewDecoder(r).Decode(v) // want "call of Decode passes non-pointer"
    33  	xml.NewDecoder(r).Decode(&v)
    34  	asn1.Unmarshal([]byte{}, v) // want "call of Unmarshal passes non-pointer as second argument"
    35  	asn1.Unmarshal([]byte{}, &v)
    36  
    37  	var p *t
    38  	json.Unmarshal([]byte{}, p)
    39  	json.Unmarshal([]byte{}, *p) // want "call of Unmarshal passes non-pointer as second argument"
    40  	json.NewDecoder(r).Decode(p)
    41  	json.NewDecoder(r).Decode(*p) // want "call of Decode passes non-pointer"
    42  	gob.NewDecoder(r).Decode(p)
    43  	gob.NewDecoder(r).Decode(*p) // want "call of Decode passes non-pointer"
    44  	xml.Unmarshal([]byte{}, p)
    45  	xml.Unmarshal([]byte{}, *p) // want "call of Unmarshal passes non-pointer as second argument"
    46  	xml.NewDecoder(r).Decode(p)
    47  	xml.NewDecoder(r).Decode(*p) // want "call of Decode passes non-pointer"
    48  	asn1.Unmarshal([]byte{}, p)
    49  	asn1.Unmarshal([]byte{}, *p) // want "call of Unmarshal passes non-pointer as second argument"
    50  
    51  	var i interface{}
    52  	json.Unmarshal([]byte{}, i)
    53  	json.NewDecoder(r).Decode(i)
    54  
    55  	json.Unmarshal([]byte{}, nil)               // want "call of Unmarshal passes non-pointer as second argument"
    56  	json.Unmarshal([]byte{}, []t{})             // want "call of Unmarshal passes non-pointer as second argument"
    57  	json.Unmarshal([]byte{}, map[string]int{})  // want "call of Unmarshal passes non-pointer as second argument"
    58  	json.NewDecoder(r).Decode(nil)              // want "call of Decode passes non-pointer"
    59  	json.NewDecoder(r).Decode([]t{})            // want "call of Decode passes non-pointer"
    60  	json.NewDecoder(r).Decode(map[string]int{}) // want "call of Decode passes non-pointer"
    61  
    62  	json.Unmarshal(func() ([]byte, interface{}) { return []byte{}, v }())
    63  }