SYS-REQ-116
(retain bool, opening byte)
| 513 | |
| 514 | // SYS-REQ-116 |
| 515 | func (rp *ReaderParser) scanComposite(retain bool, opening byte) error { |
| 516 | stack := []byte{closingDelimiter(opening)} |
| 517 | rp.pos++ |
| 518 | |
| 519 | for len(stack) > 0 { |
| 520 | b, err := rp.peekByte(retain) |
| 521 | if err != nil { |
| 522 | if err == io.EOF { |
| 523 | if opening == '[' { |
| 524 | return MalformedArrayError |
| 525 | } |
| 526 | return MalformedObjectError |
| 527 | } |
| 528 | return err |
| 529 | } |
| 530 | |
| 531 | if b == '"' || (b == '\'' && rp.config.AllowSingleQuotes) { |
| 532 | if err := rp.scanString(retain); err != nil { |
| 533 | return err |
| 534 | } |
| 535 | continue |
| 536 | } |
| 537 | |
| 538 | switch b { |
| 539 | case '{': |
| 540 | stack = append(stack, '}') |
| 541 | case '[': |
| 542 | stack = append(stack, ']') |
| 543 | case '}', ']': |
| 544 | if b != stack[len(stack)-1] { |
| 545 | return MalformedJsonError |
| 546 | } |
| 547 | stack = stack[:len(stack)-1] |
| 548 | } |
| 549 | rp.pos++ |
| 550 | } |
| 551 | return nil |
| 552 | } |
| 553 | |
| 554 | // SYS-REQ-116 |
| 555 | func closingDelimiter(opening byte) byte { |
no test coverage detected