mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [BUG] readline history
@ 2014-08-28  7:50 Teresa Gamez
  2014-08-28  8:35 ` Alexander Aring
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Teresa Gamez @ 2014-08-28  7:50 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Hello Sascha,

I noticed a bug on the latest master.
When no history is present and I hit the arrow up key, I get:

unable to handle NULL pointer dereference at address 0x00000001
pc : [<9fe243ba>]    lr : [<9fe268cf>]
sp : 9ffff9d0  ip : 00000016  fp : 00000002
r10: 00000001  r9 : 9fe549dc  r8 : 9fe65d08
r7 : 00000400  r6 : 00000001  r5 : 00000000  r4 : 9fe66258
r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 9fe66258
Flags: nZCv  IRQs off  FIQs on  Mode SVC_32
[<9fe243ba>] (strcpy+0xa/0xe) from [<9fe268cf>] (readline+0x363/0x4e0)
[<9fe268cf>] (readline+0x363/0x4e0) from [<9fe05469>] (file_get
+0x49/0x110)

I could bisect it to this commit:


ada160a34a1ec8421d5bb7b9dd746294668a5130 is the first bad commit
commit ada160a34a1ec8421d5bb7b9dd746294668a5130
Author: Sascha Hauer <s.hauer@pengutronix.de>
Date:   Tue Jul 29 11:54:26 2014 +0200

    readline: reimplement history functions
    
...

Regards,
Teresa




_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BUG] readline history
  2014-08-28  7:50 [BUG] readline history Teresa Gamez
@ 2014-08-28  8:35 ` Alexander Aring
  2014-08-28  9:25 ` Alexander Aring
  2014-09-01  8:30 ` Sascha Hauer
  2 siblings, 0 replies; 7+ messages in thread
From: Alexander Aring @ 2014-08-28  8:35 UTC (permalink / raw)
  To: Teresa Gamez; +Cc: barebox

On Thu, Aug 28, 2014 at 09:50:05AM +0200, Teresa Gamez wrote:
> Hello Sascha,
> 
> I noticed a bug on the latest master.
> When no history is present and I hit the arrow up key, I get:
> 
> unable to handle NULL pointer dereference at address 0x00000001
> pc : [<9fe243ba>]    lr : [<9fe268cf>]
> sp : 9ffff9d0  ip : 00000016  fp : 00000002
> r10: 00000001  r9 : 9fe549dc  r8 : 9fe65d08
> r7 : 00000400  r6 : 00000001  r5 : 00000000  r4 : 9fe66258
> r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 9fe66258
> Flags: nZCv  IRQs off  FIQs on  Mode SVC_32
> [<9fe243ba>] (strcpy+0xa/0xe) from [<9fe268cf>] (readline+0x363/0x4e0)
> [<9fe268cf>] (readline+0x363/0x4e0) from [<9fe05469>] (file_get
> +0x49/0x110)
> 
> I could bisect it to this commit:
> 
> 
> ada160a34a1ec8421d5bb7b9dd746294668a5130 is the first bad commit
> commit ada160a34a1ec8421d5bb7b9dd746294668a5130
> Author: Sascha Hauer <s.hauer@pengutronix.de>
> Date:   Tue Jul 29 11:54:26 2014 +0200
> 
>     readline: reimplement history functions
>     
> ...

#0  0x000000000040db2d in strcpy (dest=0x631a41 <console_buffer+1> "A", dest@entry=0x631a40 <console_buffer> "[A", 
    src=0x2 <error: Cannot access memory at address 0x2>, src@entry=0x1 <error: Cannot access memory at address 0x1>)
    at lib/string.c:95
#1  0x0000000000413275 in readline (prompt=0x631080 <prompt> "\033[1;32mbarebox@\033[1;36mbarebox sandbox:/\033[0m ", 
    buf=buf@entry=0x631a40 <console_buffer> "[A", len=len@entry=1024) at lib/readline.c:312
#2  0x00000000004064e5 in get_user_input (i=0x7fffffffe3d0) at common/hush.c:449
#3  file_get (i=0x7fffffffe3d0) at common/hush.c:499
#4  0x00000000004069b0 in parse_stream (dest=dest@entry=0x7fffffffe368, ctx=ctx@entry=0x7fffffffe3f0, 
    input=input@entry=0x7fffffffe3d0, end_trigger=end_trigger@entry=10) at common/hush.c:1492
