Erlang/OTP Forums

Author Message

<  Erlang patches mailing list  ~  [PATCH] Truncate debug messages

Guest
Posted: Mon Apr 12, 2010 1:24 am Reply with quote
Guest
When the undocumented ERL_INET_GETHOST_DEBUG environment variable
is set to 5, very long hostnames can overflow the buffer used to
construct the debug message. Truncate the domain name to 255 bytes
(DOMAINNAME_MAX-3).

export ERL_INET_GETHOST_DEBUG=5
inet:gethostbyname(lists:duplicate(5000,"x")).
---
erts/etc/common/inet_gethost.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index ff16ee0..17f83e2 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -1746,7 +1746,7 @@ static int worker_loop(void)
}
proto = get_proto(req);
data = get_data(req);
- DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %s.",
+ DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %.255s.",
op,proto,data));
/* Got a request, lets go... */
switch (op) {
@@ -1762,14 +1762,14 @@ static int worker_loop(void)
hints.ai_flags = (AI_CANONNAME|AI_V4MAPPED|AI_ADDRCONFIG);
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET6;
- DEBUGF(5, ("Starting getaddrinfo(%s, ...)", data));
+ DEBUGF(5, ("Starting getaddrinfo(%.255s, ...)", data));
error_num = getaddrinfo((char *)data, NULL, &hints, &ai);
DEBUGF(5,("getaddrinfo returned %d", error_num));
if (error_num) {
error_num = map_netdb_error_ai(error_num);
}
#elif defined(HAVE_GETIPNODEBYNAME) /*#ifdef HAVE_GETADDRINFO */
- DEBUGF(5,("Starting getipnodebyname(%s)",data));
+ DEBUGF(5,("Starting getipnodebyname(%.255s)",data));
he = getipnodebyname(data, AF_INET6, AI_DEFAULT, &error_num);
if (he) {
free_he = 1;
@@ -1780,7 +1780,7 @@ static int worker_loop(void)
error_num = map_netdb_error(error_num);
}
#elif defined(HAVE_GETHOSTBYNAME2) /*#ifdef HAVE_GETADDRINFO */
- DEBUGF(5,("Starting gethostbyname2(%s, AF_INET6)",data));
+ DEBUGF(5,("Starting gethostbyname2(%.255s, AF_INET6)",data));
he = gethostbyname2((char*)data, AF_INET6);
if (he) {
error_num = 0;
@@ -1796,7 +1796,7 @@ static int worker_loop(void)
#endif /*ifdef HAVE_IN6 */

case PROTO_IPV4: { /* switch (proto) { */
- DEBUGF(5,("Starting gethostbyname(%s)",data));
+ DEBUGF(5,("Starting gethostbyname(%.255s)",data));
he = gethostbyname((char*)data);
if (he) {
error_num = 0;
--
1.5.6.4


________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Mon Apr 12, 2010 1:24 am Reply with quote
Guest
When the undocumented ERL_INET_GETHOST_DEBUG environment variable
is set to 5, very long hostnames can overflow the buffer used to
construct the debug message. Truncate the domain name to 255 bytes
(DOMAINNAME_MAX-3).

export ERL_INET_GETHOST_DEBUG=5
inet:gethostbyname(lists:duplicate(5000,"x")).
---
erts/etc/common/inet_gethost.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index ff16ee0..17f83e2 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -1746,7 +1746,7 @@ static int worker_loop(void)
}
proto = get_proto(req);
data = get_data(req);
- DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %s.",
+ DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %.255s.",
op,proto,data));
/* Got a request, lets go... */
switch (op) {
@@ -1762,14 +1762,14 @@ static int worker_loop(void)
hints.ai_flags = (AI_CANONNAME|AI_V4MAPPED|AI_ADDRCONFIG);
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET6;
- DEBUGF(5, ("Starting getaddrinfo(%s, ...)", data));
+ DEBUGF(5, ("Starting getaddrinfo(%.255s, ...)", data));
error_num = getaddrinfo((char *)data, NULL, &hints, &ai);
DEBUGF(5,("getaddrinfo returned %d", error_num));
if (error_num) {
error_num = map_netdb_error_ai(error_num);
}
#elif defined(HAVE_GETIPNODEBYNAME) /*#ifdef HAVE_GETADDRINFO */
- DEBUGF(5,("Starting getipnodebyname(%s)",data));
+ DEBUGF(5,("Starting getipnodebyname(%.255s)",data));
he = getipnodebyname(data, AF_INET6, AI_DEFAULT, &error_num);
if (he) {
free_he = 1;
@@ -1780,7 +1780,7 @@ static int worker_loop(void)
error_num = map_netdb_error(error_num);
}
#elif defined(HAVE_GETHOSTBYNAME2) /*#ifdef HAVE_GETADDRINFO */
- DEBUGF(5,("Starting gethostbyname2(%s, AF_INET6)",data));
+ DEBUGF(5,("Starting gethostbyname2(%.255s, AF_INET6)",data));
he = gethostbyname2((char*)data, AF_INET6);
if (he) {
error_num = 0;
@@ -1796,7 +1796,7 @@ static int worker_loop(void)
#endif /*ifdef HAVE_IN6 */

case PROTO_IPV4: { /* switch (proto) { */
- DEBUGF(5,("Starting gethostbyname(%s)",data));
+ DEBUGF(5,("Starting gethostbyname(%.255s)",data));
he = gethostbyname((char*)data);
if (he) {
error_num = 0;
--
1.5.6.4


________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Mon Apr 12, 2010 9:47 am Reply with quote
Guest
Michael Santos writes:
> When the undocumented ERL_INET_GETHOST_DEBUG environment variable
> is set to 5, very long hostnames can overflow the buffer used to
> construct the debug message. Truncate the domain name to 255 bytes
> (DOMAINNAME_MAX-3).
>
> export ERL_INET_GETHOST_DEBUG=5
> inet:gethostbyname(lists:duplicate(5000,"x")).
> ---
> erts/etc/common/inet_gethost.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
> index ff16ee0..17f83e2 100644
> --- a/erts/etc/common/inet_gethost.c
> +++ b/erts/etc/common/inet_gethost.c
> @@ -1746,7 +1746,7 @@ static int worker_loop(void)
> }
> proto = get_proto(req);
> data = get_data(req);
> - DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %s.",
> + DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %.255s.",

etc.

I believe the better solution is to replace the unsafe vsprintf()
calls in inet_gethost.c with erts_vsnprintf() calls.

________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Mon Apr 12, 2010 9:48 am Reply with quote
Guest
Michael Santos writes:
> When the undocumented ERL_INET_GETHOST_DEBUG environment variable
> is set to 5, very long hostnames can overflow the buffer used to
> construct the debug message. Truncate the domain name to 255 bytes
> (DOMAINNAME_MAX-3).
>
> export ERL_INET_GETHOST_DEBUG=5
> inet:gethostbyname(lists:duplicate(5000,"x")).
> ---
> erts/etc/common/inet_gethost.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
> index ff16ee0..17f83e2 100644
> --- a/erts/etc/common/inet_gethost.c
> +++ b/erts/etc/common/inet_gethost.c
> @@ -1746,7 +1746,7 @@ static int worker_loop(void)
> }
> proto = get_proto(req);
> data = get_data(req);
> - DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %s.",
> + DEBUGF(4,("Worker got request, op = %d, proto = %d, data = %.255s.",

etc.

I believe the better solution is to replace the unsafe vsprintf()
calls in inet_gethost.c with erts_vsnprintf() calls.

________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Tue Apr 13, 2010 12:22 am Reply with quote
Guest
When the undocumented ERL_INET_GETHOST_DEBUG environment variable
is set to 5, very long hostnames can overflow the buffer used to
construct the debug message. Truncate debug messages if they exceed
the size of the buffer.

export ERL_INET_GETHOST_DEBUG=5
inet:gethostbyname(lists:duplicate(5000,"x")).
---
erts/etc/common/Makefile.in | 10 +++++-----
erts/etc/common/inet_gethost.c | 8 +++++---
2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/erts/etc/common/Makefile.in b/erts/etc/common/Makefile.in
index 3db4fcb..d2a5080 100644
--- a/erts/etc/common/Makefile.in
+++ b/erts/etc/common/Makefile.in
@@ -96,9 +96,9 @@ endif

# On windows we always need reentrant libraries.
ifeq ($(TARGET),win32)
-ERLEXEC_XLIBS=-L../../lib/internal/$(TARGET) -lerts_internal_r$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
+ERTS_INTERNAL_LIBS=-L../../lib/internal/$(TARGET) -lerts_internal_r$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
else
-ERLEXEC_XLIBS=-L../../lib/internal/$(TARGET) -lerts_internal$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
+ERTS_INTERNAL_LIBS=-L../../lib/internal/$(TARGET) -lerts_internal$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
endif

# ----------------------------------------------------
@@ -295,7 +295,7 @@ $(OBJDIR)/inet_gethost.o: inet_gethost.c
$(CC) $(CFLAGS) -o $@ -c inet_gethost.c

$(BINDIR)/inet_gethost@EXEEXT@: $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ)
- $(PURIFY) $(LD) $(LDFLAGS) $(ENTRY_LDFLAGS) -o $@ $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(LIBS)
+ $(PURIFY) $(LD) $(LDFLAGS) $(ENTRY_LDFLAGS) -o $@ $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(LIBS) $(ERTS_INTERNAL_LIBS)

$(BINDIR)/run_erl: $(OBJDIR)/safe_string.o $(OBJDIR)/run_erl.o
$(LD) $(LDFLAGS) -o $@ $(OBJDIR)/safe_string.o $(OBJDIR)/run_erl.o $(LIBS)
@@ -320,7 +320,7 @@ $(OBJDIR)/safe_string.o: ../unix/safe_string.c

ifneq ($(TARGET),win32)
$(BINDIR)/$(ERLEXEC): $(OBJDIR)/$(ERLEXEC).o
- $(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/$(ERLEXEC).o $(ERLEXEC_XLIBS)
+ $(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/$(ERLEXEC).o $(ERTS_INTERNAL_LIBS)

$(OBJDIR)/$(ERLEXEC).o: $(ERLEXECDIR)/$(ERLEXEC).c
$(CC) -I$(EMUDIR) $(CFLAGS) -o $@ -c $(ERLEXECDIR)/$(ERLEXEC).c
@@ -360,7 +360,7 @@ $(OBJDIR)/escript.o: escript.c
ifeq ($(TARGET),win32)

$(BINDIR)/$(ERLEXEC): $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ)
- $(LD) -dll $(LDFLAGS) -o $@ $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERLEXEC_XLIBS)
+ $(LD) -dll $(LDFLAGS) -o $@ $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERTS_INTERNAL_LIBS)

$(BINDIR)/erl@EXEEXT@: $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ)
$(LD) $(LDFLAGS) -o $@ $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ)
diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index ff16ee0..bd2be47 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -52,6 +52,8 @@
# include "config.h"
#endif

+#include "erl_printf.h"
+
#ifdef WIN32

#define WIN32_LEAN_AND_MEAN
@@ -2552,7 +2554,7 @@ static void debugf(char *format, ...)
sprintf(buff,"%s[%d] (DEBUG):",program_name,(int) getpid());
#endif
ptr = buff + strlen(buff);
- vsprintf(ptr,format,ap);
+ erts_vsnprintf(ptr,sizeof(buff)-strlen(buff)-2,format,ap);
strcat(ptr,"\r\n");
#ifdef WIN32
if (debug_console_allocated != INVALID_HANDLE_VALUE) {
@@ -2574,7 +2576,7 @@ static void warning(char *format, ...)
va_start(ap,format);
sprintf(buff,"%s[%d]: WARNING:",program_name, (int) getpid());
ptr = buff + strlen(buff);
- vsprintf(ptr,format,ap);
+ erts_vsnprintf(ptr,sizeof(buff)-strlen(buff)-2,format,ap);
strcat(ptr,"\r\n");
#ifdef WIN32
{
@@ -2596,7 +2598,7 @@ static void fatal(char *format, ...)
va_start(ap,format);
sprintf(buff,"%s[%d]: FATAL ERROR:",program_name, (int) getpid());
ptr = buff + strlen(buff);
- vsprintf(ptr,format,ap);
+ erts_vsnprintf(ptr,sizeof(buff)-strlen(buff)-2,format,ap);
strcat(ptr,"\r\n");
#ifdef WIN32
{
--
1.5.6.4


________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Tue Apr 13, 2010 12:22 am Reply with quote
Guest
When the undocumented ERL_INET_GETHOST_DEBUG environment variable
is set to 5, very long hostnames can overflow the buffer used to
construct the debug message. Truncate debug messages if they exceed
the size of the buffer.

export ERL_INET_GETHOST_DEBUG=5
inet:gethostbyname(lists:duplicate(5000,"x")).
---
erts/etc/common/Makefile.in | 10 +++++-----
erts/etc/common/inet_gethost.c | 8 +++++---
2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/erts/etc/common/Makefile.in b/erts/etc/common/Makefile.in
index 3db4fcb..d2a5080 100644
--- a/erts/etc/common/Makefile.in
+++ b/erts/etc/common/Makefile.in
@@ -96,9 +96,9 @@ endif

# On windows we always need reentrant libraries.
ifeq ($(TARGET),win32)
-ERLEXEC_XLIBS=-L../../lib/internal/$(TARGET) -lerts_internal_r$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
+ERTS_INTERNAL_LIBS=-L../../lib/internal/$(TARGET) -lerts_internal_r$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
else
-ERLEXEC_XLIBS=-L../../lib/internal/$(TARGET) -lerts_internal$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
+ERTS_INTERNAL_LIBS=-L../../lib/internal/$(TARGET) -lerts_internal$(ERTS_LIB_TYPEMARKER) @ERTS_INTERNAL_X_LIBS@
endif

# ----------------------------------------------------
@@ -295,7 +295,7 @@ $(OBJDIR)/inet_gethost.o: inet_gethost.c
$(CC) $(CFLAGS) -o $@ -c inet_gethost.c

$(BINDIR)/inet_gethost@EXEEXT@: $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ)
- $(PURIFY) $(LD) $(LDFLAGS) $(ENTRY_LDFLAGS) -o $@ $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(LIBS)
+ $(PURIFY) $(LD) $(LDFLAGS) $(ENTRY_LDFLAGS) -o $@ $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(LIBS) $(ERTS_INTERNAL_LIBS)

$(BINDIR)/run_erl: $(OBJDIR)/safe_string.o $(OBJDIR)/run_erl.o
$(LD) $(LDFLAGS) -o $@ $(OBJDIR)/safe_string.o $(OBJDIR)/run_erl.o $(LIBS)
@@ -320,7 +320,7 @@ $(OBJDIR)/safe_string.o: ../unix/safe_string.c

ifneq ($(TARGET),win32)
$(BINDIR)/$(ERLEXEC): $(OBJDIR)/$(ERLEXEC).o
- $(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/$(ERLEXEC).o $(ERLEXEC_XLIBS)
+ $(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/$(ERLEXEC).o $(ERTS_INTERNAL_LIBS)

$(OBJDIR)/$(ERLEXEC).o: $(ERLEXECDIR)/$(ERLEXEC).c
$(CC) -I$(EMUDIR) $(CFLAGS) -o $@ -c $(ERLEXECDIR)/$(ERLEXEC).c
@@ -360,7 +360,7 @@ $(OBJDIR)/escript.o: escript.c
ifeq ($(TARGET),win32)

$(BINDIR)/$(ERLEXEC): $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ)
- $(LD) -dll $(LDFLAGS) -o $@ $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERLEXEC_XLIBS)
+ $(LD) -dll $(LDFLAGS) -o $@ $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERTS_INTERNAL_LIBS)

$(BINDIR)/erl@EXEEXT@: $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ)
$(LD) $(LDFLAGS) -o $@ $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ)
diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index ff16ee0..bd2be47 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -52,6 +52,8 @@
# include "config.h"
#endif

