// Code generated by kaitai-struct-compiler from a .ksy source file. DO NOT EDIT. import "github.com/kaitai-io/kaitai_struct_go_runtime/kaitai" /** * Python Pickle format serializes Python objects to a byte stream, as a sequence * of operations to run on the Pickle Virtual Machine. * * The format is mostly implementation defined, there is no formal specification. * Pickle data types are closely coupled to the Python object model. * Python singletons, and most builtin types (e.g. `None`, `int`,`dict`, `list`) * are serialised using dedicated Pickle opcodes. * Other builtin types, and all classes (e.g. `set`, `datetime.datetime`) are * serialised by encoding the name of a constructor callable. * They are deserialised by importing that constructor, and calling it. * So, unpickling an arbitrary pickle, using the Python's stdlib pickle module * can cause arbitrary code execution. * * Pickle format has evolved with Python, later protocols add opcodes & types. * Later Python releases can pickle to or unpickle from any earlier protocol. * * * Protocol 0: ASCII clean, no explicit version, fields are '\n' terminated. * * Protocol 1: Binary, no explicit version, first length prefixed types. * * Protocol 2 ([PEP 307](https://peps.python.org/pep-0307/)): Python 2.3+. * Explicit versioning, more length prefixed types. * * Protocol 3: Python 3.0+. Dedicated opcodes for `bytes` objects. * * Protocol 4 ([PEP 3154](https://peps.python.org/pep-3154/)): Python 3.4+. * Opcodes for 64 bit strings, framing, `set`. * * Protocol 5 ([PEP 574](https://peps.python.org/pep-0574/)): Python 3.8+: * Opcodes for `bytearray` and out of band data * @see Source */ type PythonPickle_Opcode int const ( PythonPickle_Opcode__Mark PythonPickle_Opcode = 40 PythonPickle_Opcode__EmptyTuple PythonPickle_Opcode = 41 PythonPickle_Opcode__Stop PythonPickle_Opcode = 46 PythonPickle_Opcode__Pop PythonPickle_Opcode = 48 PythonPickle_Opcode__PopMark PythonPickle_Opcode = 49 PythonPickle_Opcode__Dup PythonPickle_Opcode = 50 PythonPickle_Opcode__Binbytes PythonPickle_Opcode = 66 PythonPickle_Opcode__ShortBinbytes PythonPickle_Opcode = 67 PythonPickle_Opcode__Float PythonPickle_Opcode = 70 PythonPickle_Opcode__Binfloat PythonPickle_Opcode = 71 PythonPickle_Opcode__Int PythonPickle_Opcode = 73 PythonPickle_Opcode__Binint PythonPickle_Opcode = 74 PythonPickle_Opcode__Binint1 PythonPickle_Opcode = 75 PythonPickle_Opcode__Long PythonPickle_Opcode = 76 PythonPickle_Opcode__Binint2 PythonPickle_Opcode = 77 PythonPickle_Opcode__None PythonPickle_Opcode = 78 PythonPickle_Opcode__Persid PythonPickle_Opcode = 80 PythonPickle_Opcode__Binpersid PythonPickle_Opcode = 81 PythonPickle_Opcode__Reduce PythonPickle_Opcode = 82 PythonPickle_Opcode__String PythonPickle_Opcode = 83 PythonPickle_Opcode__Binstring PythonPickle_Opcode = 84 PythonPickle_Opcode__ShortBinstring PythonPickle_Opcode = 85 PythonPickle_Opcode__Unicode PythonPickle_Opcode = 86 PythonPickle_Opcode__Binunicode PythonPickle_Opcode = 88 PythonPickle_Opcode__EmptyList PythonPickle_Opcode = 93 PythonPickle_Opcode__Append PythonPickle_Opcode = 97 PythonPickle_Opcode__Build PythonPickle_Opcode = 98 PythonPickle_Opcode__GlobalOpcode PythonPickle_Opcode = 99 PythonPickle_Opcode__Dict PythonPickle_Opcode = 100 PythonPickle_Opcode__Appends PythonPickle_Opcode = 101 PythonPickle_Opcode__Get PythonPickle_Opcode = 103 PythonPickle_Opcode__Binget PythonPickle_Opcode = 104 PythonPickle_Opcode__Inst PythonPickle_Opcode = 105 PythonPickle_Opcode__LongBinget PythonPickle_Opcode = 106 PythonPickle_Opcode__List PythonPickle_Opcode = 108 PythonPickle_Opcode__Obj PythonPickle_Opcode = 111 PythonPickle_Opcode__Put PythonPickle_Opcode = 112 PythonPickle_Opcode__Binput PythonPickle_Opcode = 113 PythonPickle_Opcode__LongBinput PythonPickle_Opcode = 114 PythonPickle_Opcode__Setitem PythonPickle_Opcode = 115 PythonPickle_Opcode__Tuple PythonPickle_Opcode = 116 PythonPickle_Opcode__Setitems PythonPickle_Opcode = 117 PythonPickle_Opcode__EmptyDict PythonPickle_Opcode = 125 PythonPickle_Opcode__Proto PythonPickle_Opcode = 128 PythonPickle_Opcode__Newobj PythonPickle_Opcode = 129 PythonPickle_Opcode__Ext1 PythonPickle_Opcode = 130 PythonPickle_Opcode__Ext2 PythonPickle_Opcode = 131 PythonPickle_Opcode__Ext4 PythonPickle_Opcode = 132 PythonPickle_Opcode__Tuple1 PythonPickle_Opcode = 133 PythonPickle_Opcode__Tuple2 PythonPickle_Opcode = 134 PythonPickle_Opcode__Tuple3 PythonPickle_Opcode = 135 PythonPickle_Opcode__Newtrue PythonPickle_Opcode = 136 PythonPickle_Opcode__Newfalse PythonPickle_Opcode = 137 PythonPickle_Opcode__Long1 PythonPickle_Opcode = 138 PythonPickle_Opcode__Long4 PythonPickle_Opcode = 139 PythonPickle_Opcode__ShortBinunicode PythonPickle_Opcode = 140 PythonPickle_Opcode__Binunicode8 PythonPickle_Opcode = 141 PythonPickle_Opcode__Binbytes8 PythonPickle_Opcode = 142 PythonPickle_Opcode__EmptySet PythonPickle_Opcode = 143 PythonPickle_Opcode__Additems PythonPickle_Opcode = 144 PythonPickle_Opcode__Frozenset PythonPickle_Opcode = 145 PythonPickle_Opcode__NewobjEx PythonPickle_Opcode = 146 PythonPickle_Opcode__StackGlobal PythonPickle_Opcode = 147 PythonPickle_Opcode__Memoize PythonPickle_Opcode = 148 PythonPickle_Opcode__Frame PythonPickle_Opcode = 149 PythonPickle_Opcode__Bytearray8 PythonPickle_Opcode = 150 PythonPickle_Opcode__NextBuffer PythonPickle_Opcode = 151 PythonPickle_Opcode__ReadonlyBuffer PythonPickle_Opcode = 152 ) type PythonPickle struct { Ops []*PythonPickle_Op _io *kaitai.Stream _root *PythonPickle _parent interface{} } func NewPythonPickle() *PythonPickle { return &PythonPickle{ } } func (this *PythonPickle) Read(io *kaitai.Stream, parent interface{}, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root for i := 1;; i++ { tmp1 := NewPythonPickle_Op() err = tmp1.Read(this._io, this, this._root) if err != nil { return err } _it := tmp1 this.Ops = append(this.Ops, _it) if _it.Code == PythonPickle_Opcode__Stop { break } } return err } /** * Length prefixed string, between 0 and 2**64-1 bytes long. * * Only a 64-bit build of Python would produce a pickle containing strings * large enough to need this type. Such a pickle could not be unpickled on * a 32-bit build of Python, because the string would be larger than * `sys.maxsize`. */ type PythonPickle_Unicodestring8 struct { Len uint64 Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Unicodestring8() *PythonPickle_Unicodestring8 { return &PythonPickle_Unicodestring8{ } } func (this *PythonPickle_Unicodestring8) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp2, err := this._io.ReadU8le() if err != nil { return err } this.Len = uint64(tmp2) tmp3, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp3 = tmp3 this.Val = string(tmp3) return err } /** * Large signed integer, in the range -2**(8*255-1) to 2**(8*255-1)-1, * encoded as two's complement. */ type PythonPickle_Long1 struct { Len uint8 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Long1() *PythonPickle_Long1 { return &PythonPickle_Long1{ } } func (this *PythonPickle_Long1) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp4, err := this._io.ReadU1() if err != nil { return err } this.Len = tmp4 tmp5, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp5 = tmp5 this.Val = tmp5 return err } /** * Length prefixed string, between 0 and 2**64-1 bytes long. * * Only a 64-bit build of Python would produce a pickle containing strings * large enough to need this type. Such a pickle could not be unpickled on * a 32-bit build of Python, because the string would be larger than * `sys.maxsize`. */ type PythonPickle_Bytes8 struct { Len uint64 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Bytes8() *PythonPickle_Bytes8 { return &PythonPickle_Bytes8{ } } func (this *PythonPickle_Bytes8) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp6, err := this._io.ReadU8le() if err != nil { return err } this.Len = uint64(tmp6) tmp7, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp7 = tmp7 this.Val = tmp7 return err } /** * Length prefixed byte string, between 0 and 255 bytes long. */ type PythonPickle_Bytes1 struct { Len uint8 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Bytes1() *PythonPickle_Bytes1 { return &PythonPickle_Bytes1{ } } func (this *PythonPickle_Bytes1) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp8, err := this._io.ReadU1() if err != nil { return err } this.Len = tmp8 tmp9, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp9 = tmp9 this.Val = tmp9 return err } /** * Length prefixed string, between 0 and 2**32-1 bytes long */ type PythonPickle_Bytes4 struct { Len uint32 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Bytes4() *PythonPickle_Bytes4 { return &PythonPickle_Bytes4{ } } func (this *PythonPickle_Bytes4) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp10, err := this._io.ReadU4le() if err != nil { return err } this.Len = uint32(tmp10) tmp11, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp11 = tmp11 this.Val = tmp11 return err } /** * Some opcodes take no argument, this empty type is used for them. */ type PythonPickle_NoArg struct { _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_NoArg() *PythonPickle_NoArg { return &PythonPickle_NoArg{ } } func (this *PythonPickle_NoArg) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root return err } /** * Unquoted string, does not contain string escapes. */ type PythonPickle_StringnlNoescape struct { Val string _io *kaitai.Stream _root *PythonPickle _parent interface{} } func NewPythonPickle_StringnlNoescape() *PythonPickle_StringnlNoescape { return &PythonPickle_StringnlNoescape{ } } func (this *PythonPickle_StringnlNoescape) Read(io *kaitai.Stream, parent interface{}, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp12, err := this._io.ReadBytesTerm(10, false, true, true) if err != nil { return err } this.Val = string(tmp12) return err } /** * Integer, encoded with the ASCII chracters [0-9-], followed by 'L'. */ type PythonPickle_DecimalnlLong struct { Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_DecimalnlLong() *PythonPickle_DecimalnlLong { return &PythonPickle_DecimalnlLong{ } } func (this *PythonPickle_DecimalnlLong) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp13, err := this._io.ReadBytesTerm(10, false, true, true) if err != nil { return err } this.Val = string(tmp13) return err } /** * Length prefixed string, between 0 and 2**32-1 bytes long */ type PythonPickle_Unicodestring4 struct { Len uint32 Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Unicodestring4() *PythonPickle_Unicodestring4 { return &PythonPickle_Unicodestring4{ } } func (this *PythonPickle_Unicodestring4) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp14, err := this._io.ReadU4le() if err != nil { return err } this.Len = uint32(tmp14) tmp15, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp15 = tmp15 this.Val = string(tmp15) return err } /** * Unquoted string, containing Python Unicode escapes. */ type PythonPickle_Unicodestringnl struct { Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Unicodestringnl() *PythonPickle_Unicodestringnl { return &PythonPickle_Unicodestringnl{ } } func (this *PythonPickle_Unicodestringnl) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp16, err := this._io.ReadBytesTerm(10, false, true, true) if err != nil { return err } this.Val = string(tmp16) return err } /** * Large signed integer, in the range -2**(8*2**32-1) to 2**(8*2**32-1)-1, * encoded as two's complement. */ type PythonPickle_Long4 struct { Len uint32 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Long4() *PythonPickle_Long4 { return &PythonPickle_Long4{ } } func (this *PythonPickle_Long4) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp17, err := this._io.ReadU4le() if err != nil { return err } this.Len = uint32(tmp17) tmp18, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp18 = tmp18 this.Val = tmp18 return err } /** * Length prefixed string, between 0 and 255 bytes long. Encoding is * unspecified. * * The default Python 2.x string type (`str`) is a sequence of bytes. * These are pickled as `string1` or `string4`, when protocol == 2. * The bytes are written directly, no explicit encoding is performed. * * Python 3.x will not pickle an object as `string1` or `string4`. * Instead, opcodes and types with a known encoding are used. * When unpickling * * - `pickle.Unpickler` objects default to ASCII, which can be overriden * - `pickletools.dis` uses latin1, and cannot be overriden * @see Source */ type PythonPickle_String1 struct { Len uint8 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_String1() *PythonPickle_String1 { return &PythonPickle_String1{ } } func (this *PythonPickle_String1) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp19, err := this._io.ReadU1() if err != nil { return err } this.Len = tmp19 tmp20, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp20 = tmp20 this.Val = tmp20 return err } /** * Length prefixed string, between 0 and 2**64-1 bytes long. * * The contents are deserilised into a `bytearray` object. */ type PythonPickle_Bytearray8 struct { Len uint64 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Bytearray8() *PythonPickle_Bytearray8 { return &PythonPickle_Bytearray8{ } } func (this *PythonPickle_Bytearray8) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp21, err := this._io.ReadU8le() if err != nil { return err } this.Len = uint64(tmp21) tmp22, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp22 = tmp22 this.Val = tmp22 return err } /** * Integer or boolean, encoded with the ASCII characters [0-9-]. * * The values '00' and '01' encode the Python values `False` and `True`. * Normally a value would not contain leading '0' characters. */ type PythonPickle_DecimalnlShort struct { Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_DecimalnlShort() *PythonPickle_DecimalnlShort { return &PythonPickle_DecimalnlShort{ } } func (this *PythonPickle_DecimalnlShort) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp23, err := this._io.ReadBytesTerm(10, false, true, true) if err != nil { return err } this.Val = string(tmp23) return err } /** * Length prefixed string, between 0 and 255 bytes long */ type PythonPickle_Unicodestring1 struct { Len uint8 Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Unicodestring1() *PythonPickle_Unicodestring1 { return &PythonPickle_Unicodestring1{ } } func (this *PythonPickle_Unicodestring1) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp24, err := this._io.ReadU1() if err != nil { return err } this.Len = tmp24 tmp25, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp25 = tmp25 this.Val = string(tmp25) return err } /** * Quoted string, possibly containing Python string escapes. */ type PythonPickle_Stringnl struct { Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Stringnl() *PythonPickle_Stringnl { return &PythonPickle_Stringnl{ } } func (this *PythonPickle_Stringnl) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp26, err := this._io.ReadBytesTerm(10, false, true, true) if err != nil { return err } this.Val = string(tmp26) return err } /** * Pair of unquoted, unescaped strings. */ type PythonPickle_StringnlNoescapePair struct { Val1 *PythonPickle_StringnlNoescape Val2 *PythonPickle_StringnlNoescape _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_StringnlNoescapePair() *PythonPickle_StringnlNoescapePair { return &PythonPickle_StringnlNoescapePair{ } } func (this *PythonPickle_StringnlNoescapePair) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp27 := NewPythonPickle_StringnlNoescape() err = tmp27.Read(this._io, this, this._root) if err != nil { return err } this.Val1 = tmp27 tmp28 := NewPythonPickle_StringnlNoescape() err = tmp28.Read(this._io, this, this._root) if err != nil { return err } this.Val2 = tmp28 return err } /** * Length prefixed string, between 0 and 2**31-1 bytes long. Encoding is * unspecified. * * Although the len field is signed, any length < 0 will raise an exception * during unpickling. * * See the documentation for `string1` for further detail about encodings. * @see Source */ type PythonPickle_String4 struct { Len int32 Val []byte _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_String4() *PythonPickle_String4 { return &PythonPickle_String4{ } } func (this *PythonPickle_String4) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp29, err := this._io.ReadS4le() if err != nil { return err } this.Len = int32(tmp29) tmp30, err := this._io.ReadBytes(int(this.Len)) if err != nil { return err } tmp30 = tmp30 this.Val = tmp30 return err } type PythonPickle_Op struct { Code PythonPickle_Opcode Arg interface{} _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle } func NewPythonPickle_Op() *PythonPickle_Op { return &PythonPickle_Op{ } } func (this *PythonPickle_Op) Read(io *kaitai.Stream, parent *PythonPickle, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp31, err := this._io.ReadU1() if err != nil { return err } this.Code = PythonPickle_Opcode(tmp31) switch (this.Code) { case PythonPickle_Opcode__Ext4: tmp32, err := this._io.ReadU4le() if err != nil { return err } this.Arg = tmp32 case PythonPickle_Opcode__Tuple1: tmp33 := NewPythonPickle_NoArg() err = tmp33.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp33 case PythonPickle_Opcode__Setitem: tmp34 := NewPythonPickle_NoArg() err = tmp34.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp34 case PythonPickle_Opcode__ReadonlyBuffer: tmp35 := NewPythonPickle_NoArg() err = tmp35.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp35 case PythonPickle_Opcode__Stop: tmp36 := NewPythonPickle_NoArg() err = tmp36.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp36 case PythonPickle_Opcode__Ext2: tmp37, err := this._io.ReadU2le() if err != nil { return err } this.Arg = tmp37 case PythonPickle_Opcode__EmptyTuple: tmp38 := NewPythonPickle_NoArg() err = tmp38.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp38 case PythonPickle_Opcode__Newtrue: tmp39 := NewPythonPickle_NoArg() err = tmp39.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp39 case PythonPickle_Opcode__Long: tmp40 := NewPythonPickle_DecimalnlLong() err = tmp40.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp40 case PythonPickle_Opcode__Newobj: tmp41 := NewPythonPickle_NoArg() err = tmp41.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp41 case PythonPickle_Opcode__Bytearray8: tmp42 := NewPythonPickle_Bytearray8() err = tmp42.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp42 case PythonPickle_Opcode__Put: tmp43 := NewPythonPickle_DecimalnlShort() err = tmp43.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp43 case PythonPickle_Opcode__StackGlobal: tmp44 := NewPythonPickle_NoArg() err = tmp44.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp44 case PythonPickle_Opcode__PopMark: tmp45 := NewPythonPickle_NoArg() err = tmp45.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp45 case PythonPickle_Opcode__Append: tmp46 := NewPythonPickle_NoArg() err = tmp46.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp46 case PythonPickle_Opcode__Newfalse: tmp47 := NewPythonPickle_NoArg() err = tmp47.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp47 case PythonPickle_Opcode__Binpersid: tmp48 := NewPythonPickle_NoArg() err = tmp48.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp48 case PythonPickle_Opcode__Build: tmp49 := NewPythonPickle_NoArg() err = tmp49.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp49 case PythonPickle_Opcode__EmptyDict: tmp50 := NewPythonPickle_NoArg() err = tmp50.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp50 case PythonPickle_Opcode__Tuple2: tmp51 := NewPythonPickle_NoArg() err = tmp51.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp51 case PythonPickle_Opcode__Long4: tmp52 := NewPythonPickle_Long4() err = tmp52.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp52 case PythonPickle_Opcode__NextBuffer: tmp53 := NewPythonPickle_NoArg() err = tmp53.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp53 case PythonPickle_Opcode__Appends: tmp54 := NewPythonPickle_NoArg() err = tmp54.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp54 case PythonPickle_Opcode__Binbytes: tmp55 := NewPythonPickle_Bytes4() err = tmp55.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp55 case PythonPickle_Opcode__Dup: tmp56 := NewPythonPickle_NoArg() err = tmp56.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp56 case PythonPickle_Opcode__List: tmp57 := NewPythonPickle_NoArg() err = tmp57.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp57 case PythonPickle_Opcode__Proto: tmp58, err := this._io.ReadU1() if err != nil { return err } this.Arg = tmp58 case PythonPickle_Opcode__Pop: tmp59 := NewPythonPickle_NoArg() err = tmp59.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp59 case PythonPickle_Opcode__Frame: tmp60, err := this._io.ReadU8le() if err != nil { return err } this.Arg = tmp60 case PythonPickle_Opcode__String: tmp61 := NewPythonPickle_Stringnl() err = tmp61.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp61 case PythonPickle_Opcode__Binunicode: tmp62 := NewPythonPickle_Unicodestring4() err = tmp62.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp62 case PythonPickle_Opcode__Float: tmp63 := NewPythonPickle_Floatnl() err = tmp63.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp63 case PythonPickle_Opcode__Reduce: tmp64 := NewPythonPickle_NoArg() err = tmp64.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp64 case PythonPickle_Opcode__GlobalOpcode: tmp65 := NewPythonPickle_StringnlNoescapePair() err = tmp65.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp65 case PythonPickle_Opcode__Binput: tmp66, err := this._io.ReadU1() if err != nil { return err } this.Arg = tmp66 case PythonPickle_Opcode__Memoize: tmp67 := NewPythonPickle_NoArg() err = tmp67.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp67 case PythonPickle_Opcode__Persid: tmp68 := NewPythonPickle_StringnlNoescape() err = tmp68.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp68 case PythonPickle_Opcode__Ext1: tmp69, err := this._io.ReadU1() if err != nil { return err } this.Arg = tmp69 case PythonPickle_Opcode__None: tmp70 := NewPythonPickle_NoArg() err = tmp70.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp70 case PythonPickle_Opcode__ShortBinunicode: tmp71 := NewPythonPickle_Unicodestring1() err = tmp71.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp71 case PythonPickle_Opcode__Obj: tmp72 := NewPythonPickle_NoArg() err = tmp72.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp72 case PythonPickle_Opcode__Binfloat: tmp73, err := this._io.ReadF8be() if err != nil { return err } this.Arg = tmp73 case PythonPickle_Opcode__NewobjEx: tmp74 := NewPythonPickle_NoArg() err = tmp74.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp74 case PythonPickle_Opcode__EmptyList: tmp75 := NewPythonPickle_NoArg() err = tmp75.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp75 case PythonPickle_Opcode__Tuple: tmp76 := NewPythonPickle_NoArg() err = tmp76.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp76 case PythonPickle_Opcode__Binunicode8: tmp77 := NewPythonPickle_Unicodestring8() err = tmp77.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp77 case PythonPickle_Opcode__Binget: tmp78, err := this._io.ReadU1() if err != nil { return err } this.Arg = tmp78 case PythonPickle_Opcode__Dict: tmp79 := NewPythonPickle_NoArg() err = tmp79.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp79 case PythonPickle_Opcode__Binstring: tmp80 := NewPythonPickle_String4() err = tmp80.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp80 case PythonPickle_Opcode__Setitems: tmp81 := NewPythonPickle_NoArg() err = tmp81.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp81 case PythonPickle_Opcode__Binint2: tmp82, err := this._io.ReadU2le() if err != nil { return err } this.Arg = tmp82 case PythonPickle_Opcode__Binbytes8: tmp83 := NewPythonPickle_Bytes8() err = tmp83.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp83 case PythonPickle_Opcode__Binint1: tmp84, err := this._io.ReadU1() if err != nil { return err } this.Arg = tmp84 case PythonPickle_Opcode__Inst: tmp85 := NewPythonPickle_StringnlNoescapePair() err = tmp85.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp85 case PythonPickle_Opcode__LongBinget: tmp86, err := this._io.ReadU4le() if err != nil { return err } this.Arg = tmp86 case PythonPickle_Opcode__LongBinput: tmp87, err := this._io.ReadU4le() if err != nil { return err } this.Arg = tmp87 case PythonPickle_Opcode__Int: tmp88 := NewPythonPickle_DecimalnlShort() err = tmp88.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp88 case PythonPickle_Opcode__Binint: tmp89, err := this._io.ReadS4le() if err != nil { return err } this.Arg = tmp89 case PythonPickle_Opcode__Unicode: tmp90 := NewPythonPickle_Unicodestringnl() err = tmp90.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp90 case PythonPickle_Opcode__Long1: tmp91 := NewPythonPickle_Long1() err = tmp91.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp91 case PythonPickle_Opcode__ShortBinstring: tmp92 := NewPythonPickle_String1() err = tmp92.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp92 case PythonPickle_Opcode__Mark: tmp93 := NewPythonPickle_NoArg() err = tmp93.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp93 case PythonPickle_Opcode__Frozenset: tmp94 := NewPythonPickle_NoArg() err = tmp94.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp94 case PythonPickle_Opcode__Tuple3: tmp95 := NewPythonPickle_NoArg() err = tmp95.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp95 case PythonPickle_Opcode__Additems: tmp96 := NewPythonPickle_NoArg() err = tmp96.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp96 case PythonPickle_Opcode__Get: tmp97 := NewPythonPickle_DecimalnlShort() err = tmp97.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp97 case PythonPickle_Opcode__EmptySet: tmp98 := NewPythonPickle_NoArg() err = tmp98.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp98 case PythonPickle_Opcode__ShortBinbytes: tmp99 := NewPythonPickle_Bytes1() err = tmp99.Read(this._io, this, this._root) if err != nil { return err } this.Arg = tmp99 } return err } /** * Operation code that determines which action should be * performed next by the Pickle Virtual Machine. Some opcodes * are only available in later versions of the Pickle protocol. */ /** * Optional argument for the operation. Data type and length * are determined by the value of the opcode. */ /** * Double float, encoded with the ASCII characters [0-9.e+-], '-inf', 'inf', * or 'nan'. */ type PythonPickle_Floatnl struct { Val string _io *kaitai.Stream _root *PythonPickle _parent *PythonPickle_Op } func NewPythonPickle_Floatnl() *PythonPickle_Floatnl { return &PythonPickle_Floatnl{ } } func (this *PythonPickle_Floatnl) Read(io *kaitai.Stream, parent *PythonPickle_Op, root *PythonPickle) (err error) { this._io = io this._parent = parent this._root = root tmp100, err := this._io.ReadBytesTerm(10, false, true, true) if err != nil { return err } this.Val = string(tmp100) return err }