Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit b9b3e8e

Browse files
authored
Merge pull request #40465 from mmitche/merge-missed
Merge missed release/3.0-preview9 fix
2 parents 704c0fe + 6c9f8b2 commit b9b3e8e

File tree

3 files changed

+384
-66
lines changed

3 files changed

+384
-66
lines changed

src/System.Text.Json/src/System/Text/Json/Reader/Utf8JsonReader.MultiSegment.cs

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,48 +1846,36 @@ private ConsumeTokenResult ConsumeNextTokenFromLastNonCommentTokenMultiSegment()
18461846
}
18471847
else if (_tokenType == JsonTokenType.StartObject)
18481848
{
1849-
if (first == JsonConstants.CloseBrace)
1849+
Debug.Assert(first != JsonConstants.CloseBrace);
1850+
if (first != JsonConstants.Quote)
18501851
{
1851-
EndObject();
1852+
ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.ExpectedStartOfPropertyNotFound, first);
18521853
}
1853-
else
1854-
{
1855-
if (first != JsonConstants.Quote)
1856-
{
1857-
ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.ExpectedStartOfPropertyNotFound, first);
1858-
}
18591854

1860-
long prevTotalConsumed = _totalConsumed;
1861-
int prevConsumed = _consumed;
1862-
long prevPosition = _bytePositionInLine;
1863-
long prevLineNumber = _lineNumber;
1864-
if (!ConsumePropertyNameMultiSegment())
1865-
{
1866-
// roll back potential changes
1867-
_consumed = prevConsumed;
1868-
_tokenType = JsonTokenType.StartObject;
1869-
_bytePositionInLine = prevPosition;
1870-
_lineNumber = prevLineNumber;
1871-
_totalConsumed = prevTotalConsumed;
1872-
goto RollBack;
1873-
}
1874-
goto Done;
1855+
long prevTotalConsumed = _totalConsumed;
1856+
int prevConsumed = _consumed;
1857+
long prevPosition = _bytePositionInLine;
1858+
long prevLineNumber = _lineNumber;
1859+
if (!ConsumePropertyNameMultiSegment())
1860+
{
1861+
// roll back potential changes
1862+
_consumed = prevConsumed;
1863+
_tokenType = JsonTokenType.StartObject;
1864+
_bytePositionInLine = prevPosition;
1865+
_lineNumber = prevLineNumber;
1866+
_totalConsumed = prevTotalConsumed;
1867+
goto RollBack;
18751868
}
1869+
goto Done;
18761870
}
18771871
else if (_tokenType == JsonTokenType.StartArray)
18781872
{
1879-
if (first == JsonConstants.CloseBracket)
1880-
{
1881-
EndArray();
1882-
}
1883-
else
1873+
Debug.Assert(first != JsonConstants.CloseBracket);
1874+
if (!ConsumeValueMultiSegment(first))
18841875
{
1885-
if (!ConsumeValueMultiSegment(first))
1886-
{
1887-
goto RollBack;
1888-
}
1889-
goto Done;
1876+
goto RollBack;
18901877
}
1878+
goto Done;
18911879
}
18921880
else if (_tokenType == JsonTokenType.PropertyName)
18931881
{
@@ -1899,7 +1887,37 @@ private ConsumeTokenResult ConsumeNextTokenFromLastNonCommentTokenMultiSegment()
18991887
}
19001888
else
19011889
{
1902-
goto RollBack;
1890+
Debug.Assert(_tokenType == JsonTokenType.EndArray || _tokenType == JsonTokenType.EndObject);
1891+
if (_inObject)
1892+
{
1893+
Debug.Assert(first != JsonConstants.CloseBrace);
1894+
if (first != JsonConstants.Quote)
1895+
{
1896+
ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.ExpectedStartOfPropertyNotFound, first);
1897+
}
1898+
1899+
if (ConsumePropertyNameMultiSegment())
1900+
{
1901+
goto Done;
1902+
}
1903+
else
1904+
{
1905+
goto RollBack;
1906+
}
1907+
}
1908+
else
1909+
{
1910+
Debug.Assert(first != JsonConstants.CloseBracket);
1911+
1912+
if (ConsumeValueMultiSegment(first))
1913+
{
1914+
goto Done;
1915+
}
1916+
else
1917+
{
1918+
goto RollBack;
1919+
}
1920+
}
19031921
}
19041922

