Re: memory scribbling while using IOChannels
- From: "Matthias Clasen" <matthiasc poet de>
- To: <gtk-devel-list gnome org>
- Subject: Re: memory scribbling while using IOChannels
- Date: Fri, 24 Aug 2001 10:45:51 +0200
It looks at least suspicious that g_iochannel_fill_buffer holds a reference
to channel->encoded_read_buf->str
over the g_string_set_size call, because g_string_set_size may end up
reallocating that pointer (in g_string_maybe_expand).
The following patch seems to fix your test case.
Matthias
Index: glib/giochannel.c
===================================================================
RCS file: /cvs/gnome/glib/glib/giochannel.c,v
retrieving revision 1.23
diff -u -3 -p -u -r1.23 giochannel.c
--- glib/giochannel.c 2001/08/16 23:02:52 1.23
+++ glib/giochannel.c 2001/08/24 08:43:30
@@ -1212,15 +1212,17 @@ reencode:
- channel->encoded_read_buf->len));
inbuf = channel->read_buf->str;
- outbuf = channel->encoded_read_buf->str +
channel->encoded_read_buf->len;
g_string_set_size (channel->encoded_read_buf,
channel->encoded_read_buf->len + outbytes_left);
+ outbuf = channel->encoded_read_buf->str +
channel->encoded_read_buf->len - outbytes_left;
+
errnum = g_iconv (channel->read_cd, &inbuf, &inbytes_left,
&outbuf, &outbytes_left);
- errval = errno;
+ errval = errno;
+
g_assert (inbuf + inbytes_left == channel->read_buf->str
+ channel->read_buf->len);
g_assert (outbuf + outbytes_left == channel->encoded_read_buf->str
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]