[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r107936: Backport fix for Bug#1137
From: |
Chong Yidong |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r107936: Backport fix for Bug#11374 from trunk |
Date: |
Wed, 02 May 2012 21:08:38 +0800 |
User-agent: |
Bazaar (2.3.1) |
------------------------------------------------------------
revno: 107936 [merge]
committer: Chong Yidong <address@hidden>
branch nick: emacs-24
timestamp: Wed 2012-05-02 21:08:38 +0800
message:
Backport fix for Bug#11374 from trunk
modified:
lib-src/ChangeLog
lib-src/emacsclient.c
=== modified file 'lib-src/ChangeLog'
--- a/lib-src/ChangeLog 2012-05-02 10:12:13 +0000
+++ b/lib-src/ChangeLog 2012-05-02 13:06:50 +0000
@@ -1,4 +1,11 @@
-2012-05-02 Jim Meyering <address@hidden>
+2012-05-02 Juanma Barranquero <address@hidden>
+
+ * emacsclient.c (min): Undef before redefining it.
+
+2012-05-02 Jim Meyering <address@hidden>
+
+ * emacsclient.c (send_to_emacs): Avoid invalid strcpy upon partial
+ send (Bug#11374).
* lib-src/pop.c (pop_stat, pop_list, pop_multi_first, pop_last):
NUL-terminate the error buffer (Bug#11372).
=== modified file 'lib-src/emacsclient.c'
--- a/lib-src/emacsclient.c 2012-04-15 08:49:24 +0000
+++ b/lib-src/emacsclient.c 2012-05-02 13:06:50 +0000
@@ -119,6 +119,11 @@
# define IF_LINT(Code) /* empty */
#endif
+#ifdef min
+#undef min
+#endif
+#define min(x, y) (((x) < (y)) ? (x) : (y))
+
/* Name used to invoke this program. */
const char *progname;
@@ -783,33 +788,35 @@
static void
send_to_emacs (HSOCKET s, const char *data)
{
- while (data)
+ size_t dlen;
+
+ if (!data)
+ return;
+
+ dlen = strlen (data);
+ while (*data)
{
- size_t dlen = strlen (data);
- if (dlen + sblen >= SEND_BUFFER_SIZE)
- {
- int part = SEND_BUFFER_SIZE - sblen;
- strncpy (&send_buffer[sblen], data, part);
- data += part;
- sblen = SEND_BUFFER_SIZE;
- }
- else if (dlen)
- {
- strcpy (&send_buffer[sblen], data);
- data = NULL;
- sblen += dlen;
- }
- else
- break;
+ size_t part = min (dlen, SEND_BUFFER_SIZE - sblen);
+ memcpy (&send_buffer[sblen], data, part);
+ data += part;
+ sblen += part;
if (sblen == SEND_BUFFER_SIZE
|| (sblen > 0 && send_buffer[sblen-1] == '\n'))
{
int sent = send (s, send_buffer, sblen, 0);
+ if (sent < 0)
+ {
+ message (TRUE, "%s: failed to send %d bytes to socket: %s\n",
+ progname, sblen, strerror (errno));
+ fail ();
+ }
if (sent != sblen)
- strcpy (send_buffer, &send_buffer[sent]);
+ memmove (send_buffer, &send_buffer[sent], sblen - sent);
sblen -= sent;
}
+
+ dlen -= part;
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/emacs-24 r107936: Backport fix for Bug#11374 from trunk,
Chong Yidong <=