]> Git Repo - VerusCoin.git/commit - src/script.h
Avoid undefined behavior using CFlatData in CScript serialization
authorWladimir J. van der Laan <[email protected]>
Thu, 5 Jun 2014 08:10:52 +0000 (10:10 +0200)
committerWladimir J. van der Laan <[email protected]>
Mon, 23 Jun 2014 08:38:15 +0000 (10:38 +0200)
commitfa126effc2a03e22708960344e62fc21259deb23
treebb21fb6b131efe0dd5448765c5240ba208d54945
parent52d4abfdef93cd622b297a092eb6639e678bcb9d
Avoid undefined behavior using CFlatData in CScript serialization

`&vch[vch.size()]` and even `&vch[0]` on vectors can cause assertion
errors with VC in debug mode. This is the problem mentioned in #4239.
The deeper problem with this is that we rely on undefined behavior.

- Add `begin_ptr` and `end_ptr` functions that get the beginning and end
  pointer of vector in a reliable way that copes with empty vectors and
  doesn't reference outside the vector
(see https://stackoverflow.com/questions/1339470/how-to-get-the-address-of-the-stdvector-buffer-start-most-elegantly/1339767#1339767).
- Add a convenience constructor to CFlatData that wraps a vector.

I added `begin_ptr` and `end_ptr` as separate functions as I imagine
they will be useful in more places.
src/script.h
src/serialize.h
This page took 0.026639 seconds and 4 git commands to generate.