Skip to content

Commit f26aaad

Browse files
Lordackleymi
authored andcommitted
ignore data in xmldata field
1 parent 2bdbca8 commit f26aaad

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

message.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,20 @@ func ParseMessageWithDataDictionary(
190190
return
191191
}
192192

193+
prevTag := tagMsgType
194+
193195
msg.Header.add(msg.fields[fieldIndex : fieldIndex+1])
194196
fieldIndex++
195197

196198
trailerBytes := []byte{}
197199
foundBody := false
198200
for {
199201
parsedFieldBytes = &msg.fields[fieldIndex]
200-
rawBytes, err = extractField(parsedFieldBytes, rawBytes)
202+
if prevTag == tagXMLDataLen {
203+
rawBytes, err = extractXMLDataField(parsedFieldBytes, rawBytes)
204+
} else {
205+
rawBytes, err = extractField(parsedFieldBytes, rawBytes)
206+
}
201207
if err != nil {
202208
return
203209
}
@@ -220,6 +226,7 @@ func ParseMessageWithDataDictionary(
220226
msg.bodyBytes = rawBytes
221227
}
222228

229+
prevTag = parsedFieldBytes.tag
223230
fieldIndex++
224231
}
225232

@@ -338,6 +345,30 @@ func extractSpecificField(field *TagValue, expectedTag Tag, buffer []byte) (remB
338345
return
339346
}
340347

348+
func extractXMLDataField(parsedFieldBytes *TagValue, buffer []byte) (remBytes []byte, err error) {
349+
endIndex := bytes.IndexByte(buffer, '>')
350+
if endIndex == -1 {
351+
err = parseError{OrigError: "extractField: No Trailing Delim in " + string(buffer)}
352+
remBytes = buffer
353+
return
354+
}
355+
356+
endIndex = bytes.IndexByte(buffer[endIndex+1:], '>')
357+
if endIndex == -1 {
358+
err = parseError{OrigError: "extractField: No Trailing Delim in " + string(buffer)}
359+
remBytes = buffer
360+
return
361+
}
362+
363+
tempEndIndex := bytes.IndexByte(buffer[endIndex:], '\001')
364+
endIndex += tempEndIndex
365+
tempEndIndex = bytes.IndexByte(buffer[endIndex+1:], '\001')
366+
endIndex += tempEndIndex + 1
367+
368+
err = parsedFieldBytes.parse(buffer[:endIndex+1])
369+
return buffer[(endIndex + 1):], err
370+
}
371+
341372
func extractField(parsedFieldBytes *TagValue, buffer []byte) (remBytes []byte, err error) {
342373
endIndex := bytes.IndexByte(buffer, '\001')
343374
if endIndex == -1 {

0 commit comments

Comments
 (0)