+#include "erl_printf.h"
+
#ifdef WIN32

#define WIN32_LEAN_AND_MEAN
@@ -2552,7 +2554,7 @@ static void debugf(char *format, ...)
sprintf(buff,"%s[%d] (DEBUG):",program_name,(int) getpid());
#endif
ptr = buff + strlen(buff);
- vsprintf(ptr,format,ap);
+ erts_vsnprintf(ptr,sizeof(buff)-strlen(buff)-2,format,ap);
strcat(ptr,"\r\n");
#ifdef WIN32
if (debug_console_allocated != INVALID_HANDLE_VALUE) {
@@ -2574,7 +2576,7 @@ static void warning(char *format, ...)
va_start(ap,format);
sprintf(buff,"%s[%d]: WARNING:",program_name, (int) getpid());
ptr = buff + strlen(buff);
- vsprintf(ptr,format,ap);
+ erts_vsnprintf(ptr,sizeof(buff)-strlen(buff)-2,format,ap);
strcat(ptr,"\r\n");
#ifdef WIN32
{
@@ -2596,7 +2598,7 @@ static void fatal(char *format, ...)
va_start(ap,format);
sprintf(buff,"%s[%d]: FATAL ERROR:",program_name, (int) getpid());
ptr = buff + strlen(buff);
- vsprintf(ptr,format,ap);
+ erts_vsnprintf(ptr,sizeof(buff)-strlen(buff)-2,format,ap);
strcat(ptr,"\r\n");
#ifdef WIN32
{
--
1.5.6.4


________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Tue Apr 13, 2010 5:40 am Reply with quote
Guest
On Tue, Apr 13, 2010 at 2:22 AM, Michael Santos
<michael.santos@gmail.com> wrote:
> When the undocumented ERL_INET_GETHOST_DEBUG environment variable
> is set to 5, very long hostnames can overflow the buffer used to
> construct the debug message. Truncate debug messages if they exceed
> the size of the buffer.

Thanks! Will include in 'pu'.

--
Björn Gustavsson, Erlang/OTP, Ericsson AB

________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist
Guest
Posted: Tue Apr 13, 2010 5:40 am Reply with quote
Guest
On Tue, Apr 13, 2010 at 2:22 AM, Michael Santos
<michael.santos@gmail.com> wrote:
> When the undocumented ERL_INET_GETHOST_DEBUG environment variable
> is set to 5, very long hostnames can overflow the buffer used to
> construct the debug message. Truncate debug messages if they exceed
> the size of the buffer.

Thanks! Will include in 'pu'.

--
Björn Gustavsson, Erlang/OTP, Ericsson AB

________________________________________________________________
erlang-patches (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:erlang-patches-unsubscribe@erlang.org

Post received from mailinglist

Display posts from previous:  

All times are GMT
Page 1 of 1
This forum is locked: you cannot post, reply to, or edit topics.

Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum