Catch more possible instances of passing NULL to memcpy.

Actually fixes #1976.
This commit is contained in:
Shea Levy 2018-03-14 23:53:43 -04:00
parent d25d9f7cec
commit cfdbfa6b2c
No known key found for this signature in database
GPG key ID: 5C0BD6957D86FE27
3 changed files with 10 additions and 4 deletions

View file

@ -1601,12 +1601,16 @@ static void prim_partition(EvalState & state, const Pos & pos, Value * * args, V
state.mkAttrs(v, 2); state.mkAttrs(v, 2);
Value * vRight = state.allocAttr(v, state.sRight); Value * vRight = state.allocAttr(v, state.sRight);
state.mkList(*vRight, right.size()); auto rsize = right.size();
memcpy(vRight->listElems(), right.data(), sizeof(Value *) * right.size()); state.mkList(*vRight, rsize);
if (rsize)
memcpy(vRight->listElems(), right.data(), sizeof(Value *) * rsize);
Value * vWrong = state.allocAttr(v, state.sWrong); Value * vWrong = state.allocAttr(v, state.sWrong);
state.mkList(*vWrong, wrong.size()); auto wsize = wrong.size();
memcpy(vWrong->listElems(), wrong.data(), sizeof(Value *) * wrong.size()); state.mkList(*vWrong, wsize);
if (wsize)
memcpy(vWrong->listElems(), wrong.data(), sizeof(Value *) * wsize);
v.attrs->sort(); v.attrs->sort();
} }

View file

@ -195,6 +195,7 @@ struct CurlDownloader : public Downloader
if (readOffset == request.data->length()) if (readOffset == request.data->length())
return 0; return 0;
auto count = std::min(size * nitems, request.data->length() - readOffset); auto count = std::min(size * nitems, request.data->length() - readOffset);
assert(count);
memcpy(buffer, request.data->data() + readOffset, count); memcpy(buffer, request.data->data() + readOffset, count);
readOffset += count; readOffset += count;
return count; return count;

View file

@ -191,6 +191,7 @@ Hash::Hash(const std::string & s, HashType type)
auto d = base64Decode(std::string(s, pos)); auto d = base64Decode(std::string(s, pos));
if (d.size() != hashSize) if (d.size() != hashSize)
throw BadHash("invalid base-64 hash '%s'", s); throw BadHash("invalid base-64 hash '%s'", s);
assert(hashSize);
memcpy(hash, d.data(), hashSize); memcpy(hash, d.data(), hashSize);
} }