@@ -89,20 +89,47 @@ public function parse($value, $flags = 0)
89
89
if (false === preg_match ('//u ' , $ value )) {
90
90
throw new ParseException ('The YAML value does not appear to be valid UTF-8. ' );
91
91
}
92
+
93
+ $ this ->refs = array ();
94
+
95
+ $ mbEncoding = null ;
96
+ $ e = null ;
97
+ $ data = null ;
98
+
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
+ try {
105
+ $ data = $ this ->doParse ($ value , $ flags );
106
+ } catch (\Exception $ e ) {
107
+ } catch (\Throwable $ e ) {
108
+ }
109
+
110
+ if (null !== $ mbEncoding ) {
111
+ mb_internal_encoding ($ mbEncoding );
112
+ }
113
+
114
+ if (null !== $ e ) {
115
+ throw $ e ;
116
+ }
117
+
118
+ return $ data ;
119
+ }
120
+
121
+ private function doParse ($ value , $ flags )
122
+ {
92
123
$ this ->currentLineNb = -1 ;
93
124
$ this ->currentLine = '' ;
94
125
$ value = $ this ->cleanup ($ value );
95
126
$ this ->lines = explode ("\n" , $ value );
127
+ $ this ->locallySkippedLineNumbers = array ();
96
128
97
129
if (null === $ this ->totalNumberOfLines ) {
98
130
$ this ->totalNumberOfLines = count ($ this ->lines );
99
131
}
100
132
101
- if (2 /* MB_OVERLOAD_STRING */ & (int ) ini_get ('mbstring.func_overload ' )) {
102
- $ mbEncoding = mb_internal_encoding ();
103
- mb_internal_encoding ('UTF-8 ' );
104
- }
105
-
106
133
if (!$ this ->moveToNextLine ()) {
107
134
return null ;
108
135
}
@@ -324,10 +351,6 @@ public function parse($value, $flags = 0)
324
351
throw $ e ;
325
352
}
326
353
327
- if (isset ($ mbEncoding )) {
328
- mb_internal_encoding ($ mbEncoding );
329
- }
330
-
331
354
return $ value ;
332
355
}
333
356
@@ -375,10 +398,6 @@ public function parse($value, $flags = 0)
375
398
$ data = new TaggedValue ($ tag , $ data );
376
399
}
377
400
378
- if (isset ($ mbEncoding )) {
379
- mb_internal_encoding ($ mbEncoding );
380
- }
381
-
382
401
if (Yaml::PARSE_OBJECT_FOR_MAP & $ flags && !is_object ($ data ) && 'mapping ' === $ context ) {
383
402
$ object = new \stdClass ();
384
403
@@ -408,10 +427,9 @@ private function parseBlock($offset, $yaml, $flags)
408
427
$ parser ->offset = $ offset ;
409
428
$ parser ->totalNumberOfLines = $ this ->totalNumberOfLines ;
410
429
$ parser ->skippedLineNumbers = $ skippedLineNumbers ;
411
-
412
430
$ parser ->refs = &$ this ->refs ;
413
431
414
- return $ parser ->parse ($ yaml , $ flags );
432
+ return $ parser ->doParse ($ yaml , $ flags );
415
433
}
416
434
417
435
/**
0 commit comments