diff mbox

[2/2] libc/memmove: Correct the buffer overlap condition

Message ID 20150204095205.27285.46222.stgit@localhost.localdomain
State Changes Requested
Headers show

Commit Message

Neelesh Gupta Feb. 4, 2015, 9:52 a.m. UTC
Signed-off-by: Neelesh Gupta <neelegup@linux.vnet.ibm.com>
---
 libc/string/memmove.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Stewart Smith Feb. 5, 2015, 12:48 a.m. UTC | #1
Neelesh Gupta <neelegup@linux.vnet.ibm.com> writes:
> diff --git a/libc/string/memmove.c b/libc/string/memmove.c
> index 3acf1a9..844f300 100644
> --- a/libc/string/memmove.c
> +++ b/libc/string/memmove.c
> @@ -21,15 +21,14 @@ memmove(void *dest, const void *src, size_t n)
>  	int i;
>  
>  	/* Do the buffers overlap in a bad way? */
> -	if (src < dest && src + n >= dest) {
> +	if (src < dest && src + n - 1 >= dest) {
>  		/* Copy from end to start */
>  		cdest = dest + n - 1;
>  		csrc = src + n - 1;
>  		for (i = 0; i < n; i++) {
>  			*cdest-- = *csrc--;
>  		}
> -	}
> -	else {
> +	} else {

Have a test to add?
Neelesh Gupta Feb. 5, 2015, 4:01 a.m. UTC | #2
On 02/05/2015 06:18 AM, Stewart Smith wrote:
> Neelesh Gupta <neelegup@linux.vnet.ibm.com> writes:
>> diff --git a/libc/string/memmove.c b/libc/string/memmove.c
>> index 3acf1a9..844f300 100644
>> --- a/libc/string/memmove.c
>> +++ b/libc/string/memmove.c
>> @@ -21,15 +21,14 @@ memmove(void *dest, const void *src, size_t n)
>>   	int i;
>>   
>>   	/* Do the buffers overlap in a bad way? */
>> -	if (src < dest && src + n >= dest) {
>> +	if (src < dest && src + n - 1 >= dest) {
>>   		/* Copy from end to start */
>>   		cdest = dest + n - 1;
>>   		csrc = src + n - 1;
>>   		for (i = 0; i < n; i++) {
>>   			*cdest-- = *csrc--;
>>   		}
>> -	}
>> -	else {
>> +	} else {
> Have a test to add?

Definitely, in my TODO list. Planning to send them in a separate series
sometime later..

Neelesh.
diff mbox

Patch

diff --git a/libc/string/memmove.c b/libc/string/memmove.c
index 3acf1a9..844f300 100644
--- a/libc/string/memmove.c
+++ b/libc/string/memmove.c
@@ -21,15 +21,14 @@  memmove(void *dest, const void *src, size_t n)
 	int i;
 
 	/* Do the buffers overlap in a bad way? */
-	if (src < dest && src + n >= dest) {
+	if (src < dest && src + n - 1 >= dest) {
 		/* Copy from end to start */
 		cdest = dest + n - 1;
 		csrc = src + n - 1;
 		for (i = 0; i < n; i++) {
 			*cdest-- = *csrc--;
 		}
-	}
-	else {
+	} else {
 		/* Normal copy is possible */
 		cdest = dest;
 		csrc = src;