--- Begin Message ---
>> ...
>>     Nelson> Sun Solaris 2.7 and 2.8:
>>     Nelson>     Testing
>> /export/staff/computing/beebe/i386/build/guile-1.5.6/pre-inst-guile ...
>>     Nelson>     with 
>GUILE_LOAD_PATH=/export/staff/computing/beebe/i386/build/guile-1.5.6/test-suite
>>     Nelson>     ERROR: regexp.test: regexp-substitute/global: ("" "" ""):
>> port is string port - arguments: ((regular-expression-syntax "make-regexp"
>> "empty (sub)expression" #f #f))
>>     Nelson>     ERROR: regexp.test: regexp-substitute/global: ("" "" ""):
>> port is #f - arguments: ((regular-expression-syntax "make-regexp" "empty
>> (sub)expression" #f #f))
>>
>> These errors are being passed through from the Solaris libc's
>> implementation of regcomp and regerror - apparently, its regcomp
>> doesn't handle empty expressions.  Perhaps best just documented and
>> lived with, although we could probably code a workaround on the Scheme
>> level if we wanted to.
>> ...

I made a small test program, with one illegal pattern to regcomp(),
and one empty one, and then ran it on 16 or so platforms:

        % cat regcomp.c
        #include <stdio.h>
        #include <stdlib.h>
        #include <sys/types.h>
        #include <regex.h>
        #include <errno.h>

        #ifndef EXIT_SUCCESS
        #define EXIT_SUCCESS 0
        #endif

        int
        main(int argc, char* argv[])
        {
            int ret;
            regex_t preg;

            ret = regcomp(&preg, "[", 0);
            if (ret != 0)
            {
                (void)printf("regcomp(&preg, \"[\", 0) returns %ld\n", ret);
                perror("perror() says: ");
            }

            ret = regcomp(&preg, "", 0);
            if (ret != 0)
            {
                (void)printf("regcomp(&preg, \"\", 0) returns %ld\n", ret);
                perror("perror() says: ");
            }

            return (EXIT_SUCCESS);
        }

Most platforms produced output like this:

        cc regcomp.c && ./a.out
        regcomp(&preg, "[", 0) returns 7
        perror() says: : Error 0

Both Solaris 2.7 and 2.8 behaved this way.

However, two platforms, Apple Darwin (== MacOS X) and FreeBSD 4.4.0,
gave an error for the empty string:

        % cc regcomp.c && ./a.out
        regcomp(&preg, "[", 0) returns 7
        perror() says: : Undefined error: 0
        regcomp(&preg, "", 0) returns 14
        perror() says: : Undefined error: 0

On HP-UX 10.01, a.out appeared to go into an infinite loop, and I had
to kill the xterm window to it, since it did not respond to Ctl-C.
That could be a different problem: that particular local system has a
history of suddenly becoming inaccessible, and at the moment, I cannot
get a fresh connection to it.

Based on these experiments, I recommend that guile should take special
care never to pass an empty pattern to regcomp().


-------------------------------------------------------------------------------
- Nelson H. F. Beebe                    Tel: +1 801 581 5254                  -
- Center for Scientific Computing       FAX: +1 801 585 1640, +1 801 581 4148 -
- University of Utah                    Internet e-mail: [EMAIL PROTECTED]  -
- Department of Mathematics, 110 LCB        [EMAIL PROTECTED]  [EMAIL PROTECTED] -
- 155 S 1400 E RM 233                       [EMAIL PROTECTED]                    -
- Salt Lake City, UT 84112-0090, USA    URL: http://www.math.utah.edu/~beebe  -
-------------------------------------------------------------------------------



_______________________________________________
Bug-guile mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-guile
--- End Message ---

Reply via email to