Skip to content

Commit

Permalink
Fix ASTDereferencerError when validating initializers (#1118)
Browse files Browse the repository at this point in the history
  • Loading branch information
ericglau authored Jan 24, 2025
1 parent 19b866c commit 696e20f
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 4 deletions.
4 changes: 4 additions & 0 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 1.42.1 (2025-01-24)

- Fix `ASTDereferencerError` when validating initializers.

## 1.42.0 (2025-01-23)

- Update dependencies. ([#1096](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/1096))
Expand Down
15 changes: 15 additions & 0 deletions packages/core/contracts/test/ValidationsInitializer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,21 @@ contract InitializationOrder_UnsafeAllowDuplicate_But_WrongOrder is A, B, C, Par
}
}

contract WithRequire_Ok is Parent__OnlyInitializingModifier {
uint y;
function initialize(bool foo) initializer public {
require(foo, "foo should be true");
__Parent_init();
}
}

contract WithRequire_Bad is Parent__OnlyInitializingModifier {
uint y;
function initialize(bool foo) initializer public {
require(foo, "foo should be true");
}
}

// ==== Initializer visibility ====

abstract contract Parent_Private is Initializable {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openzeppelin/upgrades-core",
"version": "1.42.0",
"version": "1.42.1",
"description": "",
"repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
"license": "MIT",
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/validate-initializers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Call', 'transparent');
testOverride('InitializationOrder_Duplicate_Bad', 'transparent', { unsafeAllow: ['duplicate-initializer-call'] });
testAccepts('InitializationOrder_UnsafeAllowDuplicate_But_WrongOrder', 'transparent'); // warn 'Expected initializers to be called for parent contracts in the following order: A, B, C'

testAccepts('WithRequire_Ok', 'transparent');
testRejects('WithRequire_Bad', 'transparent', {
contains: ['Missing initializer calls for one or more parent contracts: `Parent__OnlyInitializingModifier`'],
count: 1,
});

testAccepts('Child_Of_Private_Ok', 'transparent');
testAccepts('Child_Of_Public_Ok', 'transparent');
testRejects('Child_Of_Public_MissingCall_Bad', 'transparent', {
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/validate/run/initializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ function getParentsNotInitializedByOtherParents(
(fnCall.expression.nodeType === 'Identifier' || fnCall.expression.nodeType === 'MemberAccess')
) {
const referencedFn = fnCall.expression.referencedDeclaration;
if (referencedFn) {
if (referencedFn && referencedFn > 0) {
const earlierParents = remainingParents.slice(0, remainingParents.indexOf(parent));
const callsEarlierParentInitializer = earlierParents.find(base =>
parentNameToInitializersMap.get(base)!.some(init => init.id === referencedFn),
Expand Down Expand Up @@ -177,7 +177,7 @@ function* getInitializerCallExceptions(
) {
let recursiveFunctionIds: number[] = [];
const referencedFn = fnCall.expression.referencedDeclaration;
if (referencedFn) {
if (referencedFn && referencedFn > 0) {
recursiveFunctionIds = getRecursiveFunctionIds(referencedFn, deref);
}

Expand Down Expand Up @@ -284,7 +284,7 @@ function getRecursiveFunctionIds(referencedFn: number, deref: ASTDereferencer, v
(fnCall.expression.nodeType === 'Identifier' || fnCall.expression.nodeType === 'MemberAccess')
) {
const referencedId = fnCall.expression.referencedDeclaration;
if (referencedId) {
if (referencedId && referencedId > 0) {
result.push(...getRecursiveFunctionIds(referencedId, deref, visited));
}
}
Expand Down

0 comments on commit 696e20f

Please sign in to comment.