1 |
daviddavid |
1549244 |
From d2e8846d44789844720c967a20a0d3b044dc1bbc Mon Sep 17 00:00:00 2001 |
2 |
|
|
From: Eric Biggers <ebiggers3@gmail.com> |
3 |
|
|
Date: Sun, 6 Mar 2016 11:54:54 -0600 |
4 |
|
|
Subject: [PATCH 1/2] Do not prematurely terminate string while receiving INCR |
5 |
|
|
transfer |
6 |
|
|
|
7 |
|
|
This fixes a bug where xsel would only output the first 3999 characters |
8 |
|
|
of the selection. |
9 |
|
|
--- |
10 |
|
|
xsel.c | 7 ++++--- |
11 |
|
|
1 file changed, 4 insertions(+), 3 deletions(-) |
12 |
|
|
|
13 |
|
|
diff --git a/xsel.c b/xsel.c |
14 |
|
|
index 79cc68b..b131ca6 100644 |
15 |
|
|
--- a/xsel.c |
16 |
|
|
+++ b/xsel.c |
17 |
|
|
@@ -516,14 +516,15 @@ get_append_property (XSelectionEvent * xsl, unsigned char ** buffer, |
18 |
|
|
print_debug (D_TRACE, "Got zero length property; end of INCR transfer"); |
19 |
|
|
return False; |
20 |
|
|
} else if (format == 8) { |
21 |
|
|
- if ((unsigned long)*offset + length > (unsigned long)*alloc) { |
22 |
|
|
- *alloc = *offset + length; |
23 |
|
|
+ if ((unsigned long)*offset + length + 1 > (unsigned long)*alloc) { |
24 |
|
|
+ *alloc = *offset + length + 1; |
25 |
|
|
if ((*buffer = realloc (*buffer, *alloc)) == NULL) { |
26 |
|
|
exit_err ("realloc error"); |
27 |
|
|
} |
28 |
|
|
} |
29 |
|
|
ptr = *buffer + *offset; |
30 |
|
|
- xs_strncpy (ptr, value, length); |
31 |
|
|
+ memcpy (ptr, value, length); |
32 |
|
|
+ ptr[length] = '\0'; |
33 |
|
|
*offset += length; |
34 |
|
|
print_debug (D_TRACE, "Appended %d bytes to buffer\n", length); |
35 |
|
|
} else { |
36 |
|
|
-- |
37 |
|
|
2.14.3 |
38 |
|
|
|