Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix isValidatePubkeyHex regex #4439

Merged
merged 1 commit into from Aug 18, 2022
Merged

Conversation

dapplion
Copy link
Contributor

@dapplion dapplion commented Aug 18, 2022

Motivation

Regex isValidatePubkeyHex was too flexible and allow potentially dangerous entries

Description

Fix isValidatePubkeyHex regex

Closes #4435

@dapplion dapplion requested a review from a team as a code owner August 18, 2022 13:36
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 7aecb69 Previous: 9ffdbfa Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.0221 ms/op 2.4179 ms/op 0.84
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 69.629 us/op 87.477 us/op 0.80
BLS verify - blst-native 1.8581 ms/op 2.6841 ms/op 0.69
BLS verifyMultipleSignatures 3 - blst-native 3.8072 ms/op 5.7157 ms/op 0.67
BLS verifyMultipleSignatures 8 - blst-native 8.1946 ms/op 11.658 ms/op 0.70
BLS verifyMultipleSignatures 32 - blst-native 29.681 ms/op 43.537 ms/op 0.68
BLS aggregatePubkeys 32 - blst-native 39.159 us/op 58.647 us/op 0.67
BLS aggregatePubkeys 128 - blst-native 152.80 us/op 228.15 us/op 0.67
getAttestationsForBlock 162.76 ms/op 198.66 ms/op 0.82
isKnown best case - 1 super set check 437.00 ns/op 509.00 ns/op 0.86
isKnown normal case - 2 super set checks 428.00 ns/op 485.00 ns/op 0.88
isKnown worse case - 16 super set checks 427.00 ns/op 493.00 ns/op 0.87
CheckpointStateCache - add get delete 8.9110 us/op 10.967 us/op 0.81
validate gossip signedAggregateAndProof - struct 4.2718 ms/op 6.3082 ms/op 0.68
validate gossip attestation - struct 2.0383 ms/op 3.0692 ms/op 0.66
altair verifyImport mainnet_s3766816:31 4.3861 s/op 5.8872 s/op 0.75
pickEth1Vote - no votes 2.0729 ms/op 2.4676 ms/op 0.84
pickEth1Vote - max votes 21.999 ms/op 25.442 ms/op 0.86
pickEth1Vote - Eth1Data hashTreeRoot value x2048 13.149 ms/op 18.061 ms/op 0.73
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 19.542 ms/op 24.884 ms/op 0.79
pickEth1Vote - Eth1Data fastSerialize value x2048 1.5054 ms/op 1.7626 ms/op 0.85
pickEth1Vote - Eth1Data fastSerialize tree x2048 12.930 ms/op 14.945 ms/op 0.87
bytes32 toHexString 1.0260 us/op 1.1770 us/op 0.87
bytes32 Buffer.toString(hex) 693.00 ns/op 829.00 ns/op 0.84
bytes32 Buffer.toString(hex) from Uint8Array 932.00 ns/op 1.1130 us/op 0.84
bytes32 Buffer.toString(hex) + 0x 690.00 ns/op 842.00 ns/op 0.82
Object access 1 prop 0.34700 ns/op 0.42000 ns/op 0.83
Map access 1 prop 0.30800 ns/op 0.34700 ns/op 0.89
Object get x1000 18.370 ns/op 16.300 ns/op 1.13
Map get x1000 0.99600 ns/op 0.96100 ns/op 1.04
Object set x1000 107.60 ns/op 110.68 ns/op 0.97
Map set x1000 67.471 ns/op 79.549 ns/op 0.85
Return object 10000 times 0.37750 ns/op 0.41770 ns/op 0.90
Throw Error 10000 times 6.0220 us/op 7.0861 us/op 0.85
enrSubnets - fastDeserialize 64 bits 2.6380 us/op 3.0500 us/op 0.86
enrSubnets - ssz BitVector 64 bits 748.00 ns/op 851.00 ns/op 0.88
enrSubnets - fastDeserialize 4 bits 386.00 ns/op 414.00 ns/op 0.93
enrSubnets - ssz BitVector 4 bits 707.00 ns/op 805.00 ns/op 0.88
prioritizePeers score -10:0 att 32-0.1 sync 2-0 92.406 us/op 110.11 us/op 0.84
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 123.46 us/op 150.79 us/op 0.82
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 203.05 us/op 267.26 us/op 0.76
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 442.22 us/op 595.53 us/op 0.74
prioritizePeers score 0:0 att 64-1 sync 4-1 458.94 us/op 616.55 us/op 0.74
RateTracker 1000000 limit, 1 obj count per request 188.74 ns/op 215.60 ns/op 0.88
RateTracker 1000000 limit, 2 obj count per request 139.98 ns/op 156.72 ns/op 0.89
RateTracker 1000000 limit, 4 obj count per request 116.37 ns/op 124.74 ns/op 0.93
RateTracker 1000000 limit, 8 obj count per request 104.38 ns/op 116.21 ns/op 0.90
RateTracker with prune 3.7630 us/op 4.9340 us/op 0.76
array of 16000 items push then shift 3.1731 us/op 5.3437 us/op 0.59
LinkedList of 16000 items push then shift 23.521 ns/op 27.548 ns/op 0.85
array of 16000 items push then pop 219.87 ns/op 238.41 ns/op 0.92
LinkedList of 16000 items push then pop 20.766 ns/op 23.173 ns/op 0.90
array of 24000 items push then shift 4.5419 us/op 8.5070 us/op 0.53
LinkedList of 24000 items push then shift 23.477 ns/op 27.000 ns/op 0.87
array of 24000 items push then pop 212.01 ns/op 245.22 ns/op 0.86
LinkedList of 24000 items push then pop 20.581 ns/op 23.171 ns/op 0.89
intersect bitArray bitLen 8 11.708 ns/op 12.434 ns/op 0.94
intersect array and set length 8 150.03 ns/op 185.30 ns/op 0.81
intersect bitArray bitLen 128 72.051 ns/op 72.050 ns/op 1.00
intersect array and set length 128 2.1577 us/op 2.3241 us/op 0.93
Buffer.concat 32 items 1.8340 ns/op 2.2500 ns/op 0.82
pass gossip attestations to forkchoice per slot 6.0072 ms/op 3.5542 ms/op 1.69
computeDeltas 3.3990 ms/op 4.6458 ms/op 0.73
computeProposerBoostScoreFromBalances 907.47 us/op 911.51 us/op 1.00
altair processAttestation - 250000 vs - 7PWei normalcase 3.9014 ms/op 5.1772 ms/op 0.75
altair processAttestation - 250000 vs - 7PWei worstcase 5.6341 ms/op 7.2496 ms/op 0.78
altair processAttestation - setStatus - 1/6 committees join 209.18 us/op 250.75 us/op 0.83
altair processAttestation - setStatus - 1/3 committees join 401.31 us/op 464.37 us/op 0.86
altair processAttestation - setStatus - 1/2 committees join 557.35 us/op 689.55 us/op 0.81
altair processAttestation - setStatus - 2/3 committees join 715.15 us/op 862.84 us/op 0.83
altair processAttestation - setStatus - 4/5 committees join 985.77 us/op 1.2213 ms/op 0.81
altair processAttestation - setStatus - 100% committees join 1.1656 ms/op 1.5146 ms/op 0.77
altair processBlock - 250000 vs - 7PWei normalcase 28.125 ms/op 33.641 ms/op 0.84
altair processBlock - 250000 vs - 7PWei normalcase hashState 38.121 ms/op 56.209 ms/op 0.68
altair processBlock - 250000 vs - 7PWei worstcase 87.474 ms/op 115.03 ms/op 0.76
altair processBlock - 250000 vs - 7PWei worstcase hashState 89.353 ms/op 120.96 ms/op 0.74
phase0 processBlock - 250000 vs - 7PWei normalcase 5.6870 ms/op 3.9766 ms/op 1.43
phase0 processBlock - 250000 vs - 7PWei worstcase 46.323 ms/op 63.966 ms/op 0.72
altair processEth1Data - 250000 vs - 7PWei normalcase 1.2096 ms/op 1.4840 ms/op 0.82
Tree 40 250000 create 748.14 ms/op 1.0083 s/op 0.74
Tree 40 250000 get(125000) 319.83 ns/op 326.94 ns/op 0.98
Tree 40 250000 set(125000) 2.0186 us/op 3.0655 us/op 0.66
Tree 40 250000 toArray() 31.568 ms/op 38.649 ms/op 0.82
Tree 40 250000 iterate all - toArray() + loop 31.881 ms/op 39.040 ms/op 0.82
Tree 40 250000 iterate all - get(i) 109.59 ms/op 132.57 ms/op 0.83
MutableVector 250000 create 23.392 ms/op 25.682 ms/op 0.91
MutableVector 250000 get(125000) 15.017 ns/op 13.866 ns/op 1.08
MutableVector 250000 set(125000) 493.34 ns/op 769.61 ns/op 0.64
MutableVector 250000 toArray() 6.7349 ms/op 7.1351 ms/op 0.94
MutableVector 250000 iterate all - toArray() + loop 6.9830 ms/op 8.0038 ms/op 0.87
MutableVector 250000 iterate all - get(i) 3.2902 ms/op 3.5144 ms/op 0.94
Array 250000 create 6.1104 ms/op 6.5985 ms/op 0.93
Array 250000 clone - spread 2.6603 ms/op 2.9943 ms/op 0.89
Array 250000 get(125000) 1.1750 ns/op 1.2390 ns/op 0.95
Array 250000 set(125000) 1.1430 ns/op 1.4050 ns/op 0.81
Array 250000 iterate all - loop 167.78 us/op 146.11 us/op 1.15
effectiveBalanceIncrements clone Uint8Array 300000 63.083 us/op 95.038 us/op 0.66
effectiveBalanceIncrements clone MutableVector 300000 783.00 ns/op 935.00 ns/op 0.84
effectiveBalanceIncrements rw all Uint8Array 300000 254.43 us/op 300.31 us/op 0.85
effectiveBalanceIncrements rw all MutableVector 300000 163.18 ms/op 246.46 ms/op 0.66
phase0 afterProcessEpoch - 250000 vs - 7PWei 202.26 ms/op 207.62 ms/op 0.97
phase0 beforeProcessEpoch - 250000 vs - 7PWei 138.76 ms/op 157.41 ms/op 0.88
altair processEpoch - mainnet_e81889 706.06 ms/op 802.84 ms/op 0.88
mainnet_e81889 - altair beforeProcessEpoch 214.83 ms/op 239.93 ms/op 0.90
mainnet_e81889 - altair processJustificationAndFinalization 27.989 us/op 65.240 us/op 0.43
mainnet_e81889 - altair processInactivityUpdates 10.368 ms/op 11.150 ms/op 0.93
mainnet_e81889 - altair processRewardsAndPenalties 186.62 ms/op 206.68 ms/op 0.90
mainnet_e81889 - altair processRegistryUpdates 5.5000 us/op 14.581 us/op 0.38
mainnet_e81889 - altair processSlashings 1.1280 us/op 4.1460 us/op 0.27
mainnet_e81889 - altair processEth1DataReset 1.1910 us/op 4.2110 us/op 0.28
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.6883 ms/op 3.0139 ms/op 0.89
mainnet_e81889 - altair processSlashingsReset 8.0500 us/op 28.577 us/op 0.28
mainnet_e81889 - altair processRandaoMixesReset 7.1530 us/op 25.112 us/op 0.28
mainnet_e81889 - altair processHistoricalRootsUpdate 992.00 ns/op 5.0750 us/op 0.20
mainnet_e81889 - altair processParticipationFlagUpdates 2.8550 us/op 16.758 us/op 0.17
mainnet_e81889 - altair processSyncCommitteeUpdates 1.0270 us/op 3.9390 us/op 0.26
mainnet_e81889 - altair afterProcessEpoch 195.77 ms/op 209.98 ms/op 0.93
phase0 processEpoch - mainnet_e58758 675.18 ms/op 811.71 ms/op 0.83
mainnet_e58758 - phase0 beforeProcessEpoch 282.50 ms/op 362.05 ms/op 0.78
mainnet_e58758 - phase0 processJustificationAndFinalization 18.531 us/op 61.554 us/op 0.30
mainnet_e58758 - phase0 processRewardsAndPenalties 145.82 ms/op 175.13 ms/op 0.83
mainnet_e58758 - phase0 processRegistryUpdates 9.4050 us/op 33.529 us/op 0.28
mainnet_e58758 - phase0 processSlashings 766.00 ns/op 3.2280 us/op 0.24
mainnet_e58758 - phase0 processEth1DataReset 755.00 ns/op 4.3490 us/op 0.17
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.0207 ms/op 2.1046 ms/op 0.96
mainnet_e58758 - phase0 processSlashingsReset 4.5480 us/op 17.332 us/op 0.26
mainnet_e58758 - phase0 processRandaoMixesReset 5.4510 us/op 23.281 us/op 0.23
mainnet_e58758 - phase0 processHistoricalRootsUpdate 831.00 ns/op 4.5610 us/op 0.18
mainnet_e58758 - phase0 processParticipationRecordUpdates 4.7300 us/op 21.540 us/op 0.22
mainnet_e58758 - phase0 afterProcessEpoch 161.46 ms/op 177.34 ms/op 0.91
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.5477 ms/op 2.4781 ms/op 1.03
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 3.0259 ms/op 2.9279 ms/op 1.03
altair processInactivityUpdates - 250000 normalcase 67.110 ms/op 79.968 ms/op 0.84
altair processInactivityUpdates - 250000 worstcase 65.935 ms/op 55.086 ms/op 1.20
phase0 processRegistryUpdates - 250000 normalcase 8.0560 us/op 27.207 us/op 0.30
phase0 processRegistryUpdates - 250000 badcase_full_deposits 404.95 us/op 511.04 us/op 0.79
phase0 processRegistryUpdates - 250000 worstcase 0.5 260.08 ms/op 319.14 ms/op 0.81
altair processRewardsAndPenalties - 250000 normalcase 155.53 ms/op 175.28 ms/op 0.89
altair processRewardsAndPenalties - 250000 worstcase 162.34 ms/op 182.12 ms/op 0.89
phase0 getAttestationDeltas - 250000 normalcase 12.758 ms/op 14.835 ms/op 0.86
phase0 getAttestationDeltas - 250000 worstcase 13.286 ms/op 14.783 ms/op 0.90
phase0 processSlashings - 250000 worstcase 5.4724 ms/op 7.6117 ms/op 0.72
altair processSyncCommitteeUpdates - 250000 280.09 ms/op 341.25 ms/op 0.82
BeaconState.hashTreeRoot - No change 483.00 ns/op 563.00 ns/op 0.86
BeaconState.hashTreeRoot - 1 full validator 59.874 us/op 79.688 us/op 0.75
BeaconState.hashTreeRoot - 32 full validator 738.68 us/op 1.0320 ms/op 0.72
BeaconState.hashTreeRoot - 512 full validator 8.3148 ms/op 10.554 ms/op 0.79
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 78.159 us/op 110.27 us/op 0.71
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3066 ms/op 1.7954 ms/op 0.73
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 16.935 ms/op 20.074 ms/op 0.84
BeaconState.hashTreeRoot - 1 balances 59.621 us/op 84.051 us/op 0.71
BeaconState.hashTreeRoot - 32 balances 924.10 us/op 819.32 us/op 1.13
BeaconState.hashTreeRoot - 512 balances 5.0311 ms/op 7.3465 ms/op 0.68
BeaconState.hashTreeRoot - 250000 balances 102.62 ms/op 124.10 ms/op 0.83
aggregationBits - 2048 els - zipIndexesInBitList 26.471 us/op 33.852 us/op 0.78
regular array get 100000 times 67.413 us/op 59.185 us/op 1.14
wrappedArray get 100000 times 67.425 us/op 59.292 us/op 1.14
arrayWithProxy get 100000 times 32.878 ms/op 40.618 ms/op 0.81
ssz.Root.equals 520.00 ns/op 648.00 ns/op 0.80
byteArrayEquals 439.00 ns/op 510.00 ns/op 0.86
shuffle list - 16384 els 11.156 ms/op 12.206 ms/op 0.91
shuffle list - 250000 els 166.18 ms/op 178.53 ms/op 0.93
processSlot - 1 slots 12.109 us/op 16.677 us/op 0.73
processSlot - 32 slots 1.8962 ms/op 2.8218 ms/op 0.67
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 337.86 us/op 704.30 us/op 0.48
getCommitteeAssignments - req 1 vs - 250000 vc 5.2738 ms/op 5.3994 ms/op 0.98
getCommitteeAssignments - req 100 vs - 250000 vc 7.3208 ms/op 7.9159 ms/op 0.92
getCommitteeAssignments - req 1000 vs - 250000 vc 7.7471 ms/op 8.5652 ms/op 0.90
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 9.5500 ns/op 11.390 ns/op 0.84
state getBlockRootAtSlot - 250000 vs - 7PWei 1.0173 us/op 1.2239 us/op 0.83
computeProposers - vc 250000 17.986 ms/op 21.204 ms/op 0.85
computeEpochShuffling - vc 250000 169.99 ms/op 184.97 ms/op 0.92
getNextSyncCommittee - vc 250000 268.04 ms/op 333.39 ms/op 0.80

by benchmarkbot/action

@wemeetagain wemeetagain merged commit 9ffb72a into unstable Aug 18, 2022
@wemeetagain wemeetagain deleted the dapplion/isValidatePubkeyHex branch August 18, 2022 18:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

isValidatePubkeyHex()regex should be refined to match pattern exactly
2 participants