chicken-users
[Top][All Lists]
Advanced

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

Re: [Chicken-users] a memory issue; mildly scaring to me


From: Jörg F . Wittenberger
Subject: Re: [Chicken-users] a memory issue; mildly scaring to me
Date: 26 Sep 2011 20:34:01 +0200

I kinda confirmed that the possible problems I reported here
are more an aesthetic issue wrt. comprehensibility of code.

At least I made sure that *none* of those "suspicious" looking calls
where ever made in my case.

On Sep 26 2011, Jörg F. Wittenberger wrote:

While it does not fix the problem at hand:

There is a suspicious line in regex-core.scm 2222:

it reads:

   (printing or graphic whitespace)

IMHO it should read:

   (printing . (or graphic whitespace))

BTW: I know that those are the same.  It's just confusing the reader,
when the same list is written both styles.

Since the valgrind hints point into the initialization, I'm actually
reading the code.  :-/

There is more inconsistency to report, which too pertains to the original
rrregex source:

In sre-named-definitions there is exactly one entry, which obviously
has a procedure in the cdr:

(escape . ,(lambda (esc . o) `(* (or (~ ,esc ,@o) (seq ,esc any)))))

Since I do not fully understand the code, I don#t know what the intention
is.

However the uses are not too many and hint towards possible errors:

line 1714 in the original 1816 in the chicken/irregex-core:
               (cond
                ((assq (car sre) sre-named-definitions)
                 => (lambda (cell)
                      (lp (apply (cdr cell) (cdr sre)) n lo hi return)))

This one looks compatible with the escape procedure.

Line 1728 resp. 1830:

(let ((cell (assq sre sre-named-definitions)))
          (if cell
              (lp (if (procedure? (cdr cell)) ((cdr cell)) (cdr cell))
                  n lo hi return)

This one should produce a missing parameter.

Ah: since parameter checking might be off in the chicken core (is it?),
what would happen, if we use a parameter, which has not been passed?
Might that be the uninitialized value from a stack allocation, which
I see from valgrind?

2301/2404, same possible miss.

2421/2523: again signature compatible.

3321/3429:

        (let ((cell (assq sre sre-named-definitions)))
          (if cell
              (rec (cdr cell))

loops into sre->procedure, which should IMHO default ince there's no
case for procedures.

The final one line(s) 3481/3589 should also raise an error.

What should be done?

Best regards

/Jörg
.....

_______________________________________________
Chicken-users mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/chicken-use




reply via email to

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