Hallo Berthold,

On March 14th you introduced a PR entitled Cleanup: fix "unsave" snprintf()s in plannernotes.c <https://github.com/Subsurface-divelog/subsurface/commit/a4834e198d55d50a44d6f80e2137777b64652ce7#diff-0df10959bbcbe5342528360ce6f541a5> for Subsurface.

This PR affected the function  add_icd_entry() in plannernotes.c. The changes, unfortunately, introduced a bug in the display of the icd data for a dive. I include a sample dive plan so that you can see the effect of this change in code. Activate the display of icd data in Preferences, open the attached dive plan and edit the dive plan within the planner. You will see random information being added to the icd data. In fact the icd data are quite messed up because the table should include two lines of gas change information. At least part of the problem lies in lines 55-68 of plannernotes.c.

I spent a bit of time trying to track down the problem, but it appears to be a pointer that writes to a buffer where it should not write to.

Would you be prepared at all to look at this issue?

Kind regards,

willem




--
This message and attachments are subject to a disclaimer.

Please refer to 
http://upnet.up.ac.za/services/it/documentation/docs/004167.pdf <http://upnet.up.ac.za/services/it/documentation/docs/004167.pdf> for full details.
<divelog program='subsurface' version='3'>
<settings>
</settings>
<divesites>
</divesites>
<dives>
<dive number='1' date='2018-05-18' time='09:09:40' duration='76:30 min'>
  <notes>&lt;div&gt;&lt;b&gt;DISCLAIMER / WARNING: THIS IS A NEW IMPLEMENTATION OF THE BUHLMANN ALGORITHM AND A DIVE PLANNER IMPLEMENTATION BASED ON THAT WHICH HAS RECEIVED ONLY A LIMITED AMOUNT OF TESTING. WE STRONGLY RECOMMEND NOT TO PLAN DIVES SIMPLY BASED ON THE RESULTS GIVEN HERE.&lt;/b&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Subsurface (4.7.8.182) dive plan&lt;/b&gt; created on 2018/05/18&lt;/b&gt;&lt;br&gt;Runtime: 77min&lt;br&gt;&lt;/div&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;depth&lt;/th&gt;&lt;th style='padding-left: 10px;'&gt;duration&lt;/th&gt;&lt;th style='padding-left: 10px;'&gt;runtime&lt;/th&gt;&lt;th style='padding-left: 10px; float: left;'&gt;gas&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style='float: left;'&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10136;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 20m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  1min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  1min&lt;/td&gt;&lt;td style='padding-left: 10px; color: red; float: left;'&gt;&lt;b&gt;EAN50&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10137;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 20m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  1min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; color: red; float: left;'&gt;&lt;b&gt;(30/20)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10136;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 45m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  4min&lt;/td&gt;&lt;td style='padding-left: 10px; color: red; float: left;'&gt;&lt;b&gt;(20/32)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10136;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 65m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  6min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10137;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 65m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 20min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 26min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 42m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  3min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 29min&lt;/td&gt;&lt;td style='padding-left: 10px; color: red; float: left;'&gt;&lt;b&gt;(30/20)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 27m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 30min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 27m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 32min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 24m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 32min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 24m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 34min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 21m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 34min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 21m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 36min&lt;/td&gt;&lt;td style='padding-left: 10px; color: red; float: left;'&gt;&lt;b&gt;EAN50&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 18m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 36min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 18m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  2min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 38min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 15m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 38min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 15m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  3min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 41min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 12m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 41min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 12m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  5min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 46min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  9m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 46min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  9m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  7min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 53min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  6m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 53min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  6m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  8min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 61min&lt;/td&gt;&lt;td style='padding-left: 10px; color: red; float: left;'&gt;&lt;b&gt;oxygen&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  3m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  1min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 62min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;-&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  3m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 15min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 76min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px; float: right;'&gt;&amp;#10138;&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  0m&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt;  1min&lt;/td&gt;&lt;td style='padding-left: 10px; float: right;'&gt; 77min&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;div&gt;CNS: 65%&lt;br&gt;OTU: 130&lt;br&gt;&lt;/div&gt;&lt;div&gt;Deco model: Bühlmann ZHL-16C with GFLow = 35% and GFHigh = 75%&lt;br&gt;ATM pressure: 1 013mbar (0m)&lt;br&gt;&lt;/div&gt;&lt;div&gt;Gas consumption (based on SAC 18|15ℓ/min):&lt;br&gt;737ℓ/66bar of &lt;span style='color: red;'&gt;&lt;b&gt;EAN50&lt;/b&gt;&lt;/span&gt; (649ℓ/62bar in planned ascent)&lt;br&gt;&lt;/div&gt;3 170ℓ/140bar of &lt;span style='color: red;'&gt;&lt;b&gt;(20/32)&lt;/b&gt;&lt;/span&gt; (244ℓ/10bar in planned ascent)&lt;br&gt;&amp;nbsp;&amp;mdash; &lt;span style='color: green;'&gt;Minimum gas&lt;/span&gt; (based on 2,0xSAC/+1min@65m): 761ℓ/32bar&lt;span style='color: grey;'&gt;/&amp;Delta;:71bar&lt;/span&gt;&lt;br&gt;&lt;/div&gt;478ℓ/44bar of &lt;span style='color: red;'&gt;&lt;b&gt;(30/20)&lt;/b&gt;&lt;/span&gt; (327ℓ/32bar in planned ascent)&lt;br&gt;&lt;/div&gt;485ℓ/42bar of &lt;span style='color: red;'&gt;&lt;b&gt;oxygen&lt;/b&gt;&lt;/span&gt; (485ℓ/44bar in planned ascent)&lt;br&gt;&lt;/div&gt;&lt;div&gt;Isobaric counterdiffusion information:&lt;table&gt;&lt;tr&gt;&lt;td align='left'&gt;&lt;b&gt;runtime&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;&lt;b&gt;gaschange&lt;/b&gt;&lt;/td&gt;&lt;td style='padding-left: 15px;'&gt;&lt;b&gt;&amp;#916;He&lt;/b&gt;&lt;/td&gt;&lt;td style='padding-left: 20px;'&gt;&lt;b&gt;&amp;#916;N&amp;#8322;&lt;/b&gt;&lt;/td&gt;&lt;td style='padding-left: 10px;'&gt;&lt;b&gt;max &amp;#916;N&amp;#8322;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td rowspan='2' style= 'vertical-align:top;'&gt; 29min&lt;/td&gt;&lt;td rowspan=2 style= 'vertical-align:top;'&gt;(20/32)&amp;#10137;(30/20)&lt;/td&gt;&lt;td style='padding-left: 10px;'&gt;-12,0%&lt;/td&gt;&lt;td style= 'padding-left: 15px; color:#383838;'&gt; +2,0%&lt;/td&gt;&lt;td style='padding-left: 15px;'&gt; +2,4%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 10px;'&gt;-0,63bar&lt;/td&gt;&lt;td style='padding-left: 15px; color:#383838;'&gt;+0,11bar&lt;/td&gt;&lt;td style='padding-left: 15px;'&gt;+0,13bar&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style='color: red;'&gt;Warning: &lt;/span&gt; high pO₂ value 1,65 at 4:00 with gas (30/20) at depth 45 m&lt;br&gt;&lt;/div&gt;</notes>
  <cylinder size='11.094 l' workpressure='206.843 bar' description='AL80' o2='50.0%' start='206.843 bar' end='140.556 bar' depth='21.0 m' />
  <cylinder size='24.0 l' workpressure='232.0 bar' description='D12 232 bar' o2='20.0%' he='32.0%' start='232.0 bar' end='92.357 bar' depth='69.0 m' />
  <cylinder size='11.094 l' workpressure='206.843 bar' description='AL80' o2='30.0%' he='20.0%' start='206.843 bar' end='162.485 bar' depth='42.0 m' />
  <cylinder size='11.094 l' workpressure='206.843 bar' description='AL80' o2='100.0%' start='206.843 bar' end='164.994 bar' depth='6.0 m' />
  <divecomputer model='planned dive' last-manual-time='26:00 min'>
  <depth max='65.0 m' mean='27.951 m' />
  <surface pressure='1.013 bar' />
  <event time='2:01 min' type='25' value='1310750' name='gaschange' cylinder='2' o2='30.0%' he='20.0%' />
  <event time='4:01 min' type='25' value='2097172' name='gaschange' cylinder='1' o2='20.0%' he='32.0%' />
  <event time='28:35 min' type='25' value='1310750' name='gaschange' cylinder='2' o2='30.0%' he='20.0%' />
  <event time='34:21 min' type='11' value='50' name='gaschange' cylinder='0' o2='50.0%' />
  <event time='53:21 min' type='11' value='100' name='gaschange' cylinder='3' o2='100.0%' />
  <sample time='0:00 min' depth='0.0 m' pressure='206.843 bar' />
  <sample time='1:06 min' depth='20.0 m' pressure='203.243 bar' />
  <sample time='2:00 min' depth='20.0 m' pressure='198.833 bar' />
  <sample time='2:01 min' depth='20.0 m' />
  <sample time='4:00 min' depth='45.0 m' pressure='192.675 bar' />
  <sample time='4:01 min' depth='45.0 m' />
  <sample time='6:00 min' depth='65.0 m' pressure='221.707 bar' />
  <sample time='26:00 min' depth='65.0 m' pressure='102.619 bar' />
  <sample time='28:34 min' depth='42.0 m' pressure='92.357 bar' />
  <sample time='28:35 min' depth='42.0 m' />
  <sample time='30:14 min' depth='27.0 m' pressure='182.463 bar' />
  <sample time='32:00 min' depth='27.0 m' pressure='173.414 bar' />
  <sample time='32:20 min' depth='24.0 m' pressure='171.782 bar' />
  <sample time='34:00 min' depth='24.0 m' pressure='163.973 bar' />
  <sample time='34:20 min' depth='21.0 m' pressure='162.485 bar' />
  <sample time='34:21 min' depth='21.0 m' />
  <sample time='36:00 min' depth='21.0 m' pressure='191.885 bar' />
  <sample time='36:20 min' depth='18.0 m' pressure='190.554 bar' />
  <sample time='38:00 min' depth='18.0 m' pressure='184.237 bar' />
  <sample time='38:20 min' depth='15.0 m' pressure='183.045 bar' />
  <sample time='41:00 min' depth='15.0 m' pressure='174.048 bar' />
  <sample time='41:20 min' depth='12.0 m' pressure='172.995 bar' />
  <sample time='46:00 min' depth='12.0 m' pressure='159.19 bar' />
  <sample time='46:20 min' depth='9.0 m' pressure='158.276 bar' />
  <sample time='53:00 min' depth='9.0 m' pressure='141.333 bar' />
  <sample time='53:20 min' depth='6.0 m' pressure='140.556 bar' />
  <sample time='53:21 min' depth='6.0 m' />
  <sample time='61:00 min' depth='6.0 m' pressure='190.994 bar' />
  <sample time='61:30 min' depth='3.0 m' pressure='190.058 bar' />
  <sample time='76:00 min' depth='3.0 m' pressure='165.734 bar' />
  <sample time='76:30 min' depth='0.0 m' pressure='164.994 bar' />
  </divecomputer>
</dive>
</dives>
</divelog>
_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to