Skip to content

Commit

Permalink
Fix ubsan applying zero offset to null pointer occurred in unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
tatsuhiro-t committed Jun 5, 2020
1 parent 78a56cf commit cf094bd
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
22 changes: 19 additions & 3 deletions lib/nghttp2_frame.c
Original file line number Diff line number Diff line change
Expand Up @@ -899,9 +899,25 @@ nghttp2_settings_entry *nghttp2_frame_iv_copy(const nghttp2_settings_entry *iv,
}

int nghttp2_nv_equal(const nghttp2_nv *a, const nghttp2_nv *b) {
return a->namelen == b->namelen && a->valuelen == b->valuelen &&
memcmp(a->name, b->name, a->namelen) == 0 &&
memcmp(a->value, b->value, a->valuelen) == 0;
if (a->namelen != b->namelen || a->valuelen != b->valuelen) {
return 0;
}

if (a->name == NULL || b->name == NULL) {
assert(a->namelen == 0);
assert(b->namelen == 0);
} else if (memcmp(a->name, b->name, a->namelen) != 0) {
return 0;
}

if (a->value == NULL || b->value == NULL) {
assert(a->valuelen == 0);
assert(b->valuelen == 0);
} else if (memcmp(a->value, b->value, a->valuelen) != 0) {
return 0;
}

return 1;
}

void nghttp2_nv_array_del(nghttp2_nv *nva, nghttp2_mem *mem) {
Expand Down
12 changes: 11 additions & 1 deletion lib/nghttp2_session.c
Original file line number Diff line number Diff line change
Expand Up @@ -5353,9 +5353,11 @@ static ssize_t inbound_frame_effective_readlen(nghttp2_inbound_frame *iframe,
return (ssize_t)(readlen);
}

static const uint8_t sin[] = {0};

ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
size_t inlen) {
const uint8_t *first = in, *last = in + inlen;
const uint8_t *first, *last;
nghttp2_inbound_frame *iframe = &session->iframe;
size_t readlen;
ssize_t padlen;
Expand All @@ -5366,6 +5368,14 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in,
size_t pri_fieldlen;
nghttp2_mem *mem;

if (in == NULL) {
assert(inlen == 0);
in = sin;
}

first = in;
last = in + inlen;

DEBUGF("recv: connection recv_window_size=%d, local_window=%d\n",
session->recv_window_size, session->local_window_size);

Expand Down

0 comments on commit cf094bd

Please sign in to comment.