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">&lt;<=
a href=3D"mailto:[email protected]">[email protected]</a>&gt;</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:  &lt;<a href=3D"mailto:[email protected]">omniorb-l=
[email protected]</a>&gt;<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 &quot;k&quot; 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--