@@ -87,23 +87,51 @@ public function parse($value, $flags = 0)
87
87
if (false === preg_match ('//u ' , $ value )) {
88
88
throw new ParseException ('The YAML value does not appear to be valid UTF-8. ' );
89
89
}
90
+
91
+ $ this ->refs = array ();
92
+
93
+ $ mbEncoding = null ;
94
+ $ e = null ;
95
+ $ data = null ;
96
+
97
+ if (2 /* MB_OVERLOAD_STRING */ & (int ) ini_get ('mbstring.func_overload ' )) {
98
+ $ mbEncoding = mb_internal_encoding ();
99
+ mb_internal_encoding ('UTF-8 ' );
100
+ }
101
+
102
+ try {
103
+ $ data = $ this ->doParse ($ value , $ flags );
104
+ } catch (\Exception $ e ) {
105
+ } catch (\Throwable $ e ) {
106
+ }
107
+
108
+ if (null !== $ mbEncoding ) {
109
+ mb_internal_encoding ($ mbEncoding );
110
+ }
111
+
112
+ if (null !== $ e ) {
113
+ throw $ e ;
114
+ }
115
+
116
+ return $ data ;
117
+ }
118
+
119
+ private function doParse ($ value , $ flags )
120
+ {
90
121
$ this ->currentLineNb = -1 ;
91
122
$ this ->currentLine = '' ;
92
123
$ value = $ this ->cleanup ($ value );
93
124
$ this ->lines = explode ("\n" , $ value );
125
+ $ this ->locallySkippedLineNumbers = array ();
94
126
95
127
if (null === $ this ->totalNumberOfLines ) {
96
128
$ this ->totalNumberOfLines = count ($ this ->lines );
97
129
}
98
130
99
- if (2 /* MB_OVERLOAD_STRING */ & (int ) ini_get ('mbstring.func_overload ' )) {
100
- $ mbEncoding = mb_internal_encoding ();
101
- mb_internal_encoding ('UTF-8 ' );
102
- }
103
-
104
131
$ data = array ();
105
132
$ context = null ;
106
133
$ allowOverwrite = false ;
134
+
107
135
while ($ this ->moveToNextLine ()) {
108
136
if ($ this ->isCurrentLineEmpty ()) {
109
137
continue ;
@@ -279,21 +307,13 @@ public function parse($value, $flags = 0)
279
307
throw $ e ;
280
308
}
281
309
282
- if (isset ($ mbEncoding )) {
283
- mb_internal_encoding ($ mbEncoding );
284
- }
285
-
286
310
return $ value ;
287
311
}
288
312
289
313
throw new ParseException ('Unable to parse. ' , $ this ->getRealCurrentLineNb () + 1 , $ this ->currentLine );
290
314
}
291
315
}
292
316
293
- if (isset ($ mbEncoding )) {
294
- mb_internal_encoding ($ mbEncoding );
295
- }
296
-
297
317
if (Yaml::PARSE_OBJECT_FOR_MAP & $ flags && !is_object ($ data ) && 'mapping ' === $ context ) {
298
318
$ object = new \stdClass ();
299
319
@@ -322,7 +342,7 @@ private function parseBlock($offset, $yaml, $flags)
322
342
$ parser = new self ($ offset , $ this ->totalNumberOfLines , $ skippedLineNumbers );
323
343
$ parser ->refs = &$ this ->refs ;
324
344
325
- return $ parser ->parse ($ yaml , $ flags );
345
+ return $ parser ->doParse ($ yaml , $ flags );
326
346
}
327
347
328
348
/**
0 commit comments