unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* sxml or guile bug?
@ 2023-05-01  2:32 Christopher Lam
  2023-05-01  2:44 ` bug#63196: Further on this error message Christopher Lam
  0 siblings, 1 reply; 3+ messages in thread
From: Christopher Lam @ 2023-05-01  2:32 UTC (permalink / raw)
  To: guile-user, bug-guile

[-- Attachment #1: Type: text/plain, Size: 2341 bytes --]

Hi, we've identified an unusual behaviour in writing a test in gnucash. Can
anyone reproduce and confirmit?

I paste a simple .scm file, and its input test-file.html. Now, in
sxml-bug.scm, modify the <tr> index - from -1 to -2 i.e. access the
last/penultimate row etc.

Odd negative indices work, even negative indices lead to error. Odd (haha)
bug. See report for (tr -2) for example, pasted below.

==== sxml-bug.scm =====
(use-modules (sxml simple))
(use-modules (sxml xpath))
(use-modules (ice-9 textual-ports))
(define html (call-with-input-file "/tmp/test-file.html" get-string-all))
(define sx (xml->sxml html))

;; note this path: try different indices for the tr tag:
;; odd numbers -1 -3 -5 are ok
;; even numbers -2 -4 -6 will fail
(define path '(// (table 1) // (tr -1)))

(format #t "html=[~s]\n" html)
(format #t "sxpath is [~s]\n" path)
(format #t "result is [~s]\n" ((sxpath path) sx))
====

And the backtrace with -2

=====
Backtrace:
In ice-9/boot-9.scm:
  1752:10 18 (with-exception-handler _ _ #:unwind? _ # _)
In unknown file:
          17 (apply-smob/0 #<thunk 7f7fd530d2e0>)
In ice-9/boot-9.scm:
    724:2 16 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
In ice-9/eval.scm:
    619:8 15 (_ #(#(#<directory (guile-user) 7f7fd5312c80>)))
In ice-9/boot-9.scm:
   2836:4 14 (save-module-excursion _)
  4388:12 13 (_)
In /home/user/sources/sxml-bug.scm:
    20:30 12 (_)
In sxml/xpath.scm:
   254:18 11 (map-union #<procedure 7f7fd18e8280 at sxml/xpath.scm:…> …)
   254:18 10 (map-union #<procedure 7f7fd18e8280 at sxml/xpath.scm:…> …)
   254:18  9 (map-union #<procedure 7f7fd18e8280 at sxml/xpath.scm:…> …)
   254:18  8 (map-union #<procedure 7f7fd18e8280 at sxml/xpath.scm:…> …)
   254:18  7 (map-union #<procedure 7f7fd18e8280 at sxml/xpath.scm:…> …)
   252:22  6 (map-union #<procedure 7f7fd18e8280 at sxml/xpath.scm:…> …)
   252:22  5 (map-union #<procedure 7f7fd18f2ea0 at sxml/xpath.scm:…> …)
   254:18  4 (map-union #<procedure 7f7fd1901420 at sxml/xpath.scm:…> …)
   254:18  3 (map-union #<procedure 7f7fd1901420 at sxml/xpath.scm:…> …)
   252:22  2 (map-union #<procedure 7f7fd1901420 at sxml/xpath.scm:…> …)
   484:19  1 (loop _ ((tr -6)))
   181:24  0 (_ _)

sxml/xpath.scm:181:24: yikes!
=====

[-- Attachment #2: test-file.html --]
[-- Type: text/plain, Size: 4765 bytes --]

  read rows from the bottom

  From 01/01/23 to 12/31/23

   Sorting / Add indenting columns : Disabled
   Sorting / Secondary Key : none
   Sorting / Primary Subtotal : Disabled
   Sorting / Primary Subtotal for Date Key : none
   General / Add options summary : always
   General / Table for Exporting : Enabled
   Display / Totals : Disabled
   Display / Amount : single
   Display / Other Account Name : Disabled
   Display / Account Name : Enabled
   Display / Notes : Disabled
   Display / Memo : Disabled
   Display / Num : Disabled
   Accounts / Accounts : Bank

     Date   Description     Account        Amount
   01/03/23 $103 income Root.Asset.Bank [1]$103.00
   01/09/23 $109 income Root.Asset.Bank [2]$109.00
   01/15/23 $22 expense Root.Asset.Bank [3]-$22.00
   02/03/23 $103 income Root.Asset.Bank [4]$103.00
   02/09/23 $109 income Root.Asset.Bank [5]$109.00
   02/15/23 $22 expense Root.Asset.Bank [6]-$22.00
   03/03/23 $103 income Root.Asset.Bank [7]$103.00
   03/09/23 $109 income Root.Asset.Bank [8]$109.00
   03/15/23 $22 expense Root.Asset.Bank [9]-$22.00
   04/03/23 $103 income Root.Asset.Bank [10]$103.00
   04/09/23 $109 income Root.Asset.Bank [11]$109.00
   04/15/23 $22 expense Root.Asset.Bank [12]-$22.00
   05/03/23 $103 income Root.Asset.Bank [13]$103.00
   05/09/23 $109 income Root.Asset.Bank [14]$109.00
   05/15/23 $22 expense Root.Asset.Bank [15]-$22.00
   06/03/23 $103 income Root.Asset.Bank [16]$103.00
   06/09/23 $109 income Root.Asset.Bank [17]$109.00
   06/15/23 $22 expense Root.Asset.Bank [18]-$22.00
   07/03/23 $103 income Root.Asset.Bank [19]$103.00
   07/09/23 $109 income Root.Asset.Bank [20]$109.00
   07/15/23 $22 expense Root.Asset.Bank [21]-$22.00
   08/03/23 $103 income Root.Asset.Bank [22]$103.00
   08/09/23 $109 income Root.Asset.Bank [23]$109.00
   08/15/23 $22 expense Root.Asset.Bank [24]-$22.00
   09/03/23 $103 income Root.Asset.Bank [25]$103.00
   09/09/23 $109 income Root.Asset.Bank [26]$109.00
   09/15/23 $22 expense Root.Asset.Bank [27]-$22.00
   10/03/23 $103 income Root.Asset.Bank [28]$103.00
   10/09/23 $109 income Root.Asset.Bank [29]$109.00
   10/15/23 $22 expense Root.Asset.Bank [30]-$22.00
   11/03/23 $103 income Root.Asset.Bank [31]$103.00
   11/09/23 $109 income Root.Asset.Bank [32]$109.00
   11/15/23 $22 expense Root.Asset.Bank [33]-$22.00
   12/03/23 $103 income Root.Asset.Bank [34]$103.00
   12/09/23 $109 income Root.Asset.Bank [35]$109.00
   12/15/23 $22 expense Root.Asset.Bank [36]-$22.00

References

   1. gnc-register:split-guid=859032c8639e49b49501e9a0a1497ac5
   2. gnc-register:split-guid=cbe4ba7904514285a22913f3d41fde9d
   3. gnc-register:split-guid=fd07c28587454d1896ac3d90b491abc7
   4. gnc-register:split-guid=8d2376b51564402b8269654336eeee04
   5. gnc-register:split-guid=ea146a234ff742649b93b9a33fefae2e
   6. gnc-register:split-guid=8ab91494621f4bf1b0cdfc5601359459
   7. gnc-register:split-guid=0b489080220c436aae8614023054953d
   8. gnc-register:split-guid=7a94654477ec47a2a63093d34236ea1f
   9. gnc-register:split-guid=66c9c5bbdf514ba7b20f06eda93e0eeb
  10. gnc-register:split-guid=c83755eb16374818807ce38e796be8d4
  11. gnc-register:split-guid=eb2ce4371dae4116abf8e69f8b3af6f6
  12. gnc-register:split-guid=df341fa54f054d128abdee4340448305
  13. gnc-register:split-guid=597e3adb64eb4b41bf275170e055bd43
  14. gnc-register:split-guid=fe179202452a44dfb9a2540615323d38
  15. gnc-register:split-guid=ca46492548a14b448dbb4f67d4d571f5
  16. gnc-register:split-guid=0c8fb144e4154335a1c6dbc98f5ab53d
  17. gnc-register:split-guid=889517c233dc4c2f917a9e7c945028a4
  18. gnc-register:split-guid=7297930cce5c42ccbbe864e177db78e7
  19. gnc-register:split-guid=ba0f8fd1ce75411785d831f70d8a51b6
  20. gnc-register:split-guid=88fc84a2790448c3a273b7ea11da3bf0
  21. gnc-register:split-guid=a3d79534553f462ea3c6cd8d533b99bb
  22. gnc-register:split-guid=576cb90366c44bb1b942ea22a615bf1f
  23. gnc-register:split-guid=773905c9652c4ddc80ca4ff462375cd0
  24. gnc-register:split-guid=6c2135444dfc447b9c8c8872ae3dff36
  25. gnc-register:split-guid=64b5a4f8b67d40dfb617d322baa331a7
  26. gnc-register:split-guid=ae3c7904b80e44ee89a9c1e67b162b50
  27. gnc-register:split-guid=67293b53307843ceb4ed10a77119243c
  28. gnc-register:split-guid=285dd536ed844570aa1c313777d06821
  29. gnc-register:split-guid=f6c3a452d6264df3974d3a7042c6cba9
  30. gnc-register:split-guid=4a27b2af68fe4a3197173230a6915fbc
  31. gnc-register:split-guid=d96ca6c7ec5c476293da8cc1778648e8
  32. gnc-register:split-guid=2f762a28938443669db6c9e397fb8ec0
  33. gnc-register:split-guid=1db360a62cfe44e6a52e10864edff969
  34. gnc-register:split-guid=051b3f418f984dac82d6fa93469e6525
  35. gnc-register:split-guid=51e95c4897c74b87a058f55d5b6cc9ca
  36. gnc-register:split-guid=dbab36af60ce4edaaa56c536834edc39

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

* bug#63196: Further on this error message
  2023-05-01  2:32 sxml or guile bug? Christopher Lam
@ 2023-05-01  2:44 ` Christopher Lam
  2023-05-06 12:38   ` tomas
  0 siblings, 1 reply; 3+ messages in thread
From: Christopher Lam @ 2023-05-01  2:44 UTC (permalink / raw)
  To: 63196

[-- Attachment #1: Type: text/plain, Size: 488 bytes --]

The source seems to be sxpath.scm -- see "yikes" error which triggers when
n is -2 -4 -6 etc. I don't know how to build guile from sources and cannot
debug further.


(define (node-pos n)
  (lambda (nodeset)
    (cond
     ((not (nodeset? nodeset)) '())
     ((null? nodeset) nodeset)
     ((eqv? n 1) (list (car nodeset)))
     ((negative? n) ((node-pos (+ n 1 (length nodeset))) nodeset))
     (else
      (or (positive? n) (error "yikes!"))
      ((node-pos (1- n)) (cdr nodeset))))))

[-- Attachment #2: Type: text/html, Size: 635 bytes --]

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

* bug#63196: Further on this error message
  2023-05-01  2:44 ` bug#63196: Further on this error message Christopher Lam
