bug fix for UsefulBuf_CopyOffset; complete tests for UsefulBuf
diff --git a/src/UsefulBuf.c b/src/UsefulBuf.c
index b64c0b5..c8e5d28 100644
--- a/src/UsefulBuf.c
+++ b/src/UsefulBuf.c
@@ -100,13 +100,14 @@
*/
UsefulBufC UsefulBuf_CopyOffset(UsefulBuf Dest, size_t uOffset, const UsefulBufC Src)
{
- if(Src.len > Dest.len - uOffset) {
- return NULLUsefulBufC;
- }
+ // Do this with subtraction so it doesn't give erroneous result if uOffset + Src.len overflows
+ if(uOffset > Dest.len || Src.len > Dest.len - uOffset) { // uOffset + Src.len > Dest.len
+ return NULLUsefulBufC;
+ }
- memcpy(Dest.ptr + uOffset, Src.ptr, Src.len);
+ memcpy(Dest.ptr + uOffset, Src.ptr, Src.len);
- return((UsefulBufC){Dest.ptr, Src.len});
+ return((UsefulBufC){Dest.ptr, Src.len + uOffset});
}