Modified: trunk/Source/_javascript_Core/ChangeLog (282022 => 282023)
--- trunk/Source/_javascript_Core/ChangeLog 2021-09-03 21:07:46 UTC (rev 282022)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-09-03 21:37:46 UTC (rev 282023)
@@ -1,3 +1,15 @@
+2021-09-03 Ross Kirsling <ross.kirsl...@sony.com>
+
+ [JSC] Yarr::ByteTerm sometimes leaves fields uninitialized
+ https://bugs.webkit.org/show_bug.cgi?id=229891
+
+ Reviewed by Yusuke Suzuki.
+
+ * yarr/YarrInterpreter.h:
+ (JSC::Yarr::ByteTerm::ByteTerm):
+ Default initialize `frameLocation` and `inputPosition`.
+ (Also, use initializer list where possible.)
+
2021-09-03 Yusuke Suzuki <ysuz...@apple.com>
[JSC] Implement Temporal.TimeZone
Modified: trunk/Source/_javascript_Core/yarr/YarrInterpreter.h (282022 => 282023)
--- trunk/Source/_javascript_Core/yarr/YarrInterpreter.h 2021-09-03 21:07:46 UTC (rev 282022)
+++ trunk/Source/_javascript_Core/yarr/YarrInterpreter.h 2021-09-03 21:37:46 UTC (rev 282023)
@@ -70,7 +70,7 @@
} anchors;
unsigned checkInputCount;
};
- unsigned frameLocation;
+ unsigned frameLocation { 0 };
enum class Type : uint8_t {
BodyAlternativeBegin,
BodyAlternativeDisjunction,
@@ -107,18 +107,18 @@
Type type;
bool m_capture : 1;
bool m_invert : 1;
- unsigned inputPosition;
+ unsigned inputPosition { 0 };
ByteTerm(UChar32 ch, unsigned inputPos, unsigned frameLocation, Checked<unsigned> quantityCount, QuantifierType quantityType)
: frameLocation(frameLocation)
, m_capture(false)
, m_invert(false)
+ , inputPosition(inputPos)
{
atom.patternCharacter = ch;
atom.quantityType = quantityType;
atom.quantityMinCount = quantityCount;
atom.quantityMaxCount = quantityCount;
- inputPosition = inputPos;
switch (quantityType) {
case QuantifierType::FixedCount:
@@ -137,6 +137,7 @@
: frameLocation(frameLocation)
, m_capture(false)
, m_invert(false)
+ , inputPosition(inputPos)
{
switch (quantityType) {
case QuantifierType::FixedCount:
@@ -155,7 +156,6 @@
atom.quantityType = quantityType;
atom.quantityMinCount = quantityCount;
atom.quantityMaxCount = quantityCount;
- inputPosition = inputPos;
}
ByteTerm(CharacterClass* characterClass, bool invert, unsigned inputPos)
@@ -162,12 +162,12 @@
: type(ByteTerm::Type::CharacterClass)
, m_capture(false)
, m_invert(invert)
+ , inputPosition(inputPos)
{
atom.characterClass = characterClass;
atom.quantityType = QuantifierType::FixedCount;
atom.quantityMinCount = 1;
atom.quantityMaxCount = 1;
- inputPosition = inputPos;
}
ByteTerm(Type type, unsigned subpatternId, ByteDisjunction* parenthesesInfo, bool capture, unsigned inputPos)
@@ -174,6 +174,7 @@
: type(type)
, m_capture(capture)
, m_invert(false)
+ , inputPosition(inputPos)
{
atom.subpatternId = subpatternId;
atom.parenthesesDisjunction = parenthesesInfo;
@@ -180,7 +181,6 @@
atom.quantityType = QuantifierType::FixedCount;
atom.quantityMinCount = 1;
atom.quantityMaxCount = 1;
- inputPosition = inputPos;
}
ByteTerm(Type type, bool invert = false)
@@ -197,12 +197,12 @@
: type(type)
, m_capture(capture)
, m_invert(invert)
+ , inputPosition(inputPos)
{
atom.subpatternId = subpatternId;
atom.quantityType = QuantifierType::FixedCount;
atom.quantityMinCount = 1;
atom.quantityMaxCount = 1;
- inputPosition = inputPos;
}
static ByteTerm BOL(unsigned inputPos)