@@ -112,6 +112,9 @@ func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
112112 c := iter .nextToken ()
113113 var field string
114114 if c == '{' {
115+ if ! iter .incrementDepth () {
116+ return false
117+ }
115118 c = iter .nextToken ()
116119 if c == '"' {
117120 iter .unreadByte ()
@@ -121,6 +124,7 @@ func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
121124 iter .ReportError ("ReadObject" , "expect : after object field, but found " + string ([]byte {c }))
122125 }
123126 if ! callback (iter , field ) {
127+ iter .decrementDepth ()
124128 return false
125129 }
126130 c = iter .nextToken ()
@@ -131,20 +135,23 @@ func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
131135 iter .ReportError ("ReadObject" , "expect : after object field, but found " + string ([]byte {c }))
132136 }
133137 if ! callback (iter , field ) {
138+ iter .decrementDepth ()
134139 return false
135140 }
136141 c = iter .nextToken ()
137142 }
138143 if c != '}' {
139144 iter .ReportError ("ReadObjectCB" , `object not ended with }` )
145+ iter .decrementDepth ()
140146 return false
141147 }
142- return true
148+ return iter . decrementDepth ()
143149 }
144150 if c == '}' {
145- return true
151+ return iter . decrementDepth ()
146152 }
147153 iter .ReportError ("ReadObjectCB" , `expect " after }, but found ` + string ([]byte {c }))
154+ iter .decrementDepth ()
148155 return false
149156 }
150157 if c == 'n' {
@@ -159,39 +166,48 @@ func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
159166func (iter * Iterator ) ReadMapCB (callback func (* Iterator , string ) bool ) bool {
160167 c := iter .nextToken ()
161168 if c == '{' {
169+ if ! iter .incrementDepth () {
170+ return false
171+ }
162172 c = iter .nextToken ()
163173 if c == '"' {
164174 iter .unreadByte ()
165175 field := iter .ReadString ()
166176 if iter .nextToken () != ':' {
167177 iter .ReportError ("ReadMapCB" , "expect : after object field, but found " + string ([]byte {c }))
178+ iter .decrementDepth ()
168179 return false
169180 }
170181 if ! callback (iter , field ) {
182+ iter .decrementDepth ()
171183 return false
172184 }
173185 c = iter .nextToken ()
174186 for c == ',' {
175187 field = iter .ReadString ()
176188 if iter .nextToken () != ':' {
177189 iter .ReportError ("ReadMapCB" , "expect : after object field, but found " + string ([]byte {c }))
190+ iter .decrementDepth ()
178191 return false
179192 }
180193 if ! callback (iter , field ) {
194+ iter .decrementDepth ()
181195 return false
182196 }
183197 c = iter .nextToken ()
184198 }
185199 if c != '}' {
186200 iter .ReportError ("ReadMapCB" , `object not ended with }` )
201+ iter .decrementDepth ()
187202 return false
188203 }
189- return true
204+ return iter . decrementDepth ()
190205 }
191206 if c == '}' {
192- return true
207+ return iter . decrementDepth ()
193208 }
194209 iter .ReportError ("ReadMapCB" , `expect " after }, but found ` + string ([]byte {c }))
210+ iter .decrementDepth ()
195211 return false
196212 }
197213 if c == 'n' {
0 commit comments