Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 246483 | Differences between
and this patch

Collapse All | Expand All

(-)src/or/buffers.c- (-2 / +4 lines)
Lines 957-963 Link Here
957
    return 0;
957
    return 0;
958
  peek_from_buf(hdr, sizeof(hdr), buf);
958
  peek_from_buf(hdr, sizeof(hdr), buf);
959
959
960
  command = *(uint8_t*)(hdr+2);
960
  /* command = *(uint8_t*)(hdr+2); */
961
  command = get_uint8(hdr+2);
961
  if (!(CELL_COMMAND_IS_VAR_LENGTH(command)))
962
  if (!(CELL_COMMAND_IS_VAR_LENGTH(command)))
962
    return 0;
963
    return 0;
963
964
Lines 966-972 Link Here
966
    return 1;
967
    return 1;
967
  result = var_cell_new(length);
968
  result = var_cell_new(length);
968
  result->command = command;
969
  result->command = command;
969
  result->circ_id = ntohs(*(uint16_t*)hdr);
970
  /* result->circ_id = ntohs(*(uint16_t*)hdr); */
971
  result->circ_id = ntohs(get_uint16(hdr));
970
972
971
  buf_remove_from_front(buf, VAR_CELL_HEADER_SIZE);
973
  buf_remove_from_front(buf, VAR_CELL_HEADER_SIZE);
972
  peek_from_buf(result->payload, length, buf);
974
  peek_from_buf(result->payload, length, buf);
(-)src/or/connection_or.c- (+4 lines)
Lines 157-164 Link Here
157
void
157
void
158
var_cell_pack_header(const var_cell_t *cell, char *hdr_out)
158
var_cell_pack_header(const var_cell_t *cell, char *hdr_out)
159
{
159
{
160
	/*
160
  *(uint16_t*)(hdr_out) = htons(cell->circ_id);
161
  *(uint16_t*)(hdr_out) = htons(cell->circ_id);
161
  *(uint8_t*)(hdr_out+2) = cell->command;
162
  *(uint8_t*)(hdr_out+2) = cell->command;
163
  */
164
  set_uint16(hdr_out, htons(cell->circ_id));
165
  set_uint8(hdr_out+2, cell->command);
162
  set_uint16(hdr_out+3, htons(cell->payload_len));
166
  set_uint16(hdr_out+3, htons(cell->payload_len));
163
}
167
}
164
168
(-)src/common/compat.h- (+2 lines)
Lines 454-461 Link Here
454
/* ===== OS compatibility */
454
/* ===== OS compatibility */
455
const char *get_uname(void);
455
const char *get_uname(void);
456
456
457
uint8_t get_uint8(const char *cp) ATTR_PURE ATTR_NONNULL((1));
457
uint16_t get_uint16(const char *cp) ATTR_PURE ATTR_NONNULL((1));
458
uint16_t get_uint16(const char *cp) ATTR_PURE ATTR_NONNULL((1));
458
uint32_t get_uint32(const char *cp) ATTR_PURE ATTR_NONNULL((1));
459
uint32_t get_uint32(const char *cp) ATTR_PURE ATTR_NONNULL((1));
460
void set_uint8(char *cp, uint8_t v) ATTR_NONNULL((1));
459
void set_uint16(char *cp, uint16_t v) ATTR_NONNULL((1));
461
void set_uint16(char *cp, uint16_t v) ATTR_NONNULL((1));
460
void set_uint32(char *cp, uint32_t v) ATTR_NONNULL((1));
462
void set_uint32(char *cp, uint32_t v) ATTR_NONNULL((1));
461
463
(-)src/common/compat.c- (+21 lines)
Lines 407-412 Link Here
407
#endif
407
#endif
408
408
409
/**
409
/**
410
 * Read a 8-bit value beginning at <b>cp</b>.  Equivalent to
411
 * *(uint8_t*)(cp), but will not cause segfaults on platforms that forbid
412
 * unaligned memory access.  (fmccor@gentoo.org)
413
 */
414
uint8_t
415
get_uint8(const char *cp)
416
{
417
  uint8_t v;
418
  memcpy(&v,cp,1);
419
  return v;
420
}
421
/**
410
 * Read a 16-bit value beginning at <b>cp</b>.  Equivalent to
422
 * Read a 16-bit value beginning at <b>cp</b>.  Equivalent to
411
 * *(uint16_t*)(cp), but will not cause segfaults on platforms that forbid
423
 * *(uint16_t*)(cp), but will not cause segfaults on platforms that forbid
412
 * unaligned memory access.
424
 * unaligned memory access.
Lines 431-436 Link Here
431
  return v;
443
  return v;
432
}
444
}
433
/**
445
/**
446
 * Set a 8-bit value beginning at <b>cp</b> to <b>v</b>. Equivalent to
447
 * *(uint8_t)(cp) = v, but will not cause segfaults on platforms that forbid
448
 * unaligned memory access. (fmccor@gentoo.org) */
449
void
450
set_uint8(char *cp, uint8_t v)
451
{
452
  memcpy(cp,&v,1);
453
}
454
/**
434
 * Set a 16-bit value beginning at <b>cp</b> to <b>v</b>. Equivalent to
455
 * Set a 16-bit value beginning at <b>cp</b> to <b>v</b>. Equivalent to
435
 * *(uint16_t)(cp) = v, but will not cause segfaults on platforms that forbid
456
 * *(uint16_t)(cp) = v, but will not cause segfaults on platforms that forbid
436
 * unaligned memory access. */
457
 * unaligned memory access. */

Return to bug 246483