From a2a59cd747bb4c8c46b80a601f64213058e1b0de Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Thu, 11 Jan 2024 14:01:57 +0100 Subject: [PATCH] 2253306 - golang-github-openprinting-goipp-1.1.0 is available --- .gitignore | 1 + golang-github-openprinting-goipp.spec | 13 +- pantum-workaround-revert.patch | 522 ++++++++++++++++++++++++++ sources | 2 +- 4 files changed, 535 insertions(+), 3 deletions(-) create mode 100644 pantum-workaround-revert.patch diff --git a/.gitignore b/.gitignore index 47ec4e1..2e4820d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /goipp-1.0.0.tar.gz +/goipp-1.1.0.tar.gz diff --git a/golang-github-openprinting-goipp.spec b/golang-github-openprinting-goipp.spec index e0cedc1..69f1d8a 100644 --- a/golang-github-openprinting-goipp.spec +++ b/golang-github-openprinting-goipp.spec @@ -3,7 +3,7 @@ # https://github.com/OpenPrinting/goipp %global goipath github.com/OpenPrinting/goipp -Version: 1.0.0 +Version: 1.1.0 %gometa @@ -14,7 +14,7 @@ Package goipp implements the IPP core protocol in pure Go (RFC 8010).} %global godocs README.md index.md Name: %{goname} -Release: 9%{?dist} +Release: 1%{?dist} Summary: IPP core protocol in pure Go (RFC 8010) # Upstream license specification: BSD-2-Clause @@ -22,6 +22,11 @@ License: BSD-2-Clause URL: %{gourl} Source0: %{gosource} +# reverting the change which introduced support for Pantum printers, which +# broke conformation to IPP standards and has security implications +# https://lore.kernel.org/printing-architecture/b2c6c270-4933-4bde-a299-52802e6e8d88@shentel.net/T/#u +Patch001: pantum-workaround-revert.patch + %description %{common_description} @@ -29,6 +34,7 @@ Source0: %{gosource} %prep %goprep +%autopatch %install %gopkginstall @@ -41,6 +47,9 @@ Source0: %{gosource} %gopkgfiles %changelog +* Thu Jan 11 2024 Zdenek Dohnal - 1.1.0-1 +- 2253306 - golang-github-openprinting-goipp-1.1.0 is available + * Thu Nov 23 2023 Zdenek Dohnal - 1.0.0-9 - Rebuild for any CVE fixes in golang diff --git a/pantum-workaround-revert.patch b/pantum-workaround-revert.patch new file mode 100644 index 0000000..2a6fc9a --- /dev/null +++ b/pantum-workaround-revert.patch @@ -0,0 +1,522 @@ +diff --git a/decoder.go b/decoder.go +index ed81ab0..89e46a1 100644 +--- a/decoder.go ++++ b/decoder.go +@@ -15,27 +15,11 @@ import ( + "io" + ) + +-// DecoderOptions represents message decoder options +-type DecoderOptions struct { +- // EnableWorkarounds, if set to true, enables various workarounds +- // for decoding IPP messages that violate IPP protocol specification +- // +- // Currently it includes the following workarounds: +- // * Pantum M7300FDW violates collection encoding rules. +- // Instead of using TagMemberName, it uses named attributes +- // within the collection +- // +- // The list of implemented workarounds may grow in the +- // future +- EnableWorkarounds bool +-} +- +-// messageDecoder represents Message decoder ++// Type messageDecoder represents Message decoder + type messageDecoder struct { +- in io.Reader // Input stream +- off int // Offset of last read +- cnt int // Count of read bytes +- opt DecoderOptions // Options ++ in io.Reader // Input stream ++ off int // Offset of last read ++ cnt int // Count of read bytes + } + + // Decode the message +@@ -166,35 +150,9 @@ func (md *messageDecoder) decode(m *Message) error { + } + + // Decode a Collection +-// +-// Collection is like a nested object - an attribute which value is a sequence +-// of named attributes. Collections can be nested. +-// +-// Wire format: +-// ATTR: Tag = TagBeginCollection, - the outer attribute that +-// Name = "name", value - ignored contains the collection +-// +-// ATTR: Tag = TagMemberName, name = "", - member name \ +-// value - string, name of the next | +-// member | repeated for +-// | each member +-// ATTR: Tag = any attribute tag, name = "", - repeated for | +-// value = member value multi-value / +-// members +-// +-// ATTR: Tag = TagEndCollection, name = "", +-// value - ignored +-// +-// The format looks a bit baroque, but please note that it was added +-// in the IPP 2.0. For IPP 1.x collection looks like a single multi-value +-// TagBeginCollection attribute (attributes without names considered +-// next value for the previously defined named attributes) and so +-// 1.x parser silently ignores collections and doesn't get confused +-// with them. + func (md *messageDecoder) decodeCollection() (Collection, error) { + collection := make(Collection, 0) +- +- memberName := "" ++ //var name string + + for { + tag, err := md.decodeTag() +@@ -208,10 +166,16 @@ func (md *messageDecoder) decodeCollection() (Collection, error) { + return nil, err + } + +- // Check for TagMemberName without the subsequent value attribute +- if (tag == TagMemberName || tag == TagEndCollection) && memberName != "" { +- err = fmt.Errorf("Collection: unexpected %s, expected value tag", tag) +- return nil, err ++ // We are about to finish with current attribute (if any), ++ // either because we've got an end of collection, or a next ++ // attribute name. Check that we are leaving the current ++ // attribute in a consistent state (i.e., with at least one value) ++ if tag == TagMemberName || tag == TagEndCollection { ++ l := len(collection) ++ if l > 0 && len(collection[l-1].Values) == 0 { ++ err = fmt.Errorf("collection: unexpected %s, expected value tag", tag) ++ return nil, err ++ } + } + + // Fetch next attribute +@@ -221,48 +185,36 @@ func (md *messageDecoder) decodeCollection() (Collection, error) { + } + + // Process next attribute +- switch tag { +- case TagEndCollection: ++ switch { ++ case tag == TagEndCollection: + return collection, nil + +- case TagMemberName: +- memberName = string(attr.Values[0].V.(String)) +- if memberName == "" { +- err = fmt.Errorf("Collection: %s value is empty", tag) +- return nil, err +- } ++ case tag == TagMemberName: ++ attr.Name = string(attr.Values[0].V.(String)) ++ attr.Values = nil + +- case TagBeginCollection: +- // Decode nested collection +- attr.Values[0].V, err = md.decodeCollection() +- if err != nil { ++ if attr.Name == "" { ++ err = fmt.Errorf("collection: %s contains empty attribute name", tag) + return nil, err + } +- fallthrough ++ ++ collection = append(collection, attr) ++ ++ case len(collection) == 0: ++ // We've got a value without preceding TagMemberName ++ err = fmt.Errorf("collection: unexpected %s, expected %s", tag, TagMemberName) ++ return nil, err + + default: +- if md.opt.EnableWorkarounds && +- memberName == "" && attr.Name != "" { +- // Workaround for: Pantum M7300FDW +- // +- // This device violates collection encoding rules. +- // Instead of using TagMemberName, it uses named +- // attributes within the collection +- memberName = attr.Name ++ if tag == TagBeginCollection { ++ attr.Values[0].V, err = md.decodeCollection() ++ if err != nil { ++ return nil, err ++ } + } + +- if memberName != "" { +- attr.Name = memberName +- collection = append(collection, attr) +- memberName = "" +- } else if len(collection) > 0 { +- l := len(collection) +- collection[l-1].Values.Add(tag, attr.Values[0].V) +- } else { +- // We've got a value without preceding TagMemberName +- err = fmt.Errorf("Collection: unexpected %s, expected %s", tag, TagMemberName) +- return nil, err +- } ++ l := len(collection) ++ collection[l-1].Values.Add(tag, attr.Values[0].V) + } + } + } +@@ -270,7 +222,6 @@ func (md *messageDecoder) decodeCollection() (Collection, error) { + // Decode a tag + func (md *messageDecoder) decodeTag() (Tag, error) { + t, err := md.decodeU8() +- + return Tag(t), err + } + +@@ -287,14 +238,6 @@ func (md *messageDecoder) decodeCode() (Code, error) { + } + + // Decode a single attribute +-// +-// Wire format: +-// 1 byte: Tag +-// 2+N bytes: Name length (2 bytes) + name string +-// 2+N bytes: Value length (2 bytes) + value bytes +-// +-// For the extended tag format, Tag is encoded as TagExtension and +-// 4 bytes of the actual tag value prepended to the value bytes + func (md *messageDecoder) decodeAttribute(tag Tag) (Attribute, error) { + var attr Attribute + var value []byte +diff --git a/goipp_test.go b/goipp_test.go +index 89a4e91..06800e8 100644 +--- a/goipp_test.go ++++ b/goipp_test.go +@@ -562,7 +562,7 @@ func TestDecodeErrors(t *testing.T) { + assertErrorIs(t, err, "Message truncated at") + } + +- d = goodMessage1 ++ d = good_message_1 + for i := 0; i < len(d); i++ { + err = m.DecodeBytes(d[:i]) + assertErrorIs(t, err, "Message truncated at") +@@ -678,7 +678,7 @@ func TestDecodeErrors(t *testing.T) { + + d = append(hdr, body...) + err = m.DecodeBytes(d) +- assertErrorIs(t, err, "Collection: unexpected endCollection, expected value tag") ++ assertErrorIs(t, err, "collection: unexpected endCollection, expected value tag at 0x23") + + // Collection: unexpected memberAttrName, expected value tag + body = []byte{ +@@ -713,7 +713,7 @@ func TestDecodeErrors(t *testing.T) { + + d = append(hdr, body...) + err = m.DecodeBytes(d) +- assertErrorIs(t, err, "Collection: unexpected memberAttrName, expected value tag") ++ assertErrorIs(t, err, "collection: unexpected memberAttrName, expected value tag at 0x24") + + // Collection: memberAttrName value is empty + body = []byte{ +@@ -742,7 +742,7 @@ func TestDecodeErrors(t *testing.T) { + + d = append(hdr, body...) + err = m.DecodeBytes(d) +- assertErrorIs(t, err, "Collection: memberAttrName value is empty") ++ assertErrorIs(t, err, "collection: memberAttrName contains empty attribute name at 0x1d") + + // Collection: unexpected integer, expected memberAttrName + body = []byte{ +@@ -772,7 +772,7 @@ func TestDecodeErrors(t *testing.T) { + + d = append(hdr, body...) + err = m.DecodeBytes(d) +- assertErrorIs(t, err, "Collection: unexpected integer, expected memberAttrName") ++ assertErrorIs(t, err, "collection: unexpected integer, expected memberAttrName at 0x1d") + } + + // Test errors in decoding values +@@ -1066,11 +1066,9 @@ func TestTagExtension(t *testing.T) { + } + + // Test message decoding +-func testDecode(t *testing.T, data []byte, opt DecoderOptions, +- mustFail, mustEncode bool) { +- ++func testDecode(t *testing.T, data []byte, mustFail bool) { + var m Message +- err := m.DecodeEx(bytes.NewBuffer(data), opt) ++ err := m.Decode(bytes.NewBuffer(data)) + + if mustFail { + assertWithError(t, err) +@@ -1082,19 +1080,15 @@ func testDecode(t *testing.T, data []byte, opt DecoderOptions, + return + } + +- //m.Print(os.Stdout, true) +- + if !m.Equal(m) { + t.Errorf("Message is not equal to itself") + } + +- if mustEncode { +- buf, err := m.EncodeBytes() +- assertNoError(t, err) ++ buf, err := m.EncodeBytes() ++ assertNoError(t, err) + +- if !bytes.Equal(buf, data) { +- t.Errorf("Message is not the same after decoding and encoding") +- } ++ if !bytes.Equal(buf, data) { ++ t.Errorf("Message is not the same after decoding and encoding") + } + + // We can't test a lot of (*Message) Print(), so lets test +@@ -1103,34 +1097,24 @@ func testDecode(t *testing.T, data []byte, opt DecoderOptions, + } + + func TestDecodeGoodMessage1(t *testing.T) { +- testDecode(t, goodMessage1, DecoderOptions{}, false, true) ++ testDecode(t, good_message_1, false) + } + + func TestDecodeGoodMessage2(t *testing.T) { +- testDecode(t, goodMessage2, DecoderOptions{}, false, true) ++ testDecode(t, good_message_2, false) + } + + func TestDecodeBadMessage1(t *testing.T) { +- testDecode(t, badMessage1, DecoderOptions{}, true, false) +- testDecode(t, badMessage1, +- DecoderOptions{EnableWorkarounds: true}, false, false) +-} +- +-func TestDecodeHPOfficeJetPro8730(t *testing.T) { +- testDecode(t, attrsHPOfficeJetPro8730, DecoderOptions{}, false, true) ++ testDecode(t, bad_message_1, true) + } + +-func TestDecodePantumM7300FDW(t *testing.T) { +- testDecode(t, attrsPantumM7300FDW, +- DecoderOptions{EnableWorkarounds: false}, true, false) +- +- testDecode(t, attrsPantumM7300FDW, +- DecoderOptions{EnableWorkarounds: true}, false, false) ++func TestDecodeBigMessage(t *testing.T) { ++ testDecode(t, big_message, false) + } + + // ------------------------ Test Data ------------------------ + // The good message - 1 +-var goodMessage1 = []byte{ ++var good_message_1 = []byte{ + 0x01, 0x01, // IPP version + 0x00, 0x02, // Print-Job operation + 0x00, 0x00, 0x00, 0x01, // Request ID +@@ -1289,7 +1273,7 @@ var goodMessage1 = []byte{ + } + + // The good message - 2 +-var goodMessage2 = []byte{ ++var good_message_2 = []byte{ + 0x01, 0x01, // IPP version + 0x00, 0x02, // Print-Job operation + 0x00, 0x00, 0x00, 0x01, // Request ID +@@ -1314,12 +1298,7 @@ var goodMessage2 = []byte{ + } + + // The bad message - 1 +-// +-// This message violates IPP encoding rules: instead of +-// using TagMemberName it uses named attributes +-// +-// It must not decode normally, but must decode with workarounds +-var badMessage1 = []byte{ ++var bad_message_1 = []byte{ + 0x01, 0x01, // IPP version */ + 0x00, 0x02, // Print-Job operation */ + 0x00, 0x00, 0x00, 0x01, // Request ID */ +@@ -1387,7 +1366,7 @@ var badMessage1 = []byte{ + + // The big real example, Get-Printer-Attributes output + // from the HP OfficeJet Pro 8730 +-var attrsHPOfficeJetPro8730 = []byte{ ++var big_message = []byte{ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x47, 0x00, 0x12, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x00, 0x05, + 0x75, 0x74, 0x66, 0x2d, 0x38, 0x48, 0x00, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, +@@ -2355,133 +2334,3 @@ var attrsHPOfficeJetPro8730 = []byte{ + 0x69, 0x70, 0x6c, 0x65, 0x2d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x6a, 0x6f, + 0x62, 0x73, 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x01, 0x00, 0x03, + } +- +-// Get-Printer-Attributes output from Pantum M7300FDW +-var attrsPantumM7300FDW = []byte{ +- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x47, 0x00, 0x12, +- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2d, 0x63, +- 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x00, 0x05, 0x75, 0x74, 0x66, 0x2d, +- 0x38, 0x48, 0x00, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, +- 0x65, 0x73, 0x2d, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x2d, 0x6c, +- 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, 0x05, 0x65, 0x6e, 0x2d, +- 0x55, 0x53, 0x04, 0x22, 0x00, 0x0f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2d, +- 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x01, 0x00, +- 0x49, 0x00, 0x19, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2d, +- 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, +- 0x72, 0x74, 0x65, 0x64, 0x00, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, +- 0x75, 0x72, 0x66, 0x49, 0x00, 0x00, 0x00, 0x10, 0x69, 0x6d, 0x61, 0x67, +- 0x65, 0x2f, 0x70, 0x77, 0x67, 0x2d, 0x72, 0x61, 0x73, 0x74, 0x65, 0x72, +- 0x49, 0x00, 0x00, 0x00, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, +- 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, +- 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x00, 0x10, 0x6d, 0x6f, 0x70, 0x72, +- 0x69, 0x61, 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, +- 0x00, 0x03, 0x31, 0x2e, 0x33, 0x41, 0x00, 0x10, 0x70, 0x72, 0x69, 0x6e, +- 0x74, 0x65, 0x72, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, +- 0x00, 0x0e, 0x70, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x70, 0x72, 0x69, +- 0x6e, 0x74, 0x65, 0x72, 0x41, 0x00, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x74, +- 0x65, 0x72, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x12, 0x50, 0x61, 0x6e, +- 0x74, 0x75, 0x6d, 0x20, 0x49, 0x50, 0x50, 0x20, 0x70, 0x72, 0x69, 0x6e, +- 0x74, 0x65, 0x72, 0x45, 0x00, 0x11, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, +- 0x72, 0x2d, 0x6d, 0x6f, 0x72, 0x65, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x00, +- 0x26, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, +- 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f, +- 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x6a, 0x75, 0x6d, 0x70, 0x2e, 0x68, +- 0x74, 0x6d, 0x6c, 0x41, 0x00, 0x16, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, +- 0x72, 0x2d, 0x6d, 0x61, 0x6b, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x6d, +- 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x16, 0x50, 0x61, 0x6e, 0x74, 0x75, 0x6d, +- 0x20, 0x4d, 0x37, 0x33, 0x30, 0x30, 0x46, 0x44, 0x57, 0x20, 0x53, 0x65, +- 0x72, 0x69, 0x65, 0x73, 0x41, 0x00, 0x11, 0x70, 0x72, 0x69, 0x6e, 0x74, +- 0x65, 0x72, 0x2d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x69, 0x64, +- 0x00, 0x45, 0x4d, 0x46, 0x47, 0x3a, 0x50, 0x61, 0x6e, 0x74, 0x75, 0x6d, +- 0x3b, 0x43, 0x4d, 0x44, 0x3a, 0x3a, 0x44, 0x57, 0x2d, 0x50, 0x53, 0x2c, +- 0x44, 0x57, 0x2d, 0x50, 0x43, 0x4c, 0x2c, 0x55, 0x52, 0x46, 0x3b, 0x4d, +- 0x44, 0x4c, 0x3a, 0x2d, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, +- 0x43, 0x4c, 0x53, 0x3a, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x3b, +- 0x44, 0x45, 0x53, 0x3a, 0x50, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x3b, 0x45, +- 0x00, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, 0x75, 0x75, +- 0x69, 0x64, 0x00, 0x2d, 0x75, 0x72, 0x6e, 0x3a, 0x75, 0x75, 0x69, 0x64, +- 0x3a, 0x30, 0x37, 0x62, 0x63, 0x35, 0x61, 0x34, 0x37, 0x2d, 0x65, 0x64, +- 0x66, 0x32, 0x2d, 0x34, 0x36, 0x36, 0x31, 0x2d, 0x38, 0x37, 0x34, 0x38, +- 0x2d, 0x38, 0x36, 0x32, 0x30, 0x66, 0x37, 0x39, 0x64, 0x34, 0x61, 0x63, +- 0x34, 0x45, 0x00, 0x0d, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, +- 0x69, 0x63, 0x6f, 0x6e, 0x73, 0x00, 0x25, 0x68, 0x74, 0x74, 0x70, 0x3a, +- 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, +- 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x68, +- 0x69, 0x70, 0x34, 0x38, 0x2e, 0x70, 0x6e, 0x67, 0x45, 0x00, 0x00, 0x00, +- 0x26, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, +- 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f, +- 0x66, 0x6c, 0x61, 0x67, 0x73, 0x68, 0x69, 0x70, 0x31, 0x32, 0x38, 0x2e, +- 0x70, 0x6e, 0x67, 0x45, 0x00, 0x00, 0x00, 0x26, 0x68, 0x74, 0x74, 0x70, +- 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, +- 0x3a, 0x36, 0x30, 0x30, 0x30, 0x30, 0x2f, 0x66, 0x6c, 0x61, 0x67, 0x73, +- 0x68, 0x69, 0x70, 0x35, 0x31, 0x32, 0x2e, 0x70, 0x6e, 0x67, 0x42, 0x00, +- 0x13, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, 0x64, 0x6e, 0x73, +- 0x2d, 0x73, 0x64, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x00, 0x1d, 0x50, 0x61, +- 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x4d, 0x37, 0x33, 0x30, 0x30, 0x46, 0x44, +- 0x57, 0x20, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x31, 0x43, 0x36, +- 0x46, 0x43, 0x44, 0x44, 0x00, 0x0d, 0x75, 0x72, 0x66, 0x2d, 0x73, 0x75, +- 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x04, 0x56, 0x31, 0x2e, +- 0x34, 0x44, 0x00, 0x00, 0x00, 0x02, 0x57, 0x38, 0x44, 0x00, 0x00, 0x00, +- 0x03, 0x49, 0x53, 0x31, 0x44, 0x00, 0x00, 0x00, 0x04, 0x43, 0x50, 0x39, +- 0x39, 0x44, 0x00, 0x00, 0x00, 0x03, 0x50, 0x51, 0x34, 0x44, 0x00, 0x00, +- 0x00, 0x04, 0x4f, 0x42, 0x31, 0x30, 0x44, 0x00, 0x00, 0x00, 0x05, 0x52, +- 0x53, 0x36, 0x30, 0x30, 0x44, 0x00, 0x00, 0x00, 0x03, 0x44, 0x4d, 0x31, +- 0x44, 0x00, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2d, 0x6b, +- 0x69, 0x6e, 0x64, 0x00, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, +- 0x74, 0x44, 0x00, 0x00, 0x00, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, +- 0x70, 0x65, 0x34, 0x00, 0x14, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x2d, 0x73, +- 0x69, 0x7a, 0x65, 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, +- 0x64, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, +- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x54, 0x56, 0x21, +- 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, +- 0x6e, 0x00, 0x04, 0x00, 0x00, 0x6d, 0x24, 0x37, 0x00, 0x00, 0x00, 0x00, +- 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, +- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x52, +- 0x08, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, +- 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x74, 0x04, 0x37, 0x00, 0x00, +- 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, +- 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, +- 0x00, 0x39, 0xd0, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, +- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x52, 0x08, 0x37, +- 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, +- 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, +- 0x04, 0x00, 0x00, 0x29, 0x04, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, +- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x39, +- 0xd0, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, +- 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, +- 0x6e, 0x00, 0x04, 0x00, 0x00, 0x2c, 0x88, 0x21, 0x00, 0x0b, 0x79, 0x2d, +- 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, +- 0x00, 0x3f, 0x48, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, +- 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, +- 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x2a, 0xf8, 0x21, 0x00, 0x0b, +- 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, +- 0x04, 0x00, 0x00, 0x55, 0xf0, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, +- 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, +- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x27, 0x10, 0x21, +- 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, +- 0x6e, 0x00, 0x04, 0x00, 0x00, 0x39, 0xd0, 0x37, 0x00, 0x00, 0x00, 0x00, +- 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, +- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x2e, +- 0xe0, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, +- 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x5b, 0xcc, 0x37, 0x00, 0x00, +- 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, 0x78, 0x2d, +- 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, +- 0x00, 0x28, 0xed, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, +- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x5e, 0x42, 0x37, +- 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0b, +- 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, +- 0x04, 0x00, 0x00, 0x54, 0x56, 0x21, 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, +- 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x04, 0x00, 0x00, 0x8a, +- 0xe8, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x33, +- 0x00, 0x0b, 0x78, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, +- 0x6e, 0x00, 0x08, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00, 0x39, 0xd0, 0x33, +- 0x00, 0x0b, 0x79, 0x2d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, +- 0x6e, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x00, 0x00, 0x8b, 0x10, 0x37, +- 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0f, 0x73, 0x69, 0x64, 0x65, 0x73, +- 0x2d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x00, 0x09, +- 0x6f, 0x6e, 0x65, 0x2d, 0x73, 0x69, 0x64, 0x65, 0x64, 0x44, 0x00, 0x00, +- 0x00, 0x14, 0x74, 0x77, 0x6f, 0x2d, 0x73, 0x69, 0x64, 0x65, 0x64, 0x2d, +- 0x73, 0x68, 0x6f, 0x72, 0x74, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x44, 0x00, +- 0x00, 0x00, 0x13, 0x74, 0x77, 0x6f, 0x2d, 0x73, 0x69, 0x64, 0x65, 0x64, +- 0x2d, 0x6c, 0x6f, 0x6e, 0x67, 0x2d, 0x65, 0x64, 0x67, 0x65, 0x03, +-} +diff --git a/message.go b/message.go +index 4a7229a..7a4d2db 100644 +--- a/message.go ++++ b/message.go +@@ -157,19 +157,10 @@ func (m *Message) EncodeBytes() ([]byte, error) { + return buf.Bytes(), err + } + +-// Decode reads message from io.Reader ++// Decode message + func (m *Message) Decode(in io.Reader) error { +- return m.DecodeEx(in, DecoderOptions{}) +-} +- +-// DecodeEx reads message from io.Reader +-// +-// It is extended version of the Decode method, with additional +-// DecoderOptions parameter +-func (m *Message) DecodeEx(in io.Reader, opt DecoderOptions) error { + md := messageDecoder{ +- in: in, +- opt: opt, ++ in: in, + } + + m.Reset() +@@ -181,14 +172,6 @@ func (m *Message) DecodeBytes(data []byte) error { + return m.Decode(bytes.NewBuffer(data)) + } + +-// DecodeBytesEx decodes message from byte slice +-// +-// It is extended version of the DecodeBytes method, with additional +-// DecoderOptions parameter +-func (m *Message) DecodeBytesEx(data []byte, opt DecoderOptions) error { +- return m.DecodeEx(bytes.NewBuffer(data), opt) +-} +- + // Print pretty-prints the message. The 'request' parameter affects + // interpretation of Message.Code: it is interpreted either + // as Op or as Status diff --git a/sources b/sources index c28411e..47d2097 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (goipp-1.0.0.tar.gz) = 871f87f4f4de1ff4c0ef2e198ba3d050fecd947040b5e486c11db0b9cedc26a45ad44dcadbde57e4bb56fe86e8b3b1ef84cb0e5f8671cbc081c3c312545d2648 +SHA512 (goipp-1.1.0.tar.gz) = 488b9633b491c2a40c9156166194b216287614fae36d19239c1d390c39be08f2c945ad3e9c7c39242cbd4dac92708b229c88a40343b653d8616993afaf53754e