diff options
author | osku@127.(none) <> | 2005-09-29 13:02:18 +0300 |
---|---|---|
committer | osku@127.(none) <> | 2005-09-29 13:02:18 +0300 |
commit | ad5243671176832bff058bbb3f6dcf10211315b5 (patch) | |
tree | a9705f364c5027166020d94dd5da2f9092fb04a8 /innobase/ut | |
parent | acdc193a45a7f2952867a3d3f2373dd42e887ef2 (diff) | |
download | mariadb-git-ad5243671176832bff058bbb3f6dcf10211315b5.tar.gz |
InnoDB: Fix potential buffer underflow.
Diffstat (limited to 'innobase/ut')
-rw-r--r-- | innobase/ut/ut0mem.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/innobase/ut/ut0mem.c b/innobase/ut/ut0mem.c index c1e3ebbf35c..47b1e24e5e1 100644 --- a/innobase/ut/ut0mem.c +++ b/innobase/ut/ut0mem.c @@ -364,7 +364,30 @@ ut_strlcpy( dst[n] = '\0'; } - return src_size; + return(src_size); +} + +/************************************************************************** +Like ut_strlcpy, but if src doesn't fit in dst completely, copies the last +(size - 1) bytes of src, not the first. */ + +ulint +ut_strlcpy_rev( +/*===========*/ + /* out: strlen(src) */ + char* dst, /* in: destination buffer */ + const char* src, /* in: source buffer */ + ulint size) /* in: size of destination buffer */ +{ + ulint src_size = strlen(src); + + if (size != 0) { + ulint n = ut_min(src_size, size - 1); + + memcpy(dst, src + src_size - n, n + 1); + } + + return(src_size); } /************************************************************************** |