Skip to content

Commit

Permalink
Abiv2 proto fuzzer: Crop at least 32 bytes if last dynamically encode…
Browse files Browse the repository at this point in the history
…d parameter is right padded
  • Loading branch information
bshastry committed Sep 9, 2019
1 parent 7e80fce commit e349fb1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 15 deletions.
16 changes: 8 additions & 8 deletions test/tools/ossfuzz/protoToAbiV2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ void ProtoConverter::visitType(
std::string varName, paramName;
createDeclAndParamList(_type, _dataType, varName, paramName);
addCheckedVarDef(_dataType, varName, paramName, _value);
// Update right padding of type
m_isLastParamRightPadded = isDataTypeBytesOrString(_dataType);
}

void ProtoConverter::appendVarDeclToOutput(
Expand Down Expand Up @@ -451,6 +449,8 @@ void ProtoConverter::visit(DynamicByteArrayType const& _x)
isBytes
)
);
// Update right padding of type
m_isLastDynParamRightPadded = true;
}

// TODO: Implement struct visitor
Expand Down Expand Up @@ -658,23 +658,23 @@ void ProtoConverter::visit(ArrayType const& _x)
{
case ArrayType::kInty:
baseType = getIntTypeAsString(_x.inty());
m_isLastParamRightPadded = false;
m_isLastDynParamRightPadded = false;
break;
case ArrayType::kByty:
baseType = getFixedByteTypeAsString(_x.byty());
m_isLastParamRightPadded = false;
m_isLastDynParamRightPadded = false;
break;
case ArrayType::kAdty:
baseType = getAddressTypeAsString(_x.adty());
m_isLastParamRightPadded = false;
m_isLastDynParamRightPadded = false;
break;
case ArrayType::kBoolty:
baseType = getBoolTypeAsString();
m_isLastParamRightPadded = false;
m_isLastDynParamRightPadded = false;
break;
case ArrayType::kDynbytesty:
baseType = bytesArrayTypeAsString(_x.dynbytesty());
m_isLastParamRightPadded = true;
m_isLastDynParamRightPadded = true;
break;
case ArrayType::kStty:
case ArrayType::BASE_TYPE_ONEOF_NOT_SET:
Expand Down Expand Up @@ -861,7 +861,7 @@ void ProtoConverter::visit(TestFunction const& _x)
)")
("parameterNames", dev::suffixedVariableNameList(s_varNamePrefix, 0, m_varCounter))
("invalidLengthFuzz", std::to_string(_x.invalid_encoding_length()))
("isRightPadded", isLastParamRightPadded() ? "true" : "false")
("isRightPadded", isLastDynParamRightPadded() ? "true" : "false")
("atLeastOneVar", m_varCounter > 0)
.render();
}
Expand Down
14 changes: 7 additions & 7 deletions test/tools/ossfuzz/protoToAbiV2.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class ProtoConverter
m_counter(0),
m_varCounter(0),
m_returnValue(1),
m_isLastParamRightPadded(false)
m_isLastDynParamRightPadded(false)
{}

ProtoConverter(ProtoConverter const&) = delete;
Expand Down Expand Up @@ -274,9 +274,9 @@ class ProtoConverter
return ((isValueType(_dataType) || m_isStateVar) ? "" : "memory");
}

bool isLastParamRightPadded()
bool isLastDynParamRightPadded()
{
return m_isLastParamRightPadded;
return m_isLastDynParamRightPadded;
}

// Static declarations
Expand Down Expand Up @@ -466,10 +466,10 @@ class ProtoConverter
unsigned m_varCounter;
/// Monotonically increasing return value for error reporting
unsigned m_returnValue;
/// Flag that indicates if last parameter passed to a function call
/// is of a type that is going to be right padded by the ABI
/// encoder.
bool m_isLastParamRightPadded;
/// Flag that indicates if last dynamically encoded parameter
/// passed to a function call is of a type that is going to be
/// right padded by the ABI encoder.
bool m_isLastDynParamRightPadded;
static unsigned constexpr s_maxArrayLength = 4;
static unsigned constexpr s_maxArrayDimensions = 4;
static unsigned constexpr s_maxDynArrayLength = 256;
Expand Down

0 comments on commit e349fb1

Please sign in to comment.