Skip to content

Commit

Permalink
src: only memcmp if length > 0 in Buffer::Compare
Browse files Browse the repository at this point in the history
Both pointer arguments to memcmp are defined as non-null
and compiler optimizes upon that.

PR-URL: #2544
Reviewed-By: Trevor Norris <[email protected]>
Reviewed-by: Sakthipriyan Vairamani <[email protected]>
  • Loading branch information
skomski authored and trevnorris committed Sep 1, 2015
1 parent aa6cd0f commit e4bd2af
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/node_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -835,7 +835,7 @@ void Compare(const FunctionCallbackInfo<Value> &args) {

size_t cmp_length = MIN(obj_a_length, obj_b_length);

int32_t val = memcmp(obj_a_data, obj_b_data, cmp_length);
int val = cmp_length > 0 ? memcmp(obj_a_data, obj_b_data, cmp_length) : 0;

// Normalize val to be an integer in the range of [1, -1] since
// implementations of memcmp() can vary by platform.
Expand Down
3 changes: 3 additions & 0 deletions test/parallel/test-buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -1137,6 +1137,9 @@ assert.equal(Buffer.compare(d, b), 1);
assert.equal(Buffer.compare(b, d), -1);
assert.equal(Buffer.compare(c, c), 0);

assert.equal(Buffer.compare(Buffer(0), Buffer(0)), 0);
assert.equal(Buffer.compare(Buffer(0), Buffer(1)), -1);
assert.equal(Buffer.compare(Buffer(1), Buffer(0)), 1);

assert.throws(function() {
var b = new Buffer(1);
Expand Down

0 comments on commit e4bd2af

Please sign in to comment.