Fwd: Fix parameter parsing for omniOBpy setClientCallTimeout, setClientThreadCallTimeout, setClientConnectTimeout
Glen Walker via omniORB-list <[email protected]> Fri, 16 Feb 2024 22:40:11 +1000
| Newsgroups | gmane.comp.corba.omniorb.user |
|---|---|
| Message-ID | <CAEPKXsFRVRqK3Amebgz2FkQW979FcM3ipz2SgP40jYGR6SX3kA@mail.gmail.com> |
--0000000000002a628006117f0c7d Content-Type: multipart/alternative; boundary="0000000000002a627e06117f0c7b" --0000000000002a627e06117f0c7b Content-Type: text/plain; charset="UTF-8" Hi Duncan, I recently came across this issue again, would appreciate it if you would take a look at the included patch. Kind regards, Glen ---------- Forwarded message --------- From: Glen Walker <[email protected]> Date: Wed, 31 Jan 2018 at 13:32 Subject: Fix parameter parsing for omniOBpy setClientCallTimeout, setClientThreadCallTimeout, setClientConnectTimeout To: <[email protected]> The C++ API for omniORB contains the functions namespace omniORB { void setClientCallTimeout(CORBA::ULong millisecs); void setClientCallTimeout(CORBA::Object_ptr obj, CORBA::ULong millisecs); void setClientThreadCallTimeout(CORBA::ULong millisecs); void setClientConnectTimeout(CORBA::ULong millisecs); }; and the Python API for omniORB contains the corresponding functions omniORB.setClientCallTimeout(millisecs) omniORB.setClientCallTimeout(objref, millisecs) omniORB.setClientThreadCallTimeout(millisecs) omniORB.setClientConnectTimeout(millisecs) however omniORBpy is parsing the millisecs parameter as a signed integer instead of an unsigned long. This leads to incorrect timeouts if values over 2^31 - 1 are used. Admittedly this is only a problem for timeouts of over 24.9 days, which should be uncommon, and we only noticed the issue when debugging a problem where we had multipled a timeout in seconds by 1000 more that once. Attached is a patch to fix the issue. Note that it uses "k" to parse the unsigned long, which was introduced in Python 2.3, and will be a problem if omniORBpy still supports earlier versions. Cheers, Glen --0000000000002a627e06117f0c7b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>Hi Duncan,</div><div><br></div><div>I recently came a= cross this issue again, would appreciate it if you would take a look at the= included patch.<br></div><div><br></div><div>Kind regards,</div><div>Glen<= /div><div><br></div><div><br><div class=3D"gmail_quote"><div dir=3D"ltr" cl= ass=3D"gmail_attr">---------- Forwarded message ---------<br>From: <b class= =3D"gmail_sendername" dir=3D"auto">Glen Walker</b> <span dir=3D"auto"><<= a href=3D"mailto:[email protected]">[email protected]</a>></span><br>D= ate: Wed, 31 Jan 2018 at 13:32<br>Subject: Fix parameter parsing for omniOB= py setClientCallTimeout, setClientThreadCallTimeout, setClientConnectTimeou= t<br>To: <<a href=3D"mailto:[email protected]">omniorb-l= [email protected]</a>><br></div><br><br><div dir=3D"ltr"><div><div= ><div><div><div>The C++ API for omniORB contains the functions<br><br><span= style=3D"font-size:small"><span style=3D"font-weight:bold">namespace</span= ></span><span style=3D"font-size:small"> </span><span style=3D"font-size:sm= all">omniORB</span><span style=3D"font-size:small"> {</span><span style=3D"= font-size:small"></span><br>=C2=A0 <span style=3D"font-size:small"></span><= span style=3D"font-size:small"><span style=3D"font-weight:bold">void</span>= </span><span style=3D"font-size:small"> </span><span style=3D"font-size:sma= ll">setClientCallTimeout</span><span style=3D"font-size:small">(</span><spa= n style=3D"font-size:small">CORBA</span><span style=3D"font-size:small">::<= /span><span style=3D"font-size:small">ULong</span><span style=3D"font-size:= small"> </span><span style=3D"font-size:small">millisecs</span><span style= =3D"font-size:small">);<br></span>=C2=A0 <span style=3D"font-size:small"></= span><span style=3D"font-size:small"> </span><span style=3D"font-size:smal= l"><span style=3D"font-weight:bold">void</span></span><span style=3D"font-s= ize:small"> </span><span style=3D"font-size:small">setClientCallTimeout</sp= an><span style=3D"font-size:small">(</span><span style=3D"font-size:small">= CORBA</span><span style=3D"font-size:small">::</span><span style=3D"font-si= ze:small">Object_ptr</span><span style=3D"font-size:small"> </span><span st= yle=3D"font-size:small">obj</span><span style=3D"font-size:small">, </span>= <span style=3D"font-size:small">CORBA</span><span style=3D"font-size:small"= >::</span><span style=3D"font-size:small">ULong</span><span style=3D"font-s= ize:small"> </span><span style=3D"font-size:small">millisecs</span><span st= yle=3D"font-size:small">);</span><span style=3D"font-size:small"><br></span= >=C2=A0 <span style=3D"font-size:small"></span><span style=3D"font-size:sma= ll"><span style=3D"font-weight:bold">void</span></span><span style=3D"font-= size:small"> </span><span style=3D"font-size:small">setClientThreadCallTime= out</span><span style=3D"font-size:small">(</span><span style=3D"font-size:= small">CORBA</span><span style=3D"font-size:small">::</span><span style=3D"= font-size:small">ULong</span><span style=3D"font-size:small"> </span><span = style=3D"font-size:small">millisecs</span><span style=3D"font-size:small">)= ;</span><span style=3D"font-size:small"><br></span>=C2=A0 <span style=3D"fo= nt-size:small"></span><span style=3D"font-size:small"><span style=3D"font-w= eight:bold">void</span></span><span style=3D"font-size:small"> </span><span= style=3D"font-size:small">setClientConnectTimeout</span><span style=3D"fon= t-size:small">(</span><span style=3D"font-size:small">CORBA</span><span sty= le=3D"font-size:small">::</span><span style=3D"font-size:small">ULong</span= ><span style=3D"font-size:small"> </span><span style=3D"font-size:small">mi= llisecs</span><span style=3D"font-size:small">);</span><span style=3D"font-= size:small"></span><br>};<br><br></div>and the Python API for omniORB conta= ins the corresponding functions<br><br>omniORB.setClientCallTimeout(millise= cs)<br>omniORB.setClientCallTimeout(objref, millisecs)<br>omniORB.setClient= ThreadCallTimeout(millisecs)<br>omniORB.setClientConnectTimeout(millisecs)<= br><br></div>however omniORBpy is parsing the millisecs parameter as a sign= ed integer instead of an unsigned long. This leads to incorrect timeouts if= values over 2^31 - 1 are used. Admittedly this is only a problem for timeo= uts of over 24.9 days, which should be uncommon, and we only noticed the is= sue when debugging a problem where we had multipled a timeout in seconds by= 1000 more that once.<br><br></div>Attached is a patch to fix the issue. No= te that it uses "k" to parse the unsigned long, which was introdu= ced in Python 2.3, and will be a problem if omniORBpy still supports earlie= r versions.<br><br></div>Cheers,<br></div>Glen<br></div> </div></div></div> --0000000000002a627e06117f0c7b-- --0000000000002a628006117f0c7d Content-Type: application/x-patch; name="pyomniFunc.cc.patch" Content-Disposition: attachment; filename="pyomniFunc.cc.patch" Content-Transfer-Encoding: base64 Content-ID: <f_jd2ijjra0> X-Attachment-Id: f_jd2ijjra0 LS0tIG9tbmlPUkJweS9tb2R1bGVzL3B5b21uaUZ1bmMuY2MJMjAxNy0wMi0yMSAxMTo0NTo1OS4w MDAwMDAwMDAgKzEzMDAKKysrIHB5b21uaUZ1bmMuY2MJMjAxOC0wMS0zMCAxNjoyMjozNC43MTAx MDEwMDAgKzEzMDAKQEAgLTcxOCwxNSArNzE4LDE1IEBACiAgIHN0YXRpYyBQeU9iamVjdCogcHlv bW5pX3NldENsaWVudENhbGxUaW1lb3V0KFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykK ICAgewogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpID09IDEpIHsKLSAgICAgIGludCB0 aW1lb3V0OwotICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyKikiaSIsICZ0 aW1lb3V0KSkKKyAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKKyAgICAgIGlmICghUHlBcmdf UGFyc2VUdXBsZShhcmdzLCAoY2hhciopImsiLCAmdGltZW91dCkpCiAJcmV0dXJuIDA7CiAgICAg ICBvbW5pT1JCOjpzZXRDbGllbnRDYWxsVGltZW91dCh0aW1lb3V0KTsKICAgICB9CiAgICAgZWxz ZSB7Ci0gICAgICBpbnQgdGltZW91dDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKICAg ICAgIFB5T2JqZWN0KiBweW9ianJlZjsKLSAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdz LCAoY2hhciopIk9pIiwgJnB5b2JqcmVmLCAmdGltZW91dCkpCisgICAgICBpZiAoIVB5QXJnX1Bh cnNlVHVwbGUoYXJncywgKGNoYXIqKSJPayIsICZweW9ianJlZiwgJnRpbWVvdXQpKQogCXJldHVy biAwOwogCiAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmpyZWYgPSBvbW5pUHk6OmdldE9ialJl ZihweW9ianJlZik7CkBAIC03NDcsOCArNzQ3LDggQEAKICAgc3RhdGljIFB5T2JqZWN0KiBweW9t bmlfc2V0Q2xpZW50VGhyZWFkQ2FsbFRpbWVvdXQoUHlPYmplY3QqIHNlbGYsCiAJCQkJCQkgICAg IFB5T2JqZWN0KiBhcmdzKQogICB7Ci0gICAgaW50IHRpbWVvdXQ7Ci0gICAgaWYgKCFQeUFyZ19Q YXJzZVR1cGxlKGFyZ3MsIChjaGFyKikiaSIsICZ0aW1lb3V0KSkKKyAgICB1bnNpZ25lZCBsb25n IHRpbWVvdXQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyKikiayIsICZ0 aW1lb3V0KSkKICAgICAgIHJldHVybiAwOwogCiAgICAgdHJ5IHsKQEAgLTc5NSw4ICs3OTUsOCBA QAogICBzdGF0aWMgUHlPYmplY3QqIHB5b21uaV9zZXRDbGllbnRDb25uZWN0VGltZW91dChQeU9i amVjdCogc2VsZiwKIAkJCQkJCSAgUHlPYmplY3QqIGFyZ3MpCiAgIHsKLSAgICBpbnQgdGltZW91 dDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIqKSJpIiwgJnRpbWVvdXQp KQorICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUo YXJncywgKGNoYXIqKSJrIiwgJnRpbWVvdXQpKQogICAgICAgcmV0dXJuIDA7CiAKICAgICBvbW5p T1JCOjpzZXRDbGllbnRDb25uZWN0VGltZW91dCh0aW1lb3V0KTs= --0000000000002a628006117f0c7d Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ omniORB-list mailing list [email protected] https://www.omniorb-support.com/mailman/listinfo/omniorb-list --0000000000002a628006117f0c7d--