@ 2023-05-06 12:38   ` tomas
  0 siblings, 0 replies; 3+ messages in thread
From: tomas @ 2023-05-06 12:38 UTC (permalink / raw)
  To: Christopher Lam; +Cc: 63196

[-- Attachment #1: Type: text/plain, Size: 1581 bytes --]

On Mon, May 01, 2023 at 10:44:18AM +0800, Christopher Lam wrote:
> The source seems to be sxpath.scm -- see "yikes" error which triggers when
> n is -2 -4 -6 etc. I don't know how to build guile from sources and cannot
> debug further.
> 
> 
> (define (node-pos n)
>   (lambda (nodeset)
>     (cond
>      ((not (nodeset? nodeset)) '())
>      ((null? nodeset) nodeset)
>      ((eqv? n 1) (list (car nodeset)))
>      ((negative? n) ((node-pos (+ n 1 (length nodeset))) nodeset))
>      (else
>       (or (positive? n) (error "yikes!"))
>       ((node-pos (1- n)) (cdr nodeset))))))

Hm. It seems that calling `node-pos' with n == 0 runs straight into the
"yikes" case (unless `nodeset' is #f or null, that is).

And we would get this when n ==-2 and (length nodeset) equals 1 on the
next recursive call. Or when n == -3 and (length nodeset) == 2, and so
on -- i.e. when n == -1 - (length nodeset).

We reach such a point again when n == 2*(-1 - (length nodeset)): it runs
into the case (negative? n), retries with n' = (+ n 1 (length nodeset))
which is still negative, next try is 0 => yikes.

So in your case I guess your (length nodeset) is 1, because you have
a cycle length of two :-)

Reading between the lines in the code above for the positive case, I
gather that the intention is to return an empty nodeset (i.e. '())
when n runs off the nodeset. So I'd extend the ((negative? n) ...)
case like so:

  ((negative? n)
    (let ((nn (+ 1 (length nodeset))))
      (if (positive? nn) (node-pos nn) '())))

Comments?

Cheers
-- 
t

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

end of thread, other threads:[~2023-05-06 12:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-01  2:32 sxml or guile bug? Christopher Lam
2023-05-01  2:44 ` bug#63196: Further on this error message Christopher Lam
2023-05-06 12:38   ` tomas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).