From d039128d9aeeae8b301e6265f42bea8858a57c14 Mon Sep 17 00:00:00 2001
From: STEVAN Antoine <antoine.stevan@isae-supaero.fr>
Date: Mon, 27 May 2024 10:47:27 +0000
Subject: [PATCH] fix decoding on empty shards and when less than $k$
 (dragoon/komodo!110)

makes sure
- "inbreeding" experiment quits when there are less than $k$ shards
- `fec::decode` returns `KomodoError::TooFewShards` when no shards are provided
---
 examples/inbreeding/mod.rs | 4 ++++
 src/fec.rs                 | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/examples/inbreeding/mod.rs b/examples/inbreeding/mod.rs
index 8be8e058..c01a0ece 100644
--- a/examples/inbreeding/mod.rs
+++ b/examples/inbreeding/mod.rs
@@ -158,6 +158,10 @@ where
     pb.set_style(sty.clone());
     pb.set_message("main");
     for t in 0..=max_t {
+        if shards.len() < k {
+            break;
+        }
+
         if measurement_schedule(t) {
             let inbreeding = measure_inbreeding(&shards, k, nb_measurements, &mp, &sty, rng);
             println!("{}", inbreeding);
diff --git a/src/fec.rs b/src/fec.rs
index 47993e66..9284d326 100644
--- a/src/fec.rs
+++ b/src/fec.rs
@@ -160,6 +160,10 @@ pub fn encode<F: PrimeField>(
 /// > - if there are too few shards
 /// > - if there are linear dependencies between shards
 pub fn decode<F: PrimeField>(shards: Vec<Shard<F>>) -> Result<Vec<u8>, KomodoError> {
+    if shards.is_empty() {
+        return Err(KomodoError::TooFewShards(0, 0));
+    }
+
     let k = shards[0].k;
     let np = shards.len();
 
-- 
GitLab