19051923
Done:

src/System.Text.Json/src/System/Text/Json/Reader/Utf8JsonReader.cs

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,46 +1980,34 @@ private ConsumeTokenResult ConsumeNextTokenFromLastNonCommentToken()
19801980
}
19811981
else if (_tokenType == JsonTokenType.StartObject)
19821982
{
1983-
if (first == JsonConstants.CloseBrace)
1983+
Debug.Assert(first != JsonConstants.CloseBrace);
1984+
if (first != JsonConstants.Quote)
19841985
{
1985-
EndObject();
1986+
ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.ExpectedStartOfPropertyNotFound, first);
19861987
}
1987-
else
1988-
{
1989-
if (first != JsonConstants.Quote)
1990-
{
1991-
ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.ExpectedStartOfPropertyNotFound, first);
1992-
}
19931988

1994-
int prevConsumed = _consumed;
1995-
long prevPosition = _bytePositionInLine;
1996-
long prevLineNumber = _lineNumber;
1997-
if (!ConsumePropertyName())
1998-
{
1999-
// roll back potential changes
2000-
_consumed = prevConsumed;
2001-
_tokenType = JsonTokenType.StartObject;
2002-
_bytePositionInLine = prevPosition;
2003-
_lineNumber = prevLineNumber;
2004-
goto RollBack;
2005-
}
2006-
goto Done;
1989+
int prevConsumed = _consumed;
1990+
long prevPosition = _bytePositionInLine;
1991+
long prevLineNumber = _lineNumber;
1992+
if (!ConsumePropertyName())
1993+
{
1994+
// roll back potential changes
1995+
_consumed = prevConsumed;
1996+
_tokenType = JsonTokenType.StartObject;
1997+
_bytePositionInLine = prevPosition;
1998+
_lineNumber = prevLineNumber;
1999+
goto RollBack;
20072000
}
2001+
goto Done;
20082002
}
20092003
else if (_tokenType == JsonTokenType.StartArray)
20102004
{
2011-
if (first == JsonConstants.CloseBracket)
2012-
{
2013-
EndArray();
2014-
}
2015-
else
2005+
Debug.Assert(first != JsonConstants.CloseBracket);
2006+
if (!ConsumeValue(first))
20162007
{
2017-
if (!ConsumeValue(first))
2018-
{
2019-
goto RollBack;
2020-
}
2021-
goto Done;
2008+
goto RollBack;
20222009
}
2010+
goto Done;
20232011
}
20242012
else if (_tokenType == JsonTokenType.PropertyName)
20252013
{
@@ -2031,7 +2019,37 @@ private ConsumeTokenResult ConsumeNextTokenFromLastNonCommentToken()
20312019
}
20322020
else
20332021
{
2034-
goto RollBack;
2022+
Debug.Assert(_tokenType == JsonTokenType.EndArray || _tokenType == JsonTokenType.EndObject);
2023+
if (_inObject)
2024+
{
2025+
Debug.Assert(first != JsonConstants.CloseBrace);
2026+
if (first != JsonConstants.Quote)
2027+
{
2028+
ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.ExpectedStartOfPropertyNotFound, first);
2029+
}
2030+
2031+
if (ConsumePropertyName())
2032+
{
2033+
goto Done;
2034+
}
2035+
else
2036+
{
2037+
goto RollBack;
2038+
}
2039+
}
2040+
else
2041+
{
2042+
Debug.Assert(first != JsonConstants.CloseBracket);
2043+
2044+
if (ConsumeValue(first))
2045+
{
2046+
goto Done;
2047+
}
2048+
else
2049+
{
2050+
goto RollBack;
2051+
}
2052+
}
20352053
}
20362054

20372055
Done:

0 commit comments

Comments
 (0)