Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-magic-wormhole for
openSUSE:Factory checked in at 2026-07-23 23:34:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-magic-wormhole (Old)
and /work/SRC/openSUSE:Factory/.python-magic-wormhole.new.2004 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-magic-wormhole"
Thu Jul 23 23:34:46 2026 rev:18 rq:1367526 version:0.24.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-magic-wormhole/python-magic-wormhole.changes
2026-04-26 21:14:02.128094554 +0200
+++
/work/SRC/openSUSE:Factory/.python-magic-wormhole.new.2004/python-magic-wormhole.changes
2026-07-23 23:34:53.263990348 +0200
@@ -1,0 +2,11 @@
+Thu Jul 23 19:54:15 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.24.0 (bsc#1272449, CVE-2026-42448):
+ * **SECURITY**: @marduc812 noticed that there is also a missing
+ "basename()" when a receiving user specifies an output
+ directory (via "--output") that already exists. Users on past
+ releases can mitigate this bug by ensuring that any specified
+ "--output" filename is not an already-existing directory.
+ CVE-2026-42448
+
+-------------------------------------------------------------------
Old:
----
magic_wormhole-0.23.0.tar.gz
New:
----
magic_wormhole-0.24.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-magic-wormhole.spec ++++++
--- /var/tmp/diff_new_pack.rM4eXL/_old 2026-07-23 23:34:54.060018251 +0200
+++ /var/tmp/diff_new_pack.rM4eXL/_new 2026-07-23 23:34:54.064018391 +0200
@@ -17,7 +17,7 @@
Name: python-magic-wormhole
-Version: 0.23.0
+Version: 0.24.0
Release: 0
Summary: Tool for transferring files through a secure channel
License: MIT
++++++ magic_wormhole-0.23.0.tar.gz -> magic_wormhole-0.24.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/magic_wormhole-0.23.0/NEWS.md
new/magic_wormhole-0.24.0/NEWS.md
--- old/magic_wormhole-0.23.0/NEWS.md 2026-03-10 23:39:34.000000000 +0100
+++ new/magic_wormhole-0.24.0/NEWS.md 2026-05-05 18:25:10.000000000 +0200
@@ -5,6 +5,10 @@
* (add release-notes here when making PRs)
+## Release 0.24.0 (5-May-2026)
+* **SECURITY**: @marduc812 noticed that there is also a missing "basename()"
when a receiving user specifies an output directory (via "--output") that
already exists. Users on past releases can mitigate this bug by ensuring that
any specified "--output" filename is not an already-existing directory.
CVE-2026-42448
+
+
## Release 0.23.0 (10-Mar-2026)
* **SECURITY**: Ian McKenzie @ikmckenz noticed a regression that deleted
"basename()" usage, exposing receivers to path-name traversal attacks. Ian
provided a patch and unit-test. Versions 0.21 and 0.22 are affected. This has
been fixed and released (thanks, Ian!), users should upgrade.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/magic_wormhole-0.23.0/PKG-INFO
new/magic_wormhole-0.24.0/PKG-INFO
--- old/magic_wormhole-0.23.0/PKG-INFO 2026-03-10 23:51:03.380799800 +0100
+++ new/magic_wormhole-0.24.0/PKG-INFO 2026-05-05 18:31:36.385144700 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: magic-wormhole
-Version: 0.23.0
+Version: 0.24.0
Summary: Securely transfer data between computers
Home-page: https://github.com/warner/magic-wormhole
Author: Brian Warner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/magic_wormhole-0.23.0/docs/CONTRIBUTING.rst
new/magic_wormhole-0.24.0/docs/CONTRIBUTING.rst
--- old/magic_wormhole-0.23.0/docs/CONTRIBUTING.rst 2026-01-18
06:48:16.000000000 +0100
+++ new/magic_wormhole-0.24.0/docs/CONTRIBUTING.rst 2026-04-01
09:19:54.000000000 +0200
@@ -99,7 +99,7 @@
``eventually()`` and ``EventualQueue``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+``````````````````````````````````````
This pattern ensures that an async thing happens only after at least one
"reactor turn".
@@ -110,7 +110,7 @@
global reactor
-~~~~~~~~~~~~~~
+``````````````
It is ideal if things that use a reactor get it passed to them (instead of
relying on importing "the global reactor" in Twisted).
Although many things do already accept a reactor parameter, not everything
does.
@@ -119,6 +119,6 @@
Other Confusing Things
-~~~~~~~~~~~~~~~~~~~~~~~
+``````````````````````
Are you confused about a thing? Please: **reach out and ask us!**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._allocator.Allocator.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._allocator.Allocator.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._allocator.Allocator.m.dot
2024-10-31 09:39:10.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._allocator.Allocator.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,37 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S0B_idle_connected [color=blue fontame=Menlo shape=ellipse style=""]
- S0A_idle [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- S2_done [color=blue fontame=Menlo shape=ellipse style=""]
- S1B_allocating_connected [color=blue fontame=Menlo shape=ellipse
style=""]
- S1A_allocating [color=blue fontame=Menlo shape=ellipse style=""]
- t0 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">allocate</font></td></tr><tr ><td
color="pink"><font point-size="9">stash</font></td></tr></table>> margin=0.2
shape=none]
- S0A_idle -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S1A_allocating
- t1 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S1B_allocating_connected -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S1A_allocating
- t2 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S2_done -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S2_done
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">allocate</font></td></tr><tr ><td
color="pink"><font
point-size="9">stash_and_RC_rx_allocate</font></td></tr></table>> margin=0.2
shape=none]
- S0B_idle_connected -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S1B_allocating_connected
- t4 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S0A_idle -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S0B_idle_connected
- t5 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S2_done -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S2_done
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_allocate</font></td></tr></table>>
margin=0.2 shape=none]
- S1A_allocating -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S1B_allocating_connected
- t7 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S0B_idle_connected -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S0A_idle
- t8 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_allocated</font></td></tr><tr
><td color="pink"><font
point-size="9">build_and_notify</font></td></tr></table>> margin=0.2 shape=none]
- S1B_allocating_connected -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S2_done
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._boss.Boss.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._boss.Boss.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._boss.Boss.m.dot
2024-10-31 09:39:10.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._boss.Boss.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,182 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S0_empty [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- S4_closed [color=blue fontame=Menlo shape=ellipse style=""]
- S3_closing [color=blue fontame=Menlo shape=ellipse style=""]
- S2_happy [color=blue fontame=Menlo shape=ellipse style=""]
- S1_lonely [color=blue fontame=Menlo shape=ellipse style=""]
- S1_growing [color=blue fontame=Menlo shape=ellipse style=""]
- t0 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">send</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S3_closing
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">closed</font></td></tr><tr ><td
color="pink"><font point-size="9">W_closed</font></td></tr></table>> margin=0.2
shape=none]
- S3_closing -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S4_closed
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_with_error</font></td></tr></table>>
margin=0.2 shape=none]
- S0_empty -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S4_closed
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_got_dilate</font></td></tr><tr ><td
color="pink"><font point-size="9">D_received_dilate</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S2_happy
- t4 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">send</font></td></tr><tr ><td
color="pink"><font point-size="9">S_send</font></td></tr></table>> margin=0.2
shape=none]
- S1_lonely -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S1_lonely
- t5 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_unwelcome</font></td></tr><tr
><td color="pink"><font
point-size="9">close_unwelcome</font></td></tr></table>> margin=0.2 shape=none]
- S2_happy -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S3_closing
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_got_phase</font></td></tr><tr ><td
color="pink"><font point-size="9">_grow_got_phase</font></td></tr></table>>
margin=0.2 shape=none]
- S1_growing -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S1_growing
- t7 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">scared</font></td></tr><tr ><td
color="pink"><font point-size="9">close_scared</font></td></tr></table>>
margin=0.2 shape=none]
- S1_growing -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S3_closing
- t8 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">_got_phase</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S3_closing
- t9 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">send</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t9:tableport:w [arrowhead=none]
- t9:tableport:e -> S4_closed
- t10 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_got_welcome</font></td></tr><tr
><td color="pink"><font point-size="9">water_seed</font></td></tr></table>>
margin=0.2 shape=none]
- S1_growing -> t10:tableport:w [arrowhead=none]
- t10:tableport:e -> S1_growing
- t11 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_unwelcome</font></td></tr><tr
><td color="pink"><font
point-size="9">close_unwelcome</font></td></tr></table>> margin=0.2 shape=none]
- S1_growing -> t11:tableport:w [arrowhead=none]
- t11:tableport:e -> S3_closing
- t12 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_code</font></td></tr><tr ><td
color="pink"><font point-size="9">do_got_code</font></td></tr></table>>
margin=0.2 shape=none]
- S0_empty -> t12:tableport:w [arrowhead=none]
- t12:tableport:e -> S1_lonely
- t13 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_with_error</font></td></tr></table>>
margin=0.2 shape=none]
- S1_lonely -> t13:tableport:w [arrowhead=none]
- t13:tableport:e -> S4_closed
- t14 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_rx_error</font></td></tr></table>>
margin=0.2 shape=none]
- S0_empty -> t14:tableport:w [arrowhead=none]
- t14:tableport:e -> S3_closing
- t15 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_unwelcome</font></td></tr><tr
><td color="pink"><font
point-size="9">close_unwelcome</font></td></tr></table>> margin=0.2 shape=none]
- S0_empty -> t15:tableport:w [arrowhead=none]
- t15:tableport:e -> S3_closing
- t16 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t16:tableport:w [arrowhead=none]
- t16:tableport:e -> S3_closing
- t17 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_rx_error</font></td></tr></table>>
margin=0.2 shape=none]
- S1_growing -> t17:tableport:w [arrowhead=none]
- t17:tableport:e -> S3_closing
- t18 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">got_key</font></td></tr><tr ><td
color="pink"><font point-size="9">W_got_key</font></td><td color="pink"><font
point-size="9">D_got_key</font></td></tr></table>> margin=0.2 shape=none]
- S1_growing -> t18:tableport:w [arrowhead=none]
- t18:tableport:e -> S1_growing
- t19 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">scared</font></td></tr><tr ><td
color="pink"><font point-size="9">close_scared</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t19:tableport:w [arrowhead=none]
- t19:tableport:e -> S3_closing
- t20 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">_got_phase</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t20:tableport:w [arrowhead=none]
- t20:tableport:e -> S4_closed
- t21 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">scared</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t21:tableport:w [arrowhead=none]
- t21:tableport:e -> S4_closed
- t22 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_with_error</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t22:tableport:w [arrowhead=none]
- t22:tableport:e -> S4_closed
- t23 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">got_key</font></td></tr><tr ><td
color="pink"><font point-size="9">W_got_key</font></td><td color="pink"><font
point-size="9">D_got_key</font></td></tr></table>> margin=0.2 shape=none]
- S1_lonely -> t23:tableport:w [arrowhead=none]
- t23:tableport:e -> S1_lonely
- t24 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_lonely</font></td></tr></table>>
margin=0.2 shape=none]
- S1_growing -> t24:tableport:w [arrowhead=none]
- t24:tableport:e -> S3_closing
- t25 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_happy</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t25:tableport:w [arrowhead=none]
- t25:tableport:e -> S3_closing
- t26 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">happy</font></td></tr></table>> margin=0.2 shape=none]
- S1_growing -> t26:tableport:w [arrowhead=none]
- t26:tableport:e -> S2_happy
- t27 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_error</font></td></tr><tr ><td
color="pink"><font point-size="9">close_error</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t27:tableport:w [arrowhead=none]
- t27:tableport:e -> S3_closing
- t28 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_rx_error</font></td></tr></table>>
margin=0.2 shape=none]
- S1_lonely -> t28:tableport:w [arrowhead=none]
- t28:tableport:e -> S3_closing
- t29 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_unwelcome</font></td></tr></table>> margin=0.2
shape=none]
- S3_closing -> t29:tableport:w [arrowhead=none]
- t29:tableport:e -> S3_closing
- t30 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_error</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t30:tableport:w [arrowhead=none]
- t30:tableport:e -> S3_closing
- t31 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_verifier</font></td></tr></table>> margin=0.2
shape=none]
- S3_closing -> t31:tableport:w [arrowhead=none]
- t31:tableport:e -> S3_closing
- t32 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_with_error</font></td></tr></table>>
margin=0.2 shape=none]
- S1_growing -> t32:tableport:w [arrowhead=none]
- t32:tableport:e -> S4_closed
- t33 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">scared</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t33:tableport:w [arrowhead=none]
- t33:tableport:e -> S3_closing
- t34 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">send</font></td></tr><tr ><td
color="pink"><font point-size="9">S_send</font></td></tr></table>> margin=0.2
shape=none]
- S1_growing -> t34:tableport:w [arrowhead=none]
- t34:tableport:e -> S1_growing
- t35 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_unwelcome</font></td></tr><tr
><td color="pink"><font
point-size="9">close_unwelcome</font></td></tr></table>> margin=0.2 shape=none]
- S1_lonely -> t35:tableport:w [arrowhead=none]
- t35:tableport:e -> S3_closing
- t36 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">_got_version</font></td></tr></table>> margin=0.2
shape=none]
- S3_closing -> t36:tableport:w [arrowhead=none]
- t36:tableport:e -> S3_closing
- t37 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">happy</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t37:tableport:w [arrowhead=none]
- t37:tableport:e -> S3_closing
- t38 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">send</font></td></tr><tr ><td
color="pink"><font point-size="9">S_send</font></td></tr></table>> margin=0.2
shape=none]
- S2_happy -> t38:tableport:w [arrowhead=none]
- t38:tableport:e -> S2_happy
- t39 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">error</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t39:tableport:w [arrowhead=none]
- t39:tableport:e -> S4_closed
- t40 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_unwelcome</font></td></tr></table>> margin=0.2
shape=none]
- S4_closed -> t40:tableport:w [arrowhead=none]
- t40:tableport:e -> S4_closed
- t41 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_lonely</font></td></tr></table>>
margin=0.2 shape=none]
- S0_empty -> t41:tableport:w [arrowhead=none]
- t41:tableport:e -> S3_closing
- t42 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_verifier</font></td></tr></table>> margin=0.2
shape=none]
- S4_closed -> t42:tableport:w [arrowhead=none]
- t42:tableport:e -> S4_closed
- t43 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">_got_dilate</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t43:tableport:w [arrowhead=none]
- t43:tableport:e -> S4_closed
- t44 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_got_phase</font></td></tr><tr ><td
color="pink"><font point-size="9">W_received</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t44:tableport:w [arrowhead=none]
- t44:tableport:e -> S2_happy
- t45 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">send</font></td></tr><tr ><td
color="pink"><font point-size="9">S_send</font></td></tr></table>> margin=0.2
shape=none]
- S0_empty -> t45:tableport:w [arrowhead=none]
- t45:tableport:e -> S0_empty
- t46 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">scared</font></td></tr><tr ><td
color="pink"><font point-size="9">close_scared</font></td></tr></table>>
margin=0.2 shape=none]
- S1_lonely -> t46:tableport:w [arrowhead=none]
- t46:tableport:e -> S3_closing
- t47 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">error</font></td></tr><tr ><td
color="pink"><font point-size="9">W_close_with_error</font></td></tr></table>>
margin=0.2 shape=none]
- S3_closing -> t47:tableport:w [arrowhead=none]
- t47:tableport:e -> S4_closed
- t48 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">happy</font></td></tr></table>> margin=0.2 shape=none]
- S1_lonely -> t48:tableport:w [arrowhead=none]
- t48:tableport:e -> S2_happy
- t49 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_got_version</font></td></tr><tr
><td color="pink"><font
point-size="9">process_version</font></td></tr></table>> margin=0.2 shape=none]
- S2_happy -> t49:tableport:w [arrowhead=none]
- t49:tableport:e -> S2_happy
- t50 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">_got_dilate</font></td></tr></table>> margin=0.2 shape=none]
- S3_closing -> t50:tableport:w [arrowhead=none]
- t50:tableport:e -> S3_closing
- t51 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">_got_version</font></td></tr></table>> margin=0.2
shape=none]
- S4_closed -> t51:tableport:w [arrowhead=none]
- t51:tableport:e -> S4_closed
- t52 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">happy</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t52:tableport:w [arrowhead=none]
- t52:tableport:e -> S4_closed
- t53 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_lonely</font></td></tr></table>>
margin=0.2 shape=none]
- S1_lonely -> t53:tableport:w [arrowhead=none]
- t53:tableport:e -> S3_closing
- t54 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_verifier</font></td></tr><tr
><td color="pink"><font point-size="9">W_got_verifier</font></td></tr></table>>
margin=0.2 shape=none]
- S2_happy -> t54:tableport:w [arrowhead=none]
- t54:tableport:e -> S2_happy
- t55 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_seed</font></td></tr></table>> margin=0.2 shape=none]
- S0_empty -> t55:tableport:w [arrowhead=none]
- t55:tableport:e -> S1_growing
- t56 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S4_closed -> t56:tableport:w [arrowhead=none]
- t56:tableport:e -> S4_closed
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._code.Code.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._code.Code.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._code.Code.m.dot
2024-10-31 09:39:10.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._code.Code.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S4_known [color=blue fontame=Menlo shape=ellipse style=""]
- S3_allocating [color=blue fontame=Menlo shape=ellipse style=""]
- S2_inputting_words [color=blue fontame=Menlo shape=ellipse style=""]
- S1_inputting_nameplate [color=blue fontame=Menlo shape=ellipse style=""]
- S0_idle [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- t0 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_nameplate</font></td></tr><tr
><td color="pink"><font
point-size="9">do_middle_input</font></td></tr></table>> margin=0.2 shape=none]
- S1_inputting_nameplate -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S2_inputting_words
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">input_code</font></td></tr><tr ><td
color="pink"><font point-size="9">do_start_input</font></td></tr></table>>
margin=0.2 shape=none]
- S0_idle -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S1_inputting_nameplate
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">allocate_code</font></td></tr><tr
><td color="pink"><font
point-size="9">do_start_allocate</font></td></tr></table>> margin=0.2
shape=none]
- S0_idle -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S3_allocating
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_set_code</font></td></tr><tr ><td
color="pink"><font point-size="9">do_set_code</font></td></tr></table>>
margin=0.2 shape=none]
- S0_idle -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S4_known
- t4 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">allocated</font></td></tr><tr ><td
color="pink"><font point-size="9">do_finish_allocate</font></td></tr></table>>
margin=0.2 shape=none]
- S3_allocating -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S4_known
- t5 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">finished_input</font></td></tr><tr
><td color="pink"><font
point-size="9">do_finish_input</font></td></tr></table>> margin=0.2 shape=none]
- S2_inputting_words -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S4_known
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._input.Input.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._input.Input.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._input.Input.m.dot
2024-10-31 09:39:10.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._input.Input.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,94 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S4_done [color=blue fontame=Menlo shape=ellipse style=""]
- S3_typing_code_yes_wordlist [color=blue fontame=Menlo shape=ellipse
style=""]
- S2_typing_code_no_wordlist [color=blue fontame=Menlo shape=ellipse
style=""]
- S1_typing_nameplate [color=blue fontame=Menlo shape=ellipse style=""]
- S0_idle [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- t0 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">got_wordlist</font></td></tr><tr
><td color="pink"><font point-size="9">record_wordlist</font></td><td
color="pink"><font
point-size="9">notify_wordlist_waiters</font></td></tr></table>> margin=0.2
shape=none]
- S0_idle -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S0_idle
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">_choose_nameplate</font></td></tr><tr ><td
color="pink"><font
point-size="9">record_all_nameplates</font></td></tr></table>> margin=0.2
shape=none]
- S1_typing_nameplate -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S2_typing_code_no_wordlist
- t2 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_nameplates</font></td></tr></table>> margin=0.2
shape=none]
- S2_typing_code_no_wordlist -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S2_typing_code_no_wordlist
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">refresh_nameplates</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate1</font></td></tr></table>>
margin=0.2 shape=none]
- S3_typing_code_yes_wordlist -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S3_typing_code_yes_wordlist
- t4 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_word_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">_get_word_completions</font></td></tr></table>> margin=0.2
shape=none]
- S3_typing_code_yes_wordlist -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S3_typing_code_yes_wordlist
- t5 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">choose_words</font></td></tr><tr
><td color="pink"><font point-size="9">do_words</font></td></tr></table>>
margin=0.2 shape=none]
- S2_typing_code_no_wordlist -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S4_done
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_nameplate_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate2</font></td></tr></table>>
margin=0.2 shape=none]
- S3_typing_code_yes_wordlist -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S3_typing_code_yes_wordlist
- t7 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">_choose_nameplate</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate3</font></td></tr></table>>
margin=0.2 shape=none]
- S3_typing_code_yes_wordlist -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S3_typing_code_yes_wordlist
- t8 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_word_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_must_choose_nameplate1</font></td></tr></table>>
margin=0.2 shape=none]
- S1_typing_nameplate -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S1_typing_nameplate
- t9 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">choose_words</font></td></tr><tr
><td color="pink"><font
point-size="9">raise_must_choose_nameplate2</font></td></tr></table>>
margin=0.2 shape=none]
- S1_typing_nameplate -> t9:tableport:w [arrowhead=none]
- t9:tableport:e -> S1_typing_nameplate
- t10 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">choose_words</font></td></tr><tr
><td color="pink"><font
point-size="9">raise_already_chose_words2</font></td></tr></table>> margin=0.2
shape=none]
- S4_done -> t10:tableport:w [arrowhead=none]
- t10:tableport:e -> S4_done
- t11 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">got_wordlist</font></td></tr><tr
><td color="pink"><font point-size="9">record_wordlist</font></td><td
color="pink"><font
point-size="9">notify_wordlist_waiters</font></td></tr></table>> margin=0.2
shape=none]
- S2_typing_code_no_wordlist -> t11:tableport:w [arrowhead=none]
- t11:tableport:e -> S3_typing_code_yes_wordlist
- t12 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_nameplates</font></td></tr></table>> margin=0.2
shape=none]
- S4_done -> t12:tableport:w [arrowhead=none]
- t12:tableport:e -> S4_done
- t13 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_word_completions</font></td></tr><tr ><td
color="pink"><font point-size="9">no_word_completions</font></td></tr></table>>
margin=0.2 shape=none]
- S2_typing_code_no_wordlist -> t13:tableport:w [arrowhead=none]
- t13:tableport:e -> S2_typing_code_no_wordlist
- t14 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_nameplate_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">_get_nameplate_completions</font></td></tr></table>> margin=0.2
shape=none]
- S1_typing_nameplate -> t14:tableport:w [arrowhead=none]
- t14:tableport:e -> S1_typing_nameplate
- t15 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">refresh_nameplates</font></td></tr><tr ><td
color="pink"><font point-size="9">do_refresh</font></td></tr></table>>
margin=0.2 shape=none]
- S1_typing_nameplate -> t15:tableport:w [arrowhead=none]
- t15:tableport:e -> S1_typing_nameplate
- t16 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_nameplates</font></td></tr></table>> margin=0.2
shape=none]
- S3_typing_code_yes_wordlist -> t16:tableport:w [arrowhead=none]
- t16:tableport:e -> S3_typing_code_yes_wordlist
- t17 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">_choose_nameplate</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate3</font></td></tr></table>>
margin=0.2 shape=none]
- S2_typing_code_no_wordlist -> t17:tableport:w [arrowhead=none]
- t17:tableport:e -> S2_typing_code_no_wordlist
- t18 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">refresh_nameplates</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate1</font></td></tr></table>>
margin=0.2 shape=none]
- S4_done -> t18:tableport:w [arrowhead=none]
- t18:tableport:e -> S4_done
- t19 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">refresh_nameplates</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate1</font></td></tr></table>>
margin=0.2 shape=none]
- S2_typing_code_no_wordlist -> t19:tableport:w [arrowhead=none]
- t19:tableport:e -> S2_typing_code_no_wordlist
- t20 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_nameplate_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate2</font></td></tr></table>>
margin=0.2 shape=none]
- S2_typing_code_no_wordlist -> t20:tableport:w [arrowhead=none]
- t20:tableport:e -> S2_typing_code_no_wordlist
- t21 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_wordlist</font></td></tr></table>> margin=0.2
shape=none]
- S4_done -> t21:tableport:w [arrowhead=none]
- t21:tableport:e -> S4_done
- t22 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">choose_words</font></td></tr><tr
><td color="pink"><font point-size="9">do_words</font></td></tr></table>>
margin=0.2 shape=none]
- S3_typing_code_yes_wordlist -> t22:tableport:w [arrowhead=none]
- t22:tableport:e -> S4_done
- t23 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">_choose_nameplate</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate3</font></td></tr></table>>
margin=0.2 shape=none]
- S4_done -> t23:tableport:w [arrowhead=none]
- t23:tableport:e -> S4_done
- t24 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">start</font></td></tr><tr ><td
color="pink"><font point-size="9">do_start</font></td></tr></table>> margin=0.2
shape=none]
- S0_idle -> t24:tableport:w [arrowhead=none]
- t24:tableport:e -> S1_typing_nameplate
- t25 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_word_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_words1</font></td></tr></table>> margin=0.2
shape=none]
- S4_done -> t25:tableport:w [arrowhead=none]
- t25:tableport:e -> S4_done
- t26 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">get_nameplate_completions</font></td></tr><tr ><td
color="pink"><font
point-size="9">raise_already_chose_nameplate2</font></td></tr></table>>
margin=0.2 shape=none]
- S4_done -> t26:tableport:w [arrowhead=none]
- t26:tableport:e -> S4_done
- t27 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_nameplates</font></td></tr><tr
><td color="pink"><font
point-size="9">record_nameplates</font></td></tr></table>> margin=0.2
shape=none]
- S1_typing_nameplate -> t27:tableport:w [arrowhead=none]
- t27:tableport:e -> S1_typing_nameplate
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._key.Key.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._key.Key.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._key.Key.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._key.Key.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S01 [color=blue fontame=Menlo shape=ellipse style=""]
- S00 [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- S11 [color=blue fontame=Menlo shape=ellipse style=""]
- S10 [color=blue fontame=Menlo shape=ellipse style=""]
- t0 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_code</font></td></tr><tr ><td
color="pink"><font
point-size="9">deliver_code_and_stashed_pake</font></td></tr></table>>
margin=0.2 shape=none]
- S01 -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S11
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_code</font></td></tr><tr ><td
color="pink"><font point-size="9">deliver_code</font></td></tr></table>>
margin=0.2 shape=none]
- S00 -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S10
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_pake</font></td></tr><tr ><td
color="pink"><font point-size="9">deliver_pake</font></td></tr></table>>
margin=0.2 shape=none]
- S10 -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S11
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_pake</font></td></tr><tr ><td
color="pink"><font point-size="9">stash_pake</font></td></tr></table>>
margin=0.2 shape=none]
- S00 -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S01
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._key._SortedKey.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._key._SortedKey.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._key._SortedKey.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._key._SortedKey.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S2_know_key [color=blue fontame=Menlo shape=ellipse style=""]
- S1_know_code [color=blue fontame=Menlo shape=ellipse style=""]
- S0_know_nothing [color=blue fontame="Menlo-Bold" shape=ellipse
style=bold]
- S3_scared [color=blue fontame=Menlo shape=ellipse style=""]
- t0 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_code</font></td></tr><tr ><td
color="pink"><font point-size="9">build_pake</font></td></tr></table>>
margin=0.2 shape=none]
- S0_know_nothing -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S1_know_code
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_pake_bad</font></td></tr><tr
><td color="pink"><font point-size="9">scared</font></td></tr></table>>
margin=0.2 shape=none]
- S1_know_code -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S3_scared
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_pake_good</font></td></tr><tr
><td color="pink"><font point-size="9">compute_key</font></td></tr></table>>
margin=0.2 shape=none]
- S1_know_code -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S2_know_key
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._lister.Lister.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._lister.Lister.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._lister.Lister.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._lister.Lister.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S1B_wanting_connected [color=blue fontame=Menlo shape=ellipse style=""]
- S0B_idle_connected [color=blue fontame=Menlo shape=ellipse style=""]
- S1A_wanting_disconnected [color=blue fontame=Menlo shape=ellipse
style=""]
- S0A_idle_disconnected [color=blue fontame="Menlo-Bold" shape=ellipse
style=bold]
- t0 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">refresh</font></td></tr></table>> margin=0.2 shape=none]
- S1A_wanting_disconnected -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S1A_wanting_disconnected
- t1 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S0A_idle_disconnected -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S0B_idle_connected
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_list</font></td></tr></table>>
margin=0.2 shape=none]
- S1A_wanting_disconnected -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S1B_wanting_connected
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_nameplates</font></td></tr><tr
><td color="pink"><font
point-size="9">I_got_nameplates</font></td></tr></table>> margin=0.2 shape=none]
- S0B_idle_connected -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S0B_idle_connected
- t4 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S0B_idle_connected -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S0A_idle_disconnected
- t5 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">refresh</font></td></tr></table>> margin=0.2 shape=none]
- S0A_idle_disconnected -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S1A_wanting_disconnected
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">refresh</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_list</font></td></tr></table>>
margin=0.2 shape=none]
- S1B_wanting_connected -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S1B_wanting_connected
- t7 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">refresh</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_list</font></td></tr></table>>
margin=0.2 shape=none]
- S0B_idle_connected -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S1B_wanting_connected
- t8 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S1B_wanting_connected -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S1A_wanting_disconnected
- t9 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_nameplates</font></td></tr><tr
><td color="pink"><font
point-size="9">I_got_nameplates</font></td></tr></table>> margin=0.2 shape=none]
- S1B_wanting_connected -> t9:tableport:w [arrowhead=none]
- t9:tableport:e -> S0B_idle_connected
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._mailbox.Mailbox.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._mailbox.Mailbox.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._mailbox.Mailbox.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._mailbox.Mailbox.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,109 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S3A [color=blue fontame=Menlo shape=ellipse style=""]
- S3B [color=blue fontame=Menlo shape=ellipse style=""]
- S1A [color=blue fontame=Menlo shape=ellipse style=""]
- S4 [color=blue fontame=Menlo shape=ellipse style=""]
- S2B [color=blue fontame=Menlo shape=ellipse style=""]
- S2A [color=blue fontame=Menlo shape=ellipse style=""]
- S0B [color=blue fontame=Menlo shape=ellipse style=""]
- S0A [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- t0 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">add_message</font></td></tr></table>> margin=0.2 shape=none]
- S3B -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S3B
- t1 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S4 -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S4
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font
point-size="9">ignore_mood_and_T_mailbox_done</font></td></tr></table>>
margin=0.2 shape=none]
- S0A -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S4
- t3 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S4 -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S4
- t4 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">add_message</font></td></tr><tr ><td
color="pink"><font point-size="9">queue</font></td></tr></table>> margin=0.2
shape=none]
- S0B -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S0B
- t5 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_message_theirs</font></td></tr></table>> margin=0.2
shape=none]
- S4 -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S4
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">add_message</font></td></tr><tr ><td
color="pink"><font point-size="9">queue</font></td></tr></table>> margin=0.2
shape=none]
- S2A -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S2A
- t7 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">record_mood</font></td></tr></table>>
margin=0.2 shape=none]
- S2A -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S3A
- t8 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font
point-size="9">ignore_mood_and_T_mailbox_done</font></td></tr></table>>
margin=0.2 shape=none]
- S0B -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S4
- t9 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S4 -> t9:tableport:w [arrowhead=none]
- t9:tableport:e -> S4
- t10 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">add_message</font></td></tr></table>> margin=0.2 shape=none]
- S4 -> t10:tableport:w [arrowhead=none]
- t10:tableport:e -> S4
- t11 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_message_ours</font></td></tr></table>> margin=0.2
shape=none]
- S4 -> t11:tableport:w [arrowhead=none]
- t11:tableport:e -> S4
- t12 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">add_message</font></td></tr><tr ><td
color="pink"><font point-size="9">queue</font></td></tr></table>> margin=0.2
shape=none]
- S1A -> t12:tableport:w [arrowhead=none]
- t12:tableport:e -> S1A
- t13 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_message_ours</font></td></tr><tr
><td color="pink"><font point-size="9">dequeue</font></td></tr></table>>
margin=0.2 shape=none]
- S2B -> t13:tableport:w [arrowhead=none]
- t13:tableport:e -> S2B
- t14 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">add_message</font></td></tr><tr ><td
color="pink"><font point-size="9">queue</font></td></tr></table>> margin=0.2
shape=none]
- S0A -> t14:tableport:w [arrowhead=none]
- t14:tableport:e -> S0A
- t15 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font
point-size="9">ignore_mood_and_T_mailbox_done</font></td></tr></table>>
margin=0.2 shape=none]
- S1A -> t15:tableport:w [arrowhead=none]
- t15:tableport:e -> S4
- t16 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S0A -> t16:tableport:w [arrowhead=none]
- t16:tableport:e -> S0B
- t17 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_message_ours</font></td></tr></table>> margin=0.2
shape=none]
- S3B -> t17:tableport:w [arrowhead=none]
- t17:tableport:e -> S3B
- t18 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_closed</font></td></tr><tr ><td
color="pink"><font point-size="9">T_mailbox_done</font></td></tr></table>>
margin=0.2 shape=none]
- S3B -> t18:tableport:w [arrowhead=none]
- t18:tableport:e -> S4
- t19 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_open</font></td><td color="pink"><font
point-size="9">drain</font></td></tr></table>> margin=0.2 shape=none]
- S2A -> t19:tableport:w [arrowhead=none]
- t19:tableport:e -> S2B
- t20 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S3B -> t20:tableport:w [arrowhead=none]
- t20:tableport:e -> S3B
- t21 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_mailbox</font></td></tr><tr ><td
color="pink"><font
point-size="9">record_mailbox_and_RC_tx_open_and_drain</font></td></tr></table>>
margin=0.2 shape=none]
- S0B -> t21:tableport:w [arrowhead=none]
- t21:tableport:e -> S2B
- t22 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">add_message</font></td></tr><tr ><td
color="pink"><font point-size="9">queue</font></td><td color="pink"><font
point-size="9">RC_tx_add</font></td></tr></table>> margin=0.2 shape=none]
- S2B -> t22:tableport:w [arrowhead=none]
- t22:tableport:e -> S2B
- t23 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S2B -> t23:tableport:w [arrowhead=none]
- t23:tableport:e -> S2A
- t24 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S3B -> t24:tableport:w [arrowhead=none]
- t24:tableport:e -> S3A
- t25 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_mailbox</font></td></tr><tr ><td
color="pink"><font point-size="9">record_mailbox</font></td></tr></table>>
margin=0.2 shape=none]
- S0A -> t25:tableport:w [arrowhead=none]
- t25:tableport:e -> S1A
- t26 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font
point-size="9">record_mood_and_RC_tx_close</font></td></tr></table>> margin=0.2
shape=none]
- S2B -> t26:tableport:w [arrowhead=none]
- t26:tableport:e -> S3B
- t27 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_close</font></td></tr></table>>
margin=0.2 shape=none]
- S3A -> t27:tableport:w [arrowhead=none]
- t27:tableport:e -> S3B
- t28 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font
face="menlo-italic">rx_message_theirs</font></td></tr><tr ><td
color="pink"><font
point-size="9">N_release_and_accept</font></td></tr></table>> margin=0.2
shape=none]
- S2B -> t28:tableport:w [arrowhead=none]
- t28:tableport:e -> S2B
- t29 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_open</font></td><td color="pink"><font
point-size="9">drain</font></td></tr></table>> margin=0.2 shape=none]
- S1A -> t29:tableport:w [arrowhead=none]
- t29:tableport:e -> S2B
- t30 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S0B -> t30:tableport:w [arrowhead=none]
- t30:tableport:e -> S0A
- t31 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_message_theirs</font></td></tr></table>> margin=0.2
shape=none]
- S3B -> t31:tableport:w [arrowhead=none]
- t31:tableport:e -> S3B
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._nameplate.Nameplate.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._nameplate.Nameplate.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._nameplate.Nameplate.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._nameplate.Nameplate.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,105 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S2B [color=blue fontame=Menlo shape=ellipse style=""]
- S2A [color=blue fontame=Menlo shape=ellipse style=""]
- S1A [color=blue fontame=Menlo shape=ellipse style=""]
- S4A [color=blue fontame=Menlo shape=ellipse style=""]
- S4B [color=blue fontame=Menlo shape=ellipse style=""]
- S0B [color=blue fontame=Menlo shape=ellipse style=""]
- S3B [color=blue fontame=Menlo shape=ellipse style=""]
- S5 [color=blue fontame=Menlo shape=ellipse style=""]
- S3A [color=blue fontame=Menlo shape=ellipse style=""]
- S0A [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- t0 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S0B -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S0A
- t1 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S2A -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S4A
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_release</font></td></tr></table>>
margin=0.2 shape=none]
- S2B -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S4B
- t3 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S3B -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S3A
- t4 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S4B -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S4A
- t5 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S4B -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S4B
- t6 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">release</font></td></tr></table>> margin=0.2 shape=none]
- S4B -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S4B
- t7 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_set_nameplate</font></td></tr><tr
><td color="pink"><font
point-size="9">record_nameplate</font></td></tr></table>> margin=0.2 shape=none]
- S0A -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S1A
- t8 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S3A -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S4A
- t9 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S5 -> t9:tableport:w [arrowhead=none]
- t9:tableport:e -> S5
- t10 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_claim</font></td></tr></table>>
margin=0.2 shape=none]
- S2A -> t10:tableport:w [arrowhead=none]
- t10:tableport:e -> S2B
- t11 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">rx_released</font></td></tr><tr ><td
color="pink"><font point-size="9">T_nameplate_done</font></td></tr></table>>
margin=0.2 shape=none]
- S4B -> t11:tableport:w [arrowhead=none]
- t11:tableport:e -> S5
- t12 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_release</font></td></tr></table>>
margin=0.2 shape=none]
- S3B -> t12:tableport:w [arrowhead=none]
- t12:tableport:e -> S4B
- t13 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">release</font></td></tr><tr ><td
color="pink"><font point-size="9">T_nameplate_done</font></td></tr></table>>
margin=0.2 shape=none]
- S0B -> t13:tableport:w [arrowhead=none]
- t13:tableport:e -> S5
- t14 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">rx_claimed</font></td></tr></table>> margin=0.2 shape=none]
- S4B -> t14:tableport:w [arrowhead=none]
- t14:tableport:e -> S4B
- t15 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">T_nameplate_done</font></td></tr></table>>
margin=0.2 shape=none]
- S0B -> t15:tableport:w [arrowhead=none]
- t15:tableport:e -> S5
- t16 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S3A -> t16:tableport:w [arrowhead=none]
- t16:tableport:e -> S3B
- t17 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">release</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_release</font></td></tr></table>>
margin=0.2 shape=none]
- S3B -> t17:tableport:w [arrowhead=none]
- t17:tableport:e -> S4B
- t18 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">_set_nameplate</font></td></tr><tr
><td color="pink"><font
point-size="9">record_nameplate_and_RC_tx_claim</font></td></tr></table>>
margin=0.2 shape=none]
- S0B -> t18:tableport:w [arrowhead=none]
- t18:tableport:e -> S2B
- t19 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">rx_claimed</font></td></tr><tr ><td
color="pink"><font point-size="9">I_got_wordlist</font></td><td
color="pink"><font point-size="9">M_got_mailbox</font></td></tr></table>>
margin=0.2 shape=none]
- S2B -> t19:tableport:w [arrowhead=none]
- t19:tableport:e -> S3B
- t20 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">release</font></td></tr></table>> margin=0.2 shape=none]
- S5 -> t20:tableport:w [arrowhead=none]
- t20:tableport:e -> S5
- t21 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_claim</font></td></tr></table>>
margin=0.2 shape=none]
- S1A -> t21:tableport:w [arrowhead=none]
- t21:tableport:e -> S2B
- t22 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S2B -> t22:tableport:w [arrowhead=none]
- t22:tableport:e -> S2A
- t23 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">connected</font></td></tr><tr ><td
color="pink"><font point-size="9">RC_tx_release</font></td></tr></table>>
margin=0.2 shape=none]
- S4A -> t23:tableport:w [arrowhead=none]
- t23:tableport:e -> S4B
- t24 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">lost</font></td></tr></table>> margin=0.2 shape=none]
- S5 -> t24:tableport:w [arrowhead=none]
- t24:tableport:e -> S5
- t25 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">T_nameplate_done</font></td></tr></table>>
margin=0.2 shape=none]
- S0A -> t25:tableport:w [arrowhead=none]
- t25:tableport:e -> S5
- t26 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S0A -> t26:tableport:w [arrowhead=none]
- t26:tableport:e -> S0B
- t27 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">close</font></td></tr></table>> margin=0.2 shape=none]
- S4A -> t27:tableport:w [arrowhead=none]
- t27:tableport:e -> S4A
- t28 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">T_nameplate_done</font></td></tr></table>>
margin=0.2 shape=none]
- S1A -> t28:tableport:w [arrowhead=none]
- t28:tableport:e -> S5
- t29 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">connected</font></td></tr></table>> margin=0.2 shape=none]
- S5 -> t29:tableport:w [arrowhead=none]
- t29:tableport:e -> S5
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._order.Order.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._order.Order.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._order.Order.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._order.Order.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S1_yes_pake [color=blue fontame=Menlo shape=ellipse style=""]
- S0_no_pake [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- t0 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_non_pake</font></td></tr><tr
><td color="pink"><font point-size="9">deliver</font></td></tr></table>>
margin=0.2 shape=none]
- S1_yes_pake -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S1_yes_pake
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_non_pake</font></td></tr><tr
><td color="pink"><font point-size="9">queue</font></td></tr></table>>
margin=0.2 shape=none]
- S0_no_pake -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S0_no_pake
- t2 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">got_pake</font></td></tr><tr ><td
color="pink"><font point-size="9">notify_key</font></td><td color="pink"><font
point-size="9">drain</font></td></tr></table>> margin=0.2 shape=none]
- S0_no_pake -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S1_yes_pake
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._receive.Receive.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._receive.Receive.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._receive.Receive.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._receive.Receive.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S1_unverified_key [color=blue fontame=Menlo shape=ellipse style=""]
- S3_scared [color=blue fontame=Menlo shape=ellipse style=""]
- S0_unknown_key [color=blue fontame="Menlo-Bold" shape=ellipse
style=bold]
- S2_verified_key [color=blue fontame=Menlo shape=ellipse style=""]
- t0 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_message_bad</font></td></tr></table>> margin=0.2
shape=none]
- S3_scared -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S3_scared
- t1 [label=<<table ><tr ><td color="purple" colspan="4"
port="tableport"><font face="menlo-italic">got_message_good</font></td></tr><tr
><td color="pink"><font point-size="9">S_got_verified_key</font></td><td
color="pink"><font point-size="9">W_happy</font></td><td color="pink"><font
point-size="9">W_got_verifier</font></td><td color="pink"><font
point-size="9">W_got_message</font></td></tr></table>> margin=0.2 shape=none]
- S1_unverified_key -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S2_verified_key
- t2 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">got_message_good</font></td></tr></table>> margin=0.2
shape=none]
- S3_scared -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S3_scared
- t3 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_message_good</font></td></tr><tr
><td color="pink"><font point-size="9">W_got_message</font></td></tr></table>>
margin=0.2 shape=none]
- S2_verified_key -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> S2_verified_key
- t4 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_key</font></td></tr><tr ><td
color="pink"><font point-size="9">record_key</font></td></tr></table>>
margin=0.2 shape=none]
- S0_unknown_key -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> S1_unverified_key
- t5 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_message_bad</font></td></tr><tr
><td color="pink"><font point-size="9">W_scared</font></td></tr></table>>
margin=0.2 shape=none]
- S1_unverified_key -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> S3_scared
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">got_message_bad</font></td></tr><tr
><td color="pink"><font point-size="9">W_scared</font></td></tr></table>>
margin=0.2 shape=none]
- S2_verified_key -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S3_scared
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._send.Send.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._send.Send.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._send.Send.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._send.Send.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S0_no_key [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- S1_verified_key [color=blue fontame=Menlo shape=ellipse style=""]
- t0 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">got_verified_key</font></td></tr><tr
><td color="pink"><font point-size="9">record_key</font></td><td
color="pink"><font point-size="9">drain</font></td></tr></table>> margin=0.2
shape=none]
- S0_no_key -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> S1_verified_key
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">send</font></td></tr><tr ><td
color="pink"><font point-size="9">deliver</font></td></tr></table>> margin=0.2
shape=none]
- S1_verified_key -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S1_verified_key
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">send</font></td></tr><tr ><td
color="pink"><font point-size="9">queue</font></td></tr></table>> margin=0.2
shape=none]
- S0_no_key -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S0_no_key
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._terminator.Terminator.m.dot
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._terminator.Terminator.m.dot
---
old/magic_wormhole-0.23.0/docs/state-machines/.automat_visualize/wormhole._terminator.Terminator.m.dot
2024-10-31 09:39:11.000000000 +0100
+++
new/magic_wormhole-0.24.0/docs/state-machines/.automat_visualize/wormhole._terminator.Terminator.m.dot
1970-01-01 01:00:00.000000000 +0100
@@ -1,57 +0,0 @@
-digraph {
- graph [dpi=100 pack=true]
- node [fontname=Menlo]
- edge [fontname=Menlo]
- S0o [color=blue fontame=Menlo shape=ellipse style=""]
- S_stoppingD [color=blue fontame=Menlo shape=ellipse style=""]
- Smo [color=blue fontame=Menlo shape=ellipse style=""]
- S_stopped [color=blue fontame=Menlo shape=ellipse style=""]
- Sm [color=blue fontame=Menlo shape=ellipse style=""]
- Snm [color=blue fontame=Menlo shape=ellipse style=""]
- S_stoppingRC [color=blue fontame=Menlo shape=ellipse style=""]
- Sn [color=blue fontame=Menlo shape=ellipse style=""]
- Sno [color=blue fontame=Menlo shape=ellipse style=""]
- Snmo [color=blue fontame="Menlo-Bold" shape=ellipse style=bold]
- t0 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_mailbox</font></td></tr></table>>
margin=0.2 shape=none]
- Smo -> t0:tableport:w [arrowhead=none]
- t0:tableport:e -> Sm
- t1 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">stoppedRC</font></td></tr><tr ><td
color="pink"><font point-size="9">stop_dilator</font></td></tr></table>>
margin=0.2 shape=none]
- S_stoppingRC -> t1:tableport:w [arrowhead=none]
- t1:tableport:e -> S_stoppingD
- t2 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">nameplate_done</font></td></tr><tr
><td color="pink"><font point-size="9">RC_stop</font></td></tr></table>>
margin=0.2 shape=none]
- Sn -> t2:tableport:w [arrowhead=none]
- t2:tableport:e -> S_stoppingRC
- t3 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">mailbox_done</font></td></tr></table>> margin=0.2
shape=none]
- Snm -> t3:tableport:w [arrowhead=none]
- t3:tableport:e -> Sn
- t4 [label=<<table ><tr ><td color="purple" colspan="2"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_nameplate</font></td><td
color="pink"><font point-size="9">close_mailbox</font></td></tr></table>>
margin=0.2 shape=none]
- Snmo -> t4:tableport:w [arrowhead=none]
- t4:tableport:e -> Snm
- t5 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">mailbox_done</font></td></tr></table>> margin=0.2
shape=none]
- Snmo -> t5:tableport:w [arrowhead=none]
- t5:tableport:e -> Sno
- t6 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">stoppedD</font></td></tr><tr ><td
color="pink"><font point-size="9">B_closed</font></td></tr></table>> margin=0.2
shape=none]
- S_stoppingD -> t6:tableport:w [arrowhead=none]
- t6:tableport:e -> S_stopped
- t7 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">nameplate_done</font></td></tr></table>> margin=0.2
shape=none]
- Sno -> t7:tableport:w [arrowhead=none]
- t7:tableport:e -> S0o
- t8 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font
point-size="9">ignore_mood_and_RC_stop</font></td></tr></table>> margin=0.2
shape=none]
- S0o -> t8:tableport:w [arrowhead=none]
- t8:tableport:e -> S_stoppingRC
- t9 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">close</font></td></tr><tr ><td
color="pink"><font point-size="9">close_nameplate</font></td></tr></table>>
margin=0.2 shape=none]
- Sno -> t9:tableport:w [arrowhead=none]
- t9:tableport:e -> Sn
- t10 [label=<<table ><tr ><td color="purple" colspan="1"
port="tableport"><font face="menlo-italic">mailbox_done</font></td></tr><tr
><td color="pink"><font point-size="9">RC_stop</font></td></tr></table>>
margin=0.2 shape=none]
- Sm -> t10:tableport:w [arrowhead=none]
- t10:tableport:e -> S_stoppingRC
- t11 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">nameplate_done</font></td></tr></table>> margin=0.2
shape=none]
- Snm -> t11:tableport:w [arrowhead=none]
- t11:tableport:e -> Sm
- t12 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">mailbox_done</font></td></tr></table>> margin=0.2
shape=none]
- Smo -> t12:tableport:w [arrowhead=none]
- t12:tableport:e -> S0o
- t13 [label=<<table ><tr ><td color="purple" port="tableport"><font
face="menlo-italic">nameplate_done</font></td></tr></table>> margin=0.2
shape=none]
- Snmo -> t13:tableport:w [arrowhead=none]
- t13:tableport:e -> Smo
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/src/magic_wormhole.egg-info/PKG-INFO
new/magic_wormhole-0.24.0/src/magic_wormhole.egg-info/PKG-INFO
--- old/magic_wormhole-0.23.0/src/magic_wormhole.egg-info/PKG-INFO
2026-03-10 23:51:03.000000000 +0100
+++ new/magic_wormhole-0.24.0/src/magic_wormhole.egg-info/PKG-INFO
2026-05-05 18:31:36.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: magic-wormhole
-Version: 0.23.0
+Version: 0.24.0
Summary: Securely transfer data between computers
Home-page: https://github.com/warner/magic-wormhole
Author: Brian Warner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/src/magic_wormhole.egg-info/SOURCES.txt
new/magic_wormhole-0.24.0/src/magic_wormhole.egg-info/SOURCES.txt
--- old/magic_wormhole-0.23.0/src/magic_wormhole.egg-info/SOURCES.txt
2026-03-10 23:51:03.000000000 +0100
+++ new/magic_wormhole-0.24.0/src/magic_wormhole.egg-info/SOURCES.txt
2026-05-05 18:31:36.000000000 +0200
@@ -48,19 +48,6 @@
docs/state-machines/receive.dot
docs/state-machines/send.dot
docs/state-machines/terminator.dot
-docs/state-machines/.automat_visualize/wormhole._allocator.Allocator.m.dot
-docs/state-machines/.automat_visualize/wormhole._boss.Boss.m.dot
-docs/state-machines/.automat_visualize/wormhole._code.Code.m.dot
-docs/state-machines/.automat_visualize/wormhole._input.Input.m.dot
-docs/state-machines/.automat_visualize/wormhole._key.Key.m.dot
-docs/state-machines/.automat_visualize/wormhole._key._SortedKey.m.dot
-docs/state-machines/.automat_visualize/wormhole._lister.Lister.m.dot
-docs/state-machines/.automat_visualize/wormhole._mailbox.Mailbox.m.dot
-docs/state-machines/.automat_visualize/wormhole._nameplate.Nameplate.m.dot
-docs/state-machines/.automat_visualize/wormhole._order.Order.m.dot
-docs/state-machines/.automat_visualize/wormhole._receive.Receive.m.dot
-docs/state-machines/.automat_visualize/wormhole._send.Send.m.dot
-docs/state-machines/.automat_visualize/wormhole._terminator.Terminator.m.dot
misc/demo-journal.py
misc/dump-stats.py
misc/dump-timing.py
@@ -107,9 +94,6 @@
src/wormhole/transit.py
src/wormhole/util.py
src/wormhole/wormhole.py
-src/wormhole/wormhole_complete.bash
-src/wormhole/wormhole_complete.fish
-src/wormhole/wormhole_complete.zsh
src/wormhole/xfer_util.py
src/wormhole/_dilation/__init__.py
src/wormhole/_dilation/_noise.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/magic_wormhole-0.23.0/src/wormhole/_version.py
new/magic_wormhole-0.24.0/src/wormhole/_version.py
--- old/magic_wormhole-0.23.0/src/wormhole/_version.py 2026-03-10
23:51:03.380799800 +0100
+++ new/magic_wormhole-0.24.0/src/wormhole/_version.py 2026-05-05
18:31:36.389144700 +0200
@@ -8,11 +8,11 @@
version_json = '''
{
- "date": "2026-03-10T16:39:48-0600",
+ "date": "2026-05-05T10:25:10-0600",
"dirty": false,
"error": null,
- "full-revisionid": "c0fc2dc3ea07b84cc88ca7bbb05d9e48264567de",
- "version": "0.23.0"
+ "full-revisionid": "3bf46e020341ff966aa1ca58d7260005256c1a8f",
+ "version": "0.24.0"
}
''' # END VERSION_JSON
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/src/wormhole/cli/cmd_receive.py
new/magic_wormhole-0.24.0/src/wormhole/cli/cmd_receive.py
--- old/magic_wormhole-0.23.0/src/wormhole/cli/cmd_receive.py 2026-03-10
23:34:16.000000000 +0100
+++ new/magic_wormhole-0.24.0/src/wormhole/cli/cmd_receive.py 2026-05-05
18:22:40.000000000 +0200
@@ -298,7 +298,7 @@
def _handle_text(self, them_d, w):
# we're receiving a text message
self.args.timing.add("print")
- print(them_d["message"], file=self.args.stdout)
+ print(repr(them_d["message"])[1:-1], file=self.args.stdout)
self._send_data({"answer": {"message_ack": "ok"}}, w)
def _handle_file(self, them_d):
@@ -376,7 +376,7 @@
# the incoming file _inside_ of it (i.e.. don't
# delete + overwrite whole tree)
abs_destname = os.path.abspath(
- os.path.join(self.args.cwd, self.args.output_file,
destname)
+ os.path.join(self.args.cwd, self.args.output_file,
os.path.basename(destname))
)
overwrite_allowed = True
else:
@@ -466,7 +466,7 @@
"""
out_path = os.path.join(extract_dir, info.filename)
out_path = os.path.abspath(out_path)
- if not out_path.startswith(extract_dir):
+ if not out_path.startswith(extract_dir + os.sep):
raise ValueError(
"malicious zipfile, %s outside of extract_dir %s" %
(info.filename, extract_dir))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/magic_wormhole-0.23.0/src/wormhole/test/test_cli.py
new/magic_wormhole-0.24.0/src/wormhole/test/test_cli.py
--- old/magic_wormhole-0.23.0/src/wormhole/test/test_cli.py 2026-03-10
23:34:16.000000000 +0100
+++ new/magic_wormhole-0.24.0/src/wormhole/test/test_cli.py 2026-05-05
18:23:45.000000000 +0200
@@ -8,6 +8,7 @@
import zipfile
from functools import partial
from textwrap import dedent, fill
+from pathlib import Path
from click import UsageError
from click.testing import CliRunner
@@ -24,6 +25,9 @@
import pytest
import pytest_twisted
+from hypothesis import given
+from hypothesis import strategies as st
+
from .. import __version__
from .._interfaces import ITorManager
from ..cli import cli, cmd_receive, cmd_send, welcome
@@ -1161,6 +1165,7 @@
args.output_file = None
ef = cmd_receive.Receiver(args)._extract_file
extract_dir = os.path.abspath(tmpdir_factory.mktemp("filenames"))
+ extract_base = os.path.basename(extract_dir)
zf = mock.Mock()
zi = mock.Mock()
@@ -1172,6 +1177,21 @@
assert zf.extract.mock_calls == [mock.call(zi.filename,
path=extract_dir)]
assert chmod.mock_calls == [mock.call(expected, 5)]
+ # these test that the receiver prevents "Zip Slip", where zipfile
+ # members contain ".." or path-resetting extra slashes, to escape
+ # the target directory. The zipfile module already strips
+ # leading-slash, double-slash, ".", and "..", making the output safe
+ # against those, but we go further and throw an error if we see them
+
+ # basic reach-for-root attack
+ zf = mock.Mock()
+ zi = mock.Mock()
+ zi.filename = "/etc/passwd"
+ with pytest.raises(ValueError) as e:
+ ef(zf, zi, extract_dir)
+ assert "malicious zipfile" in str(e.value)
+
+ # basic climb-the-tree attack
zf = mock.Mock()
zi = mock.Mock()
zi.filename = "../haha"
@@ -1179,23 +1199,32 @@
ef(zf, zi, extract_dir)
assert "malicious zipfile" in str(e)
+ # sneaky form that reaches for a sibling of the starting directory
+ # whose name is an extension of our own, like using
+ # "../target2/foo.txt" to escape a "target" directory. If the check
+ # in cmd_receive.py uses .startswith() *without* an extra / or
+ # os.sep, it won't catch this, and zipfile won't either.
zf = mock.Mock()
zi = mock.Mock()
- zi.filename = "haha//root" # abspath squashes this, hopefully zipfile
- # does too
- zi.external_attr = 5 << 16
- expected = os.path.join(extract_dir, "haha", "root")
+ zi.filename = "../{}-plus-hyphen/haha".format(extract_base)
+ zi.external_attr = 0o600 << 16
with mock.patch.object(cmd_receive.os, "chmod") as chmod:
- ef(zf, zi, extract_dir)
- assert zf.extract.mock_calls, [mock.call(zi.filename,
path=extract_dir)]
- assert chmod.mock_calls == [mock.call(expected, 5)]
+ with pytest.raises(ValueError) as e:
+ ef(zf, zi, extract_dir)
+ assert "malicious zipfile" in str(e)
+ # this form uses an internal extra slash to attempt access to the
+ # filesystem root, we rely on zipfile's handling (no error)
zf = mock.Mock()
zi = mock.Mock()
- zi.filename = "/etc/passwd"
- with pytest.raises(ValueError) as e:
+ # abspath squashes this, hopefully zipfile does too
+ zi.filename = "haha//root"
+ zi.external_attr = 5 << 16
+ expected = os.path.join(extract_dir, "haha", "root")
+ with mock.patch("os.chmod") as chmod:
ef(zf, zi, extract_dir)
- assert "malicious zipfile" in str(e.value)
+ assert zf.extract.mock_calls, [mock.call(zi.filename,
path=extract_dir)]
+ assert chmod.mock_calls == [mock.call(expected, 5)]
expected = os.path.join(extract_dir, "evil.txt")
@@ -1222,6 +1251,65 @@
assert s == os.path.join(tmpdir, "destination_file")
+def test_existing_destdir_malicious(tmpdir_factory):
+ """
+ Test that our attempts to preserve an existing output
+ directory correctly work even if a zip contains a (possibly)
+ malicious path pointing outside of the destdir (e.g. via ../ and
+ similar)
+ """
+ args = mock.Mock()
+ args.relay_url = ""
+ tmpdir = tempfile.mkdtemp()
+ args.cwd = os.getcwd()
+ args.output_file = tmpdir
+ cmd = cmd_receive.Receiver(args)
+
+ s = cmd._decide_destname(None, "../../../destination_file")
+ assert s == os.path.join(tmpdir, "destination_file")
+
+
+@given(
+ st.lists(
+ st.one_of(
+ st.just(".."),
+ st.text(),
+ )
+ ),
+ st.one_of([st.just("file"), st.just("directory")]),
+ st.booleans(),
+)
+def test_destdir_traversal(tmpdir_factory, segments, mode, outdir):
+ """
+ Let Hypothesis explore the space of directories, and ensure we
+ can't traverse outside of our base.
+
+ segments: random path segments, including ".."'s
+ mode: "file" or "directory" (currently unused by _decide_destname)
+ outdir: whether to include an arg for pre-existing output directory
+ """
+ base = tmpdir_factory.mktemp("base")
+ args = mock.Mock()
+ args.relay_url = ""
+ if outdir:
+ args.output_file = base
+ else:
+ args.output_file = None
+
+ receiver = cmd_receive.Receiver(args)
+ receiver.args.cwd = base
+
+ try:
+ result = receiver._decide_destname(mode, "/".join(segments))
+ except cmd_receive.TransferRejectedError:
+ # in this case, we wouldn't even have tried to write to the
+ # path, so whatever happened to get here (path-wise) is fine
+ return
+ rpath = Path(result)
+ bpath = Path(base)
+ assert rpath.is_relative_to(bpath), "_decide_destname must always decide a
subpath"
+
+
def test_not_remove_existing_destdir(tmpdir_factory):
"""
Do not remove an entire existing directory.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/src/wormhole/wormhole_complete.bash
new/magic_wormhole-0.24.0/src/wormhole/wormhole_complete.bash
--- old/magic_wormhole-0.23.0/src/wormhole/wormhole_complete.bash
2025-05-13 01:39:50.000000000 +0200
+++ new/magic_wormhole-0.24.0/src/wormhole/wormhole_complete.bash
1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-_wormhole_completion() {
- local IFS=$'\n'
- local response
-
- response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD
_WORMHOLE_COMPLETE=bash_complete $1)
-
- for completion in $response; do
- IFS=',' read type value <<< "$completion"
-
- if [[ $type == 'dir' ]]; then
- COMPREPLY=()
- compopt -o dirnames
- elif [[ $type == 'file' ]]; then
- COMPREPLY=()
- compopt -o default
- elif [[ $type == 'plain' ]]; then
- COMPREPLY+=($value)
- fi
- done
-
- return 0
-}
-
-_wormhole_completion_setup() {
- complete -o nosort -F _wormhole_completion wormhole
-}
-
-_wormhole_completion_setup;
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/src/wormhole/wormhole_complete.fish
new/magic_wormhole-0.24.0/src/wormhole/wormhole_complete.fish
--- old/magic_wormhole-0.23.0/src/wormhole/wormhole_complete.fish
2025-05-13 01:39:51.000000000 +0200
+++ new/magic_wormhole-0.24.0/src/wormhole/wormhole_complete.fish
1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-function _wormhole_completion;
- set -l response (env _WORMHOLE_COMPLETE=fish_complete
COMP_WORDS=(commandline -cp) COMP_CWORD=(commandline -t) wormhole);
-
- for completion in $response;
- set -l metadata (string split "," $completion);
-
- if test $metadata[1] = "dir";
- __fish_complete_directories $metadata[2];
- else if test $metadata[1] = "file";
- __fish_complete_path $metadata[2];
- else if test $metadata[1] = "plain";
- echo $metadata[2];
- end;
- end;
-end;
-
-complete --no-files --command wormhole --arguments "(_wormhole_completion)";
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/magic_wormhole-0.23.0/src/wormhole/wormhole_complete.zsh
new/magic_wormhole-0.24.0/src/wormhole/wormhole_complete.zsh
--- old/magic_wormhole-0.23.0/src/wormhole/wormhole_complete.zsh
2025-05-13 01:39:50.000000000 +0200
+++ new/magic_wormhole-0.24.0/src/wormhole/wormhole_complete.zsh
1970-01-01 01:00:00.000000000 +0100
@@ -1,41 +0,0 @@
-#compdef wormhole
-
-_wormhole_completion() {
- local -a completions
- local -a completions_with_descriptions
- local -a response
- (( ! $+commands[wormhole] )) && return 1
-
- response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1))
_WORMHOLE_COMPLETE=zsh_complete wormhole)}")
-
- for type key descr in ${response}; do
- if [[ "$type" == "plain" ]]; then
- if [[ "$descr" == "_" ]]; then
- completions+=("$key")
- else
- completions_with_descriptions+=("$key":"$descr")
- fi
- elif [[ "$type" == "dir" ]]; then
- _path_files -/
- elif [[ "$type" == "file" ]]; then
- _path_files -f
- fi
- done
-
- if [ -n "$completions_with_descriptions" ]; then
- _describe -V unsorted completions_with_descriptions -U
- fi
-
- if [ -n "$completions" ]; then
- compadd -U -V unsorted -a completions
- fi
-}
-
-if [[ $zsh_eval_context[-1] == loadautofunc ]]; then
- # autoload from fpath, call function directly
- _wormhole_completion "$@"
-else
- # eval/source/. command, register function for later
- compdef _wormhole_completion wormhole
-fi
-