Browse Source

idl: Disallow empty discriminators (#3166)

acheron 1 year ago
parent
commit
85ebc335b0
2 changed files with 17 additions and 1 deletions
  1. 1 0
      CHANGELOG.md
  2. 16 1
      idl/src/build.rs

+ 1 - 0
CHANGELOG.md

@@ -36,6 +36,7 @@ The minor version will be incremented upon a breaking change and the patch versi
 - idl: Check ambiguous discriminators ([#3157](https://github.com/coral-xyz/anchor/pull/3157)).
 - idl: Disallow all zero account discriminators ([#3159](https://github.com/coral-xyz/anchor/pull/3159)).
 - cli: Support non-8-byte discriminators ([#3165](https://github.com/coral-xyz/anchor/pull/3165)).
+- idl: Disallow empty discriminators ([#3166](https://github.com/coral-xyz/anchor/pull/3166)).
 
 ### Fixes
 

+ 16 - 1
idl/src/build.rs

@@ -293,6 +293,22 @@ fn verify(idl: &Idl) -> Result<()> {
         ));
     }
 
+    // Check empty discriminators
+    macro_rules! check_empty_discriminators {
+        ($field:ident) => {
+            if let Some(item) = idl.$field.iter().find(|it| it.discriminator.is_empty()) {
+                return Err(anyhow!(
+                    "Empty discriminators are not allowed for {}: `{}`",
+                    stringify!($field),
+                    item.name
+                ));
+            }
+        };
+    }
+    check_empty_discriminators!(accounts);
+    check_empty_discriminators!(events);
+    check_empty_discriminators!(instructions);
+
     // Check potential discriminator collisions
     macro_rules! check_discriminator_collision {
         ($field:ident) => {
@@ -312,7 +328,6 @@ fn verify(idl: &Idl) -> Result<()> {
             }
         };
     }
-
     check_discriminator_collision!(accounts);
     check_discriminator_collision!(events);
     check_discriminator_collision!(instructions);