[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#26013: (srfi srfi-37) chokes on empty string parameter

From: Thomas Danckaert
Subject: bug#26013: (srfi srfi-37) chokes on empty string parameter
Date: Wed, 19 Apr 2017 18:32:29 +0200 (CEST)

From: Andy Wingo <address@hidden>
Subject: Re: bug#26013: (srfi srfi-37) chokes on empty string parameter
Date: Wed, 19 Apr 2017 17:13:25 +0200

On Tue 07 Mar 2017 16:34, Thomas Danckaert <address@hidden> writes:

It looks like Guile's srfi-37 implementation doesn't process empty
string arguments correctly.
In srfi/srfi-37.scm:
 220: 1 [next-arg]
In unknown file:
   ?: 0 [string-ref "" 0]

ERROR: In procedure string-ref:
ERROR: Value out of range: 0

Sounds like the right diagnosis to me.  Want to submit a patch? :)

Well, let me try :)

I don't fully understand the code in srfi-37.scm, but I think the fix can be as simple as the attached patch (i.e. first check if the argument is empty, otherwise check if it starts with \#-).

I have tried to follow the existing indentation convention, as far as I understand it (a mix of tabs and spaces).

>From bd0bd95e3786211effe728bae61ef5b02f6cc5f6 Mon Sep 17 00:00:00 2001
From: Thomas Danckaert <address@hidden>
Date: Wed, 19 Apr 2017 18:14:38 +0200
Subject: [PATCH] SRFI-37: Account for zero-length arguments.

* module/srfi/srfi-37.scm (args-fold): When checking if an argument is
an option (starts with #\-), first check if the length is non-zero.
 module/srfi/srfi-37.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/module/srfi/srfi-37.scm b/module/srfi/srfi-37.scm
index 3f654af2c..c34b0d083 100644
--- a/module/srfi/srfi-37.scm
+++ b/module/srfi/srfi-37.scm
@@ -217,7 +217,8 @@ program-arguments in ARGS, as decided by the OPTIONS'
       (if (null? args)
          (apply values seeds)
          (let ((arg (car args)))
-           (cond ((or (not (char=? #\- (string-ref arg 0)))
+           (cond ((or (string-null? arg)
+                      (not (char=? #\- (string-ref arg 0)))
                       (= 1 (string-length arg))) ;"-"
                   (mutate-seeds! operand-proc arg)
                   (set! args (cdr args)))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]