Browse Source

Be a little more defensive when reading single bits

Read a whole byte, but keep only the low bit.
Ian Goldberg 1 year ago
parent
commit
a3baa02860
2 changed files with 6 additions and 2 deletions
  1. 3 1
      mpcio.cpp
  2. 3 1
      rdpf.cpp

+ 3 - 1
mpcio.cpp

@@ -473,7 +473,9 @@ SelectTriple MPCTIO::selecttriple()
     if (mpcio.player < 2) {
         MPCPeerIO &mpcpio = static_cast<MPCPeerIO&>(mpcio);
         if (mpcpio.preprocessing) {
-            recv_server(&val.X, sizeof(val.X));
+            uint8_t Xbyte;
+            recv_server(&Xbyte, sizeof(Xbyte));
+            val.X = Xbyte & 1;
             recv_server(&val.Y, sizeof(val.Y));
             recv_server(&val.Z, sizeof(val.Z));
         } else {

+ 3 - 1
rdpf.cpp

@@ -154,7 +154,9 @@ RDPF::RDPF(MPCTIO &tio, yield_t &yield,
             [&](yield_t &yield) {
                 tio.queue_peer(&our_parity_bit, 1);
                 yield();
-                tio.recv_peer(&peer_parity_bit, 1);
+                uint8_t peer_parity_byte;
+                tio.recv_peer(&peer_parity_byte, 1);
+                peer_parity_bit = peer_parity_byte & 1;
             });
         coroutines.emplace_back(
             [&](yield_t &yield) {