#5  0x0000000000406ed3 in parse_stream_outer (ctx=ctx@entry=0x7fffffffe3f0, inp=inp@entry=0x7fffffffe3d0, flag=flag@entry=2)
    at common/hush.c:1693
#6  0x0000000000407c4b in run_shell () at common/hush.c:1919
#7  0x0000000000402154 in start_barebox () at common/startup.c:113
#8  0x000000000041c9ad in main ()

my backtrace on sandbox system.



Seems there is more broken than this one:

Type:
 1. foobar
 2. <enter>
 3. <key_up>
 4. <key_down>
 5. <backspace>

#0  memmove (dest=0x631a45 <console_buffer+5>, src=0x631a46 <console_buffer+6>, count=4294818367, 
    count@entry=4294967290) at lib/string.c:522
#1  0x00000000004130d0 in readline (prompt=0x631080 <prompt> "\033[1;32mbarebox@\033[1;36mbarebox sandbox:/\033[0m ", 
    buf=buf@entry=0x631a40 <console_buffer> "", len=len@entry=1024) at lib/readline.c:279
#2  0x00000000004064e5 in get_user_input (i=0x7fffffffe3d0) at common/hush.c:449
#3  file_get (i=0x7fffffffe3d0) at common/hush.c:499
#4  0x00000000004069b0 in parse_stream (dest=dest@entry=0x7fffffffe368, ctx=ctx@entry=0x7fffffffe3f0, 
    input=input@entry=0x7fffffffe3d0, end_trigger=end_trigger@entry=10) at common/hush.c:1492
#5  0x0000000000406ed3 in parse_stream_outer (ctx=ctx@entry=0x7fffffffe3f0, inp=inp@entry=0x7fffffffe3d0, 
    flag=flag@entry=2) at common/hush.c:1693
#6  0x0000000000407c4b in run_shell () at common/hush.c:1919
#7  0x0000000000402154 in start_barebox () at common/startup.c:113
#8  0x000000000041c93b in main ()


It seems there is somewhere a dangling pointer and whith keydown I hit
the same line like the first issue.

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BUG] readline history
  2014-08-28  7:50 [BUG] readline history Teresa Gamez
  2014-08-28  8:35 ` Alexander Aring
@ 2014-08-28  9:25 ` Alexander Aring
  2014-08-28 10:08   ` Alexander Aring
  2014-09-01  8:30 ` Sascha Hauer
  2 siblings, 1 reply; 7+ messages in thread
From: Alexander Aring @ 2014-08-28  9:25 UTC (permalink / raw)
  To: Teresa Gamez; +Cc: barebox

Hi,

the issues is that hist_prev or hist_next runs:
"list_entry(history_current->next, struct history, list);"

on an empty list with no entries and history->line is a dangling pointer.

because the list head don't include a char *line and on an empty list
the attributes are prev == next.

I hacked a solution which check on an empty list at first and returning
NULL.

diff --git a/lib/readline.c b/lib/readline.c
index b70bca8..0892cf5 100644
--- a/lib/readline.c
+++ b/lib/readline.c
@@ -67,6 +67,9 @@ static const char *hist_prev(void)
 {
        struct history *history;
 
+       if (list_empty(&history_list))
+               return NULL;
+
        if (history_current->prev == &history_list) {
                history = list_entry(history_current, struct history, list);
                getcmd_cbeep();
@@ -84,6 +87,9 @@ static const char *hist_next(void)
 {
        struct history *history;
 
+       if (list_empty(&history_list))
+               return NULL;
+
        if (history_current->next == &history_list) {
                history_current = &history_list;
                return "";
@@ -301,6 +307,9 @@ int readline(const char *prompt, char *buf, int len)
                        else
                                hline = hist_next();
 
+                       if (!hline)
+                               break;
+
                        /* nuke the current line */
                        /* first, go home */
                        BEGINNING_OF_LINE();

Don't know if it should make a beep or not, just hacked not complete tested.
Maybe there are similar issues in other functions.

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BUG] readline history
  2014-08-28  9:25 ` Alexander Aring
@ 2014-08-28 10:08   ` Alexander Aring
  0 siblings, 0 replies; 7+ messages in thread
From: Alexander Aring @ 2014-08-28 10:08 UTC (permalink / raw)
  To: Teresa Gamez; +Cc: barebox

Hi,

another possible solution which less of runtime decisions.



diff --git a/lib/readline.c b/lib/readline.c
index b70bca8..f9cfa4b 100644
--- a/lib/readline.c
+++ b/lib/readline.c
@@ -28,7 +28,9 @@ struct history {
        struct list_head list;
 };
 
-static LIST_HEAD(history_list);
+static struct history history_list = {
+       .list = LIST_HEAD_INIT(history_list.list),
+};
 
 static struct list_head *history_current;
 static int history_num_entries;
@@ -38,8 +40,8 @@ static void cread_add_to_hist(char *line)
        struct history *history;
        char *newline;
 
-       if (!list_empty(&history_list)) {
-               history = list_last_entry(&history_list, struct history, list);
+       if (!list_empty(&history_list.list)) {
+               history = list_last_entry(&history_list.list, struct history, list);
 
                if (!strcmp(line, history->line))
                        return;
@@ -53,21 +55,21 @@ static void cread_add_to_hist(char *line)
                history = xzalloc(sizeof(*history));
                history_num_entries++;
        } else {
-               history = list_first_entry(&history_list, struct history, list);
+               history = list_first_entry(&history_list.list, struct history, list);
                free(history->line);
                list_del(&history->list);
        }
 
        history->line = newline;
 
-       list_add_tail(&history->list, &history_list);
+       list_add_tail(&history->list, &history_list.list);
 }
 
 static const char *hist_prev(void)
 {
        struct history *history;
 
-       if (history_current->prev == &history_list) {
+       if (history_current->prev == &history_list.list) {
                history = list_entry(history_current, struct history, list);
                getcmd_cbeep();
                return history->line;
@@ -84,12 +86,12 @@ static const char *hist_next(void)
 {
        struct history *history;
 
-       if (history_current->next == &history_list) {
-               history_current = &history_list;
+       if (history_current->next == &history_list.list) {
+               history_current = &history_list.list;
                return "";
        }
 
-       if (history_current == &history_list) {
+       if (history_current == &history_list.list) {
                getcmd_cbeep();
                return "";
        }
@@ -188,7 +190,7 @@ int readline(const char *prompt, char *buf, int len)
 
        complete_reset();
 #endif
-       history_current = &history_list;
+       history_current = &history_list.list;
 
        puts (prompt);
 
@@ -296,10 +298,13 @@ int readline(const char *prompt, char *buf, int len)
                {
                        const char *hline;
 
-                       if (ichar == BB_KEY_UP)
+                       if (ichar == BB_KEY_UP) {
                                hline = hist_prev();
-                       else
+                               if (!hline)
+                                       break;
+                       } else {
                                hline = hist_next();
+                       }
 
                        /* nuke the current line */
                        /* first, go home */




Don't know what I actually did there, just experiment that history_list
isn't a struct list. It has now space for the "char *line" pointer and
it's init with null. Also move the null check only for hlist_prev();

now list_entry on history_list works because it has a "char *line" which
should always be NULL.

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BUG] readline history
  2014-08-28  7:50 [BUG] readline history Teresa Gamez
  2014-08-28  8:35 ` Alexander Aring
  2014-08-28  9:25 ` Alexander Aring
@ 2014-09-01  8:30 ` Sascha Hauer
  2014-09-01  8:44   ` Alexander Aring
  2 siblings, 1 reply; 7+ messages in thread
From: Sascha Hauer @ 2014-09-01  8:30 UTC (permalink / raw)
  To: Teresa Gamez; +Cc: barebox

Hi Teresa,

On Thu, Aug 28, 2014 at 09:50:05AM +0200, Teresa Gamez wrote:
> Hello Sascha,
> 
> I noticed a bug on the latest master.
> When no history is present and I hit the arrow up key, I get:
> 
> unable to handle NULL pointer dereference at address 0x00000001
> pc : [<9fe243ba>]    lr : [<9fe268cf>]
> sp : 9ffff9d0  ip : 00000016  fp : 00000002
> r10: 00000001  r9 : 9fe549dc  r8 : 9fe65d08
> r7 : 00000400  r6 : 00000001  r5 : 00000000  r4 : 9fe66258
> r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 9fe66258
> Flags: nZCv  IRQs off  FIQs on  Mode SVC_32
> [<9fe243ba>] (strcpy+0xa/0xe) from [<9fe268cf>] (readline+0x363/0x4e0)
> [<9fe268cf>] (readline+0x363/0x4e0) from [<9fe05469>] (file_get
> +0x49/0x110)
> 
> I could bisect it to this commit:
> 
> 
> ada160a34a1ec8421d5bb7b9dd746294668a5130 is the first bad commit
> commit ada160a34a1ec8421d5bb7b9dd746294668a5130
> Author: Sascha Hauer <s.hauer@pengutronix.de>
> Date:   Tue Jul 29 11:54:26 2014 +0200

Damned. While working on that patch I had exactly this problem and
thought I tested this case. Apparantly I didn't :(

The following should fix this:

Sascha

From 7fd0d972f71610c25276ca387164b1fd71fb74be Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
Date: Mon, 1 Sep 2014 10:21:44 +0200
Subject: [PATCH] readline: Fix history prev when history is empty

We cannot use list_entry() on an empty list. Without history
we have to return an empty line. This fixes a crash when the
cursor up button is pressed and no command has been entered
previously. Broken since:

commit ada160a34a1ec8421d5bb7b9dd746294668a5130
Author: Sascha Hauer <s.hauer@pengutronix.de>
Date:   Tue Jul 29 11:54:26 2014 +0200

    readline: reimplement history functions

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reported-by: Teresa Gamez <t.gamez@phytec.de>
---
 lib/readline.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/readline.c b/lib/readline.c
index b70bca8..e855abd 100644
--- a/lib/readline.c
+++ b/lib/readline.c
@@ -68,6 +68,9 @@ static const char *hist_prev(void)
 	struct history *history;
 
 	if (history_current->prev == &history_list) {
+		if (list_empty(&history_list))
+			return "";
+
 		history = list_entry(history_current, struct history, list);
 		getcmd_cbeep();
 		return history->line;
-- 
2.1.0

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BUG] readline history
  2014-09-01  8:30 ` Sascha Hauer
@ 2014-09-01  8:44   ` Alexander Aring
  2014-09-01 12:25     ` Sascha Hauer
  0 siblings, 1 reply; 7+ messages in thread
From: Alexander Aring @ 2014-09-01  8:44 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Hi Sascha,

On Mon, Sep 01, 2014 at 10:30:33AM +0200, Sascha Hauer wrote:
> Hi Teresa,
> 
> On Thu, Aug 28, 2014 at 09:50:05AM +0200, Teresa Gamez wrote:
> > Hello Sascha,
> > 
> > I noticed a bug on the latest master.
> > When no history is present and I hit the arrow up key, I get:
> > 
> > unable to handle NULL pointer dereference at address 0x00000001
> > pc : [<9fe243ba>]    lr : [<9fe268cf>]
> > sp : 9ffff9d0  ip : 00000016  fp : 00000002
> > r10: 00000001  r9 : 9fe549dc  r8 : 9fe65d08
> > r7 : 00000400  r6 : 00000001  r5 : 00000000  r4 : 9fe66258
> > r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 9fe66258
> > Flags: nZCv  IRQs off  FIQs on  Mode SVC_32
> > [<9fe243ba>] (strcpy+0xa/0xe) from [<9fe268cf>] (readline+0x363/0x4e0)
> > [<9fe268cf>] (readline+0x363/0x4e0) from [<9fe05469>] (file_get
> > +0x49/0x110)
> > 
> > I could bisect it to this commit:
> > 
> > 
> > ada160a34a1ec8421d5bb7b9dd746294668a5130 is the first bad commit
> > commit ada160a34a1ec8421d5bb7b9dd746294668a5130
> > Author: Sascha Hauer <s.hauer@pengutronix.de>
> > Date:   Tue Jul 29 11:54:26 2014 +0200
> 
> Damned. While working on that patch I had exactly this problem and
> thought I tested this case. Apparantly I didn't :(
> 
> The following should fix this:
> 
> Sascha
> 
> From 7fd0d972f71610c25276ca387164b1fd71fb74be Mon Sep 17 00:00:00 2001
> From: Sascha Hauer <s.hauer@pengutronix.de>
> Date: Mon, 1 Sep 2014 10:21:44 +0200
> Subject: [PATCH] readline: Fix history prev when history is empty
> 
> We cannot use list_entry() on an empty list. Without history
> we have to return an empty line. This fixes a crash when the
> cursor up button is pressed and no command has been entered
> previously. Broken since:
> 
> commit ada160a34a1ec8421d5bb7b9dd746294668a5130
> Author: Sascha Hauer <s.hauer@pengutronix.de>
> Date:   Tue Jul 29 11:54:26 2014 +0200
> 
>     readline: reimplement history functions
> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> Reported-by: Teresa Gamez <t.gamez@phytec.de>
> ---
>  lib/readline.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/lib/readline.c b/lib/readline.c
> index b70bca8..e855abd 100644
> --- a/lib/readline.c
> +++ b/lib/readline.c
> @@ -68,6 +68,9 @@ static const char *hist_prev(void)
>  	struct history *history;
>  
>  	if (history_current->prev == &history_list) {
> +		if (list_empty(&history_list))
> +			return "";
> +

what's about to ring the terminal bell when this happen?

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BUG] readline history
  2014-09-01  8:44   ` Alexander Aring
@ 2014-09-01 12:25     ` Sascha Hauer
  0 siblings, 0 replies; 7+ messages in thread
From: Sascha Hauer @ 2014-09-01 12:25 UTC (permalink / raw)
  To: Alexander Aring; +Cc: barebox

On Mon, Sep 01, 2014 at 10:44:57AM +0200, Alexander Aring wrote:
> Hi Sascha,
> 
> On Mon, Sep 01, 2014 at 10:30:33AM +0200, Sascha Hauer wrote:
> > Hi Teresa,
> > 
> > On Thu, Aug 28, 2014 at 09:50:05AM +0200, Teresa Gamez wrote:
> > > Hello Sascha,
> > > 
> > > I noticed a bug on the latest master.
> > > When no history is present and I hit the arrow up key, I get:
> > > 
> > > unable to handle NULL pointer dereference at address 0x00000001
> > > pc : [<9fe243ba>]    lr : [<9fe268cf>]
> > > sp : 9ffff9d0  ip : 00000016  fp : 00000002
> > > r10: 00000001  r9 : 9fe549dc  r8 : 9fe65d08
> > > r7 : 00000400  r6 : 00000001  r5 : 00000000  r4 : 9fe66258
> > > r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 9fe66258
> > > Flags: nZCv  IRQs off  FIQs on  Mode SVC_32
> > > [<9fe243ba>] (strcpy+0xa/0xe) from [<9fe268cf>] (readline+0x363/0x4e0)
> > > [<9fe268cf>] (readline+0x363/0x4e0) from [<9fe05469>] (file_get
> > > +0x49/0x110)
> > > 
> > > I could bisect it to this commit:
> > > 
> > > 
> > > ada160a34a1ec8421d5bb7b9dd746294668a5130 is the first bad commit
> > > commit ada160a34a1ec8421d5bb7b9dd746294668a5130
> > > Author: Sascha Hauer <s.hauer@pengutronix.de>
> > > Date:   Tue Jul 29 11:54:26 2014 +0200
> > 
> > Damned. While working on that patch I had exactly this problem and
> > thought I tested this case. Apparantly I didn't :(
> > 
> > The following should fix this:
> > 
> > Sascha
> > 
> > From 7fd0d972f71610c25276ca387164b1fd71fb74be Mon Sep 17 00:00:00 2001
> > From: Sascha Hauer <s.hauer@pengutronix.de>
> > Date: Mon, 1 Sep 2014 10:21:44 +0200
> > Subject: [PATCH] readline: Fix history prev when history is empty
> > 
> > We cannot use list_entry() on an empty list. Without history
> > we have to return an empty line. This fixes a crash when the
> > cursor up button is pressed and no command has been entered
> > previously. Broken since:
> > 
> > commit ada160a34a1ec8421d5bb7b9dd746294668a5130
> > Author: Sascha Hauer <s.hauer@pengutronix.de>
> > Date:   Tue Jul 29 11:54:26 2014 +0200
> > 
> >     readline: reimplement history functions
> > 
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > Reported-by: Teresa Gamez <t.gamez@phytec.de>
> > ---
> >  lib/readline.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/lib/readline.c b/lib/readline.c
> > index b70bca8..e855abd 100644
> > --- a/lib/readline.c
> > +++ b/lib/readline.c
> > @@ -68,6 +68,9 @@ static const char *hist_prev(void)
> >  	struct history *history;
> >  
> >  	if (history_current->prev == &history_list) {
> > +		if (list_empty(&history_list))
> > +			return "";
> > +
> 
> what's about to ring the terminal bell when this happen?

I added a getcmd_cbeep() to add the beep.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-09-01 12:25 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-28  7:50 [BUG] readline history Teresa Gamez
2014-08-28  8:35 ` Alexander Aring
2014-08-28  9:25 ` Alexander Aring
2014-08-28 10:08   ` Alexander Aring
2014-09-01  8:30 ` Sascha Hauer
2014-09-01  8:44   ` Alexander Aring
2014-09-01 12:25     ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox