Commit 3b646bf8 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Fix ntohs() that should have been htons()

Fixes bug 23106; bugfix on 0.2.4.8-alpha.

Fortunately, we only support big-endian and little-endian platforms,
and on both of those, hton*() and ntoh*() behave the same.  And if
we did start to support middle endian systems (haha, no), most of
_those_ have hton*(x) == ntoh*(x) too.
parent 32b4fd5b
Loading
Loading
Loading
Loading

changes/bug23106

0 → 100644
+5 −0
Original line number Diff line number Diff line
  o Minor bugfixes (code correctness):
    - Call htons() in extend_cell_format() for encoding a 16-bit
      value. Previously we used ntohs(), which happens to behave the
      same on all the platforms we support, but which isn't really
      correct. Fixes bug 23106; bugfix on 0.2.4.8-alpha.
+1 −1
Original line number Diff line number Diff line
@@ -1219,7 +1219,7 @@ extend_cell_format(uint8_t *command_out, uint16_t *len_out,
      *command_out = RELAY_COMMAND_EXTEND;
      *len_out = 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN;
      set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr));
      set_uint16(p+4, ntohs(cell_in->orport_ipv4.port));
      set_uint16(p+4, htons(cell_in->orport_ipv4.port));
      if (cell_in->create_cell.handshake_type == ONION_HANDSHAKE_TYPE_NTOR) {
        memcpy(p+6, NTOR_CREATE_MAGIC, 16);
        memcpy(p+22, cell_in->create_cell.onionskin, NTOR_ONIONSKIN_